Example #1
0
 def save_excel(self):
     try:
         self.target.save(self.targetName)
         return True
     except:
         Base.printErr("保存Excel文件失败!")
         return False
Example #2
0
    def v_login(self, status, expectUser, expectInfo):
        rc = ""
        try:
            if status:  #如果登录的期望结果是成功的
                #从登陆成功的界面上获取用户名
                userLogin = self.driver.find_element_by_css_selector\
                    ("ul[class='nav navbar-nav']>li>a").text
                #如果从界面上获取的用户名和期望的用户名相等
                if userLogin == expectUser:
                    rc = "PASS--登录成功:" + expectUser  #返回验证成功信息
                else:
                    #返回验证失败信息
                    rc = "FAIL--登录错误,期望用户为‘%s’,实际用户为‘%s’"\
                         %(expectUser,userLogin)
            else:  #如果登录的期望结果是失败的
                #获取登录失败提示框中的提示信息
                errBoxMsg = self.driver.find_element_by_class_name(
                    "bootbox-body").text
                #如果界面上获取的错误提示信息和期望的错误提示信息相等
                if errBoxMsg == expectInfo:
                    rc = "PASS--预期的登录错误提示信息验证成功!"  #返回验证成功信息
                else:  #否则不相等
                    #返回验证失败信息
                    rc = "FAIL--登录验证失败,期望错误信息为‘%s’,实际错误信息为‘%s’" \
                          %(expectInfo,errBoxMsg)
        except:
            Base.printErr("ERR--v_login方法验证登陆时失败")
            return rc

            #raise rc
        self.close_driver()  #关闭浏览器
        return rc  #将验证成功、失败、错误等信息返回给调用者
Example #3
0
 def write_by_index(self, row, col, page, value):
     try:
         self.target.get_sheet(page).write(row, col, value)
         return True
     except:
         Base.printErr("按行列号写入Excel文件失败!")
         return False
Example #4
0
    def str_parse_func(self, source):
        try:
            if source[0:1] == "$":
                source = source[1:]
            else:
                return source
            #func = "sql.delProduct(测试产品,服务类)"
            m = source.split(".")
            if len(m) == 2:
                n = m[1].split("(")
                if len(n) == 2:
                    v = self.get_list_value(m[0], n[0])
                    n[1] = n[1].strip(" ")
                    n[1] = n[1].strip(")")
                    n[1] = n[1].strip()
                    xx = n[1].split(",")
                    yy = []
                    for x in xx:
                        x = x.strip()
                        yy.append(x)
                    s = self.str_fill_parm(v, yy)
                    return s

            raise RuntimeError("字符串格式错误:%s" % source)
        except:
            Base.printErr("解析函数字符串失败!")
Example #5
0
 def close_driver(self):
     try:
         self.driver.close()
         return True
     except:
         Base.printErr("浏览器对象不存在!")
         return False
Example #6
0
 def openCrm(self):
     try:
         self.driver.switch_to.default_content()
         self.driver.find_element_by_xpath("//li[@id='s-menu-1']//button").click()
         self.driver.switch_to.frame("iframe-1")#要点击“产品”先进入frame
         return True
     except:
         Base.printErr("打开CRM框架失败!")
         return False
Example #7
0
 def open_excel(self):
     try:
         if not self.data:
             self.data = xlrd.open_workbook(self.file)
             self.target = copy(self.data)
         return True
     except:
         Base.printErr("打开Excel文件失败!")
         return False
Example #8
0
 def str_fill_parm(self, source, vars):
     try:
         if source.find("?") < 0:  #如果没有需要替换的参数则直接返回源字串
             return source
         for var in vars:
             source = source.replace("?", "%s", 1)
             source = source % (var)
         return source
     except:
         Base.printErr("参数替换失败!")
Example #9
0
 def open_driver(self):
     try:
         fp = webdriver.FirefoxProfile(
             Base.get_cur_dir(__file__) + "\\..\\firefoxPro")
         self.driver = webdriver.Firefox(fp)  #打开火狐
         self.driver.maximize_window()  #最大化窗口
         self.driver.implicitly_wait(10)  #隐式等待10秒
         return True
     except:
         Base.printErr("打开或设置浏览器失败!")
         return False
