示例#1
0
 def type(self):
     if self.device != "null":
         self.log = log(logname=self.device + "-" + self.system,
                        system=self.system)
     else:
         self.log = log(logname=self.browser + "-" + self.system,
                        system=self.system)
     if self.browser != "null":
         self.browser_type()
         self.open_browser()
     else:
         # 执行机信息
         capabilities = get_config_info(self.device,
                                        key=None,
                                        filename="devices_info.ini")
         # 应用信息
         app = get_config_info(self.system,
                               key=None,
                               filename="app_info.ini")
         capabilities['appPackage'] = app["appPackage"]
         capabilities['appActivity'] = app["appActivity"]
         from appium import webdriver
         self.driver = webdriver.Remote(
             get_config_info("appiumGrid",
                             key="host",
                             filename="config.ini"), capabilities)
 def test_1(self):
     # 实验多进程
     dict = get_config_info("exec", filename="/devices_info.ini")
     for k, v in dict.items():
         p = multiprocessing.Process(target=Test().t_01, args=(v, ))
         print("运行用例01,执行机:{},进程名称是:{}".format(v, p.name))
         p.start()
示例#3
0
 def open_browser(self):
     """
 打开URL设置窗口最大化并等待全部元素加载完成
     """
     self.driver.get(get_config_info(self.system, "URL"))
     self.driver.maximize_window()
     self.driver.implicitly_wait(self.timeout)
示例#4
0
def send_test_report(title, case_count):
    """
以附件方式把最新的测试报告发送给指定的人,发件人邮箱信息、接收人的邮箱信息、
测试报告的最大数量都可以在config/configInfo.ini文件中配置
    :param case_count: 系统的测试场景个数
    :param title: 邮件标题
    """
    # 控制报告的数量以及返回最新的测试报告
    report_path = path.TEST_REPORT
    lists = os.listdir(report_path)  # 返回list
    lists.sort(key=lambda a: os.path.getatime(report_path + '/' + a))  # 以时间排序
    file_path = os.path.join(report_path, lists[-1])  # 返回测试报告路径
    count = os.listdir(report_path)
    if len(count) > int(get_config_info("Report_quantity", "quantity")):
        count.sort()
        ph = report_path + "/" + count[0]
        os.remove(ph)

    # 读取配置文件中的接收者邮箱地址
    mail = []
    data = get_config_info("Acceptor")
    for i in data:
        mail.append(data[i])

    s_server = 'smtp.163.com'  # 定义邮箱服务
    user = get_config_info("Mail", "username")  # 读取配置文件的用户名
    password = get_config_info("Mail", "password")  # 读取配置文件的密码(授权密码)
    msg_total = MIMEMultipart()  # 定义类型
    # multipart类型主要有三种子类型:mixed、alternative、related  默认mixed
    msg_total['From'] = user  # 发送方邮箱
    msg_total['To'] = ','.join(mail)  # 接受者邮箱
    msg_total['Subject'] = title  # 邮件的标题
    # 正文模块
    # msg_raw = open(file_path, "r", encoding='utf-8').read()  # 打开要发送的测试报告
    msg_raw = email_temp(title, case_count, file_path)
    msg = MIMEText(msg_raw, 'html', "utf-8")
    msg_total.attach(msg)
    # 附件模块
    mfile = MIMEApplication(open(file_path, "rb").read())  # 读取测试报告内容
    mfile.add_header('Content-Disposition', 'attachment',
                     filename=file_path)  # 添加附件的头信息
    # 添加附件
    msg_total.attach(mfile)
    smtp = smtplib.SMTP_SSL(s_server, 465)
    smtp.login(user, password)
    smtp.sendmail(user, mail, msg_total.as_string())
    smtp.quit()
示例#5
0
def driver(section, appName, url="http://127.0.0.1:4444/wd/hub"):
    """
    :param appInfo: 配置文件中应用名
    :param callAddress: 调用地址
    :param section: 配置文件的节(执行机信息)
    :return:
    """
    #执行机信息
    capabilities = get_config_info(section,
                                   key=None,
                                   filename="/devices_info.ini")
    #应用信息
    app = get_config_info(appName, key=None, filename="/app_info.ini")
    capabilities['appPackage'] = app["appPackage"]
    capabilities['appActivity'] = app["appActivity"]

    driver = webdriver.Remote(url, capabilities)
    return driver
示例#6
0
 def browser_type(self):
     """
 根据参数“browser”判断要启动的执行机的类型后启动对应的执行机
     """
     if self.browser == "firefox":
         option = webdriver.FirefoxProfile()
         # 其中plugin.state.flash后的数值可以为0,1,2; 0:禁止,1:询问,2:允许。
         option.set_preference('plugin.state.flash', 2)
         self.host = get_config_info("seleniumGrid", "host")
         self.driver = webdriver.Remote(command_executor=self.host,
                                        desired_capabilities={
                                            'platform': 'ANY',
                                            'browserName': 'firefox',
                                            'version': "",
                                            'javascriptEnabled': True
                                        },
                                        browser_profile=option)
     elif self.browser == "ie":
         self.host = get_config_info("seleniumGrid", "host")
         self.driver = webdriver.Remote(command_executor=self.host,
                                        desired_capabilities={
                                            'platform': 'ANY',
                                            'browserName':
                                            'internet explorer',
                                            'version': "",
                                            'javascriptEnabled': True
                                        })
     elif self.browser == "chrome":
         self.host = get_config_info("seleniumGrid", "host")
         self.driver = webdriver.Remote(command_executor=self.host,
                                        desired_capabilities={
                                            'platform': 'ANY',
                                            'browserName': 'chrome',
                                            'version': "",
                                            'javascriptEnabled': True
                                        })
     else:
         pass
        for k, v in dict.items():
            p = multiprocessing.Process(target=Test().t_01, args=(v, ))
            print("运行用例01,执行机:{},进程名称是:{}".format(v, p.name))
            p.start()


if __name__ == '__main__':
    # 获取类中所有的方法(自定义方法)
    '''
    1、获取类中所有的方法
    2、多进程调用方法。调用方法时遍历执行设备列表实现多线程
    问题:会同事启动多个进程,导致appium混乱。
    解决思路:将一个用例下的所有进程加入到列表,启动下次循环时判断上一组进程是否全部结束。结束则运行下一个用例。否则等待进程结束
    '''
    # 获取类中所有的方法
    list = dir(Test)
    list1 = []
    for i in list:
        if "test_" in i:
            ii = list.index(i)
            list1.append(list[ii])

    # 遍历测试用例和执行设备列表。多线程执行
    dict = get_config_info("exec", filename="/devices_info.ini")
    for i in list1:
        cmd = "Test()" + "." + i
        for k, v in dict.items():
            p = multiprocessing.Process(target=eval(cmd), args=(v, ))
            print("运行用例02,执行机:{},进程名称是:{}".format(v, p.name))
            p.start()