Example #10
0
 def open_driver(self):
     try:
         fp = webdriver.FirefoxProfile("..\\firefoxpro")
         self.driver = webdriver.Firefox(fp)  #打开火狐
         self.driver.maximize_window()  #最大化窗口
         self.driver.implicitly_wait(10)  #隐式等待10秒
         self.driver.get(self.url)  #打开首页url
         return True
     except:
         Base.printErr("打开或设置浏览器失败!")
         return False
Example #11
0
 def get_page_data(self, page):
     try:
         if not self.open_excel():
             return None
         table = self.data.sheet_by_name(page)
         nrows = table.nrows  #行数
         lists = []
         for num in range(0, nrows):
             row = table.row_values(num)
             if row:
                 lists.append(row)
         return lists
     except:
         Base.printErr("打开Excel中用例数据失败!")
Example #12
0
    def get_list_value(self, page, name):
        try:
            if not self.open_excel():
                return None
            table = self.data.sheet_by_name(page)
            nrows = table.nrows  #行数

            for num in range(0, nrows):
                row = table.row_values(num)
                if row:
                    if row[0] == name:
                        return row[1]
            return None
        except:
            Base.printErr("获取Excel中键值对信息失败!")
Example #13
0
 def __init__(self, file):
     #一个软件只有一个工作路径,所以当有可能从不同的入口执行时,需要获取当前的绝对路径,再去查找相对路径
     self.file = Base.get_cur_dir(
         __file__) + "\\" + file  #永远是基于excel.py所在路径
     self.targetName = self.file.replace(
         ".xlsx", (time.strftime("%Y-%m-%d-%H-%M-%S") + ".xlsx"))
     self.data = None
Example #14
0
    def log_in(self, username, password):
        if self.open_from_excel() == False:  #根据excel中的url打开浏览器
            return None
        sleep(1)  #等待1秒(可选)
        try:
            self.driver.find_element_by_id("account").send_keys(
                username)  #定位到用户名字段并输入用户名
            self.driver.find_element_by_id("password").send_keys(
                password)  #定位到密码字段并输入密码
            self.driver.find_element_by_id("submit").click()  #点击登录按钮
            sleep(1)
            return self.driver

        except:
            Base.printErr("ERR--log_in方法中登录然之操作失败.")
            return None
Example #15
0
def init_screenshot_dir():
    rootLogDir = Base.get_cur_dir(__file__)
    currentLogDirName = time.strftime('%Y-%m-%d-%H_%M_%S',
                                      time.localtime(time.time()))
    currentTimeStampLogDir = os.path.join(rootLogDir, currentLogDirName)
    os.mkdir(currentTimeStampLogDir)
    return currentTimeStampLogDir
Example #16
0
    def get_config_item(self, page, group, items):
        try:
            if not self.open_excel():
                return None
            table = self.data.sheet_by_name(page)
            nrows = table.nrows  #行数

            bFound = False
            for num in range(0, nrows):
                row = table.row_values(num)
                if row:
                    if row[0] == '[%s]' % group:
                        bFound = True
                        continue
                    elif row[0][0:1] == "[":
                        bFound = False

                    if bFound:
                        for key in items.keys():
                            if key == row[0]:
                                items[key] = row[1]
            return items
        except:
            Base.printErr("获取Excel中配置信息失败!")
Example #17
0
 def submit_success(self, pkg_info):
     try:
         pkg_name, pkg_version = self.click_check_link(pkg_info)
         self.driver.find_element_by_xpath("//button[text()='提交']").click()
         WebDriverWait(self.driver, 20, 0.5).until(
             lambda x: x.find_element_by_xpath("//div[text()='提交成功']"))
         sleep(3)
         # submit_rs = self.driver.find_element_by_xpath("//div[text()='提交成功']")
         # submit_txt = submit_rs.text
         # logger.info("submit_txt = '" + submit_txt + "'")
         logger.info("'" + pkg_name + "'审核通过!")
     except:
         logger.error(
             Base.printErr("pkg_name=" + pkg_name + " & " + pkg_version +
                           "  审核失败!"))
     self.screen_shot("审核通过")
Example #18
0
 def submit_faile(self, pkg_info):
     try:
         pkg_name, pkg_version = self.click_check_link(pkg_info)
         self.driver.find_element_by_id("combox_result_id").click()
         self.driver.find_element_by_xpath("//a[text()='不通过']").click()
         self.driver.find_element_by_id("combox_reason_id").click()
         self.driver.find_element_by_xpath(
             "//a[text()='应用无法正常运行或功能存在问题']").click()
         self.driver.find_element_by_id("remarks").send_keys("自动化测试")
         self.driver.find_element_by_xpath("//button[text()='提交']").click()
         WebDriverWait(self.driver, 20, 0.5).until(
             lambda x: x.find_element_by_xpath("//div[text()='提交成功']"))
         sleep(3)
         logger.error("‘" + pkg_name + "'审核不通过!")
     except:
         logger.error(
             Base.printErr("pkg_name=" + pkg_name + " & " + pkg_version +
                           "  审核失败!"))
     self.screen_shot("审核不通过")
Example #19
0
 def launch_app(self):
     try:
         self.d.screen_on()
         self.d.unlock()
         # self.d.app_start(AGILEAPP)
         # self.d(scrollable=True).scroll.to(text=self.app_name)
         # self.d(text=self.app_name).sibling(resourceId=AGILEAPP+":id/launch").click()
         cmd = "adb -s " + self.serial + " shell am start -a com.gionee.agileapp.action.LAUNCH -e EXTRA_APP " + self.app_name
         logger.info(cmd)
         cmd_str = Util.exccmd(cmd)
         logger.info(cmd_str)
         time.sleep(5)
         self.d(packageName=AGILEAPP, className=ANDROID_VIEW_VIEW).wait()
         logger.info("启动'" + self.app_name + "'成功")
     except:
         logger.error(Base.printErr("启动'" + self.app_name + "'失败!!!"))
     currentStamp = time.strftime('%Y-%m-%d-%H_%M_%S',
                                  time.localtime(time.time()))
     self.d.screenshot(self.currentTimeStampLogDir + os.sep + currentStamp +
                       ".jpg")
Example #20
0
    def syn_server(self, pkg_info):
        try:
            pkg_name = pkg_info[1]
            pkg_id = pkg_info[0]
            pkg_version = pkg_info[2]
            self.driver.find_element_by_name("_search[rpkPackage]").send_keys(
                pkg_name)
            Select(self.driver.find_element_by_id(
                "rpk_status")).select_by_visible_text("已上架")
            self.driver.find_element_by_id("veryfy2_sub").click()
            sleep(2)
            self.click_syn_link(pkg_id)
            for i in range(3):
                if self.syn_fail_again_syn(pkg_id):
                    break

            sleep(3)
            logger.info("'" + pkg_name + "'同步成功!")

        except:
            logger.error(
                Base.printErr("pkg_name=" + pkg_name + " & " + pkg_version +
                              "  同步失败!"))
        self.screen_shot("同步")
Example #21
0
from suite.product_suite import ProductSuite
from suite.contact_suite import ContactSuite

class RanzhiTestRunner():
    def run_tests(self):
        # 创建一个测试套件
        test_suite = unittest.TestSuite()
        # 在测试套件中添加需要运行的测试用例
        test_suite = LoginSuite(test_suite).add_tests()
        test_suite = ProductSuite(test_suite).add_tests()
        test_suite = ContactSuite(test_suite).add_tests()
        # 创建一个文本测试运行器,运行刚刚创建的测试套件
        #text_test_runner = unittest.TextTestRunner()
        #text_test_runner.run(test_suite)

        #用开源代码HtmlTestRunner运行测试套件并生成测试报告
        self.reportFile = "report\\test_result_%s.html"%time.strftime("%Y-%m-%d-%H-%M-%S")
        report = open(self.reportFile, "wb")    #用w方式打开文件,如果文件不存在则会默认创建

        html_test_runner = HtmlTestRunner(report,
                title="然之协同办公系统自动化测试结果",
                description="测试然之功能的详细自动化测试结果")

        html_test_runner.run(test_suite)
        report.close()

if __name__ == "__main__":
    test_runner = RanzhiTestRunner()
    test_runner.run_tests()
    Base.send_email("*****@*****.**", test_runner.reportFile)
Example #22
0
                    # 审核通过
                    rzLogin.submit_success(pkg_info)
                    rzLogin.close_browser()
                    # 同步
                    rzLogin = sucess_login(screenshot_dir)
                    print("开始同步")
                    print(pkg_info)
                    print(pkg_name)
                    rzLogin.syn_server(pkg_info)

                else:
                    rzLogin.submit_faile(pkg_info)
                rzLogin.close_browser()
            except:
                logger.error(
                    Base.printErr("pkg_name=" + pkg_name + " & " +
                                  pkg_version + "  测试失败!"))
        rzLogin = sucess_login(screenshot_dir)
        is_has_need_check_app = rzLogin.has_need_check_app()
        rzLogin.close_browser()
        if not is_has_need_check_app:
            break
        i += 1
    cmd = "adb -s " + serial + " shell date +%s"
    end_stamp = Util.exccmd(cmd)
    logger.info("end_stamp=" + end_stamp)
    dump_info = dump_crash_info(serial, int(start_stamp), int(end_stamp))
    filename = screenshot_dir + os.sep + 'crash_data.txt'
    with open(filename,
              'w') as f:  # 如果filename不存在会自动创建, 'w'表示写数据,写之前会清空文件中的原有数据!
        f.write(dump_info)
Example #23
0
# -*- coding: utf-8 -*-
import uiautomator2 as u2
from function.utils import Util
from function.base.base import Base
import os, time
import xml.etree.ElementTree as ET

AGILEAPP = "com.gionee.agileapp"
__author__ = 'suse'
device = "IZEAMF6LLJVSLNQC"
rootLogDir = Base.get_cur_dir(__file__)
currentLogDirName = time.strftime('%Y-%m-%d-%H_%M_%S',
                                  time.localtime(time.time()))
currentTimeStampLogDir = os.path.join(rootLogDir, currentLogDirName)
os.mkdir(currentTimeStampLogDir)
d = u2.connect_usb(device)
d.app_start(AGILEAPP)
d(scrollable=True).scroll.to(text="看了吗")
d(text="看了吗").sibling(resourceId="com.gionee.agileapp:id/launch").click()
d(packageName="com.gionee.agileapp", className="android.view.View").wait()
xml = d.dump_hierarchy()
# print(xml)
root = ET.fromstring(xml)
print(xml)
# nodes = root.findall(".//*[@package='com.gionee.agileapp']/node")
for node in root.findall(".//*[@package='com.gionee.agileapp']/node"):
    className = node.get("class")
    # childNode = node.find("..//*[@class='android.view.View']/node")
    if (className == "android.view.View"):
        d.app_start(AGILEAPP)
        d(scrollable=True).scroll.to(text="看了吗")
Example #24
0

class RanzhiTestRunner():
    def run_tests(self):
        # 创建一个测试套件
        test_suite = unittest.TestSuite()
        # 在测试套件中添加需要运行的测试用例
        test_suite = LoginSuite(test_suite).add_tests()
        test_suite = ProductSuite(test_suite).add_tests()
        test_suite = ContactSuite(test_suite).add_tests()
        # 创建一个文本测试运行器,运行刚刚创建的测试套件
        #text_test_runner = unittest.TextTestRunner()
        #text_test_runner.run(test_suite)

        #用开源代码HtmlTestRunner运行测试套件并生成测试报告
        self.reportFile = "report\\test_result_%s.html" % time.strftime(
            "%Y-%m-%d-%H-%M-%S")
        report = open(self.reportFile, "wb")  #用w方式打开文件,如果文件不存在则会默认创建
        html_test_runner = HtmlTestRunner(report,
                                          title="然之协同办公系统自动化测试结果",
                                          description="测试然之功能的详细自动化测试结果")

        html_test_runner.run(test_suite)
        report.close()


if __name__ == "__main__":
    test_runner = RanzhiTestRunner()
    test_runner.run_tests()
    Base.send_email("*****@*****.**", test_runner.reportFile)