Ejemplo n.º 1
0
    def base_compute_vcf(self,
                         para_id,
                         data_id,
                         cookies,
                         flag,
                         calType=1,
                         maxFile=0):
        """vcf协同计算  calType:1 随机查找vcf task ; 2 查找基因协同计算任务 3 GWAS 0 查找最大id+6666"""
        # 获取请求url
        url_compute_vcf = self.domain + Base.dh.get_path(para_id)
        Log.info('compute_vcf request url : {}'.format(url_compute_vcf))
        # 获取请求数据
        data_source = self.dh.get_data(data_id)
        req_para = Base.get_req_para(para_id=para_id, data_id=data_id)
        # 登录态判断
        if cookies is not None:
            # 不存在的fileid
            if maxFile:
                req_para['fileId'] = self.get_max_file_id()
            else:
                # file文件上传获取fileId
                req_para['fileId'] = self.gene_file_id(req_para['fileId'],
                                                       cookies)

        # id不存在
        if not calType:
            req_para['taskId'] = self.get_max_task_id()
        else:
            req_para['taskId'] = self.get_task_id(calType)

        data_source[0][5] = req_para['taskId']
        data_source[0][6] = req_para['fileId']
        Log.info('compute_vcf request data is {}'.format(req_para))
        # 请求
        res = requests.post(url=url_compute_vcf,
                            headers=Base.headers,
                            cookies=cookies,
                            data=Base.sign(req_para)).json()
        Log.info('compute_vcf response data is {}'.format(res))
        # 结果检查
        actual = self.vcf_check(res, flag)
        # 结果写入
        DataHandle.set_data(data_source[0], actual)
        self.dh.write_data(data_source)
        # 结果检查
        return self.dh.check_result(data_source)
Ejemplo n.º 2
0
    def base_gen_start(self, para_id, data_id, cookies, isChange=0, maxFile=0):
        """gen start gen计算发起. isChange:0读取请求数据,1 请求数据重复100遍"""
        # 获取请求url
        url_gen_start = self.domain + Base.dh.get_path(para_id)
        Log.info('gen_start request url : {}'.format(url_gen_start))
        # 获取请求数据
        data_source = self.dh.get_data(data_id)
        req_para = Base.get_req_para(para_id=para_id, data_id=data_id)
        # 登录态判断
        if cookies is not None:
            # 不存在的fileid
            if maxFile:
                req_para['fileList'] = self.get_max_file_id()
                data_source[0][5] = req_para['fileList']
            else:
                # fileList 字符串转列表
                req_para['fileList'] = eval(req_para['fileList'])
                # fileList 文件上传,获取文件id,如果文件列表为空,则跳过上传文件操作
                if len(req_para['fileList']) > 0:
                    req_para['fileList'] = self.gene_file_id_list(
                        req_para['fileList'], cookies)
                    data_source[0][5] = req_para['fileList']
                else:
                    pass
        # remark 内容
        if isChange:
            req_para['remark'] = req_para['remark'] * 100
            data_source[0][7] = req_para['remark']

        # top 数据转换
        req_para['top'] = eval(req_para['top'])
        req_para['isPrint'] = eval(req_para['isPrint'])
        Log.info('gen_start request data is {}'.format(req_para))
        # 请求
        res = requests.post(url=url_gen_start,
                            headers=Base.headers,
                            cookies=cookies,
                            data=Base.sign(req_para)).json()
        Log.info('gen_start response data is {}'.format(res))
        # 结果检查
        actual = self.gen_check(res)
        # 结果写入
        DataHandle.set_data(data_source[0], actual)
        self.dh.write_data(data_source)
        # 结果检查
        return self.dh.check_result(data_source)
Ejemplo n.º 3
0
 def base_logout(self, para_id, data_id, cookies=None):
     """退出登录公共方法"""
     Log.info('logout url is %s' % self.url)
     # 获取请求数据
     data_source = self.dh.get_data(data_id)
     req_para = Base.get_req_para(para_id=para_id, data_id=data_id)
     Log.info('request data is %s' % req_para)
     # 请求接口
     res = requests.post(url=self.url, headers=Base.headers, cookies=cookies,
                         data=Base.sign(req_para)).json()
     Log.info('logout response data is {}'.format(res))
     # 结果检查
     actual = self.check(res)
     # 结果写入
     DataHandle.set_data(data_source[0], actual)
     self.dh.write_data(data_source)
     # 结果检查
     return self.dh.check_result(data_source)
Ejemplo n.º 4
0
class Test_Homepage(unittest.TestCase):
    def setUp(self):
        self.drive = Drive(1)
        self.log = Log()
        self.url = "http://www.multilotto.com/en"
        self.readconfig = ElementsRead()

    def test_go_to_homepage(self):
        self.log.info("开始测试,进入首页")
        self.drive.open_browser(self.url)
        time.sleep(3)

        self.log.info("点击左上角图标,刷新首页")
        self.drive.find_element("首页图标").click()

    def tearDown(self):
        self.log.info("测试结束")
        time.sleep(10)
        self.drive.close_brwser()
Ejemplo n.º 5
0
 def new_check(res, flag):
     """response对象.json对象异常捕获判定文件下载是否成功"""
     try:
         json_res = res.json()
         if not flag:
             Log.error('请求返回有误:{}'.format(json_res))
             Log.info('test success')
             return flag
         else:
             Log.error('文件下载失败,请求异常{}'.format(json_res))
             return not flag
     except JSONDecodeError as je:
         Log.info('-content type-:{}'.format(type(res.content)))
         Log.debug('-contest:{}-'.format(res.content))
         Log.info('-contest is None :{}'.format(res.content is None))
         return flag
     except Exception as e:
         Log.error('未知异常:{}'.format(e))
         return not flag
Ejemplo n.º 6
0
 def gen_check(self, res):
     code = '00000'
     # taskId = res['data']
     # Log.debug('taskId is {}'.format(taskId))
     # [data_n, data_o] = self.get_data(taskId)
     # Log.info('本端数据为: {}'.format(data_n))
     # Log.info('对端数据为: {}'.format(data_o))
     if res['code'] == code:
         taskId = res['data']
         Log.debug('taskId is {}'.format(taskId))
         [data_n, data_o] = self.get_data(taskId)
         Log.info('本端数据为: {}'.format(data_n))
         Log.info('对端数据为: {}'.format(data_o))
         if self.compare(data_n, data_o):
             Log.info('compare result is True ,success !')
             return 1
         else:
             Log.error('compare result is False ,fail !')
             return 0
     Log.error('请求返回有误!{}'.format(res))
     return 0
Ejemplo n.º 7
0
    def base_query_update_flag(self, para_id, data_id, cookies, flag):
        """协同计算--数据更新"""
        # 获取请求url
        url_query_update_flag = self.domain + Base.dh.get_path(para_id)
        Log.info('query_update_flag request url : {}'.format(url_query_update_flag))
        # 获取请求数据
        data_source = self.dh.get_data(data_id)
        req_para = Base.get_req_para(para_id=para_id, data_id=data_id)

        Log.info('query_update_flag request data is {}'.format(req_para))
        # 请求
        res = requests.post(url=url_query_update_flag, headers=Base.headers, cookies=cookies,
                            data=Base.sign(req_para)).json()
        Log.info('query_update_flag response data is {}'.format(res))
        # 结果检查
        actual = self.query_check(res, flag)
        # 结果写入
        DataHandle.set_data(data_source[0], actual)
        self.dh.write_data(data_source)
        # 结果检查
        return self.dh.check_result(data_source)
Ejemplo n.º 8
0
class BaiduTests(unittest.TestCase):
    def setUp(self):
        self.log = Log("app demo test")
        self.base_url = 'http://localhost:4723/wd/hub'
        self.desired_caps = {}
        self.desired_caps['platformName'] = 'Android'
        self.desired_caps['platformVersion'] = '8'
        self.desired_caps['deviceName'] = 'fc323ca3'
        self.desired_caps['appPackage'] = 'com.giveu.corder'
        #self.desired_caps['appActivity'] = '.SplashActivity'
        self.desired_caps['appActivity'] = '.WelcomeActivity'
        #.me.activity.LoginActivity}
        #print(os.path.dirname(os.getcwd()))
        self.driver = webdriver.Remote(self.base_url, self.desired_caps)
        self.driver.implicitly_wait(15)


    def test_jyb_login_demo(self):
        """即有宝登录测试用例"""

        self.log.info("成功连接appium服务器")
        print(self.driver.current_activity())
        self.driver.find_element_by_id("com.giveu.corder:id/et_account").clear()
        self.driver.find_element_by_id("com.giveu.corder:id/et_account").send_keys("865258")
        self.driver.find_element_by_id("com.giveu.corder:id/et_pwd").clear()
        self.driver.find_element_by_id("com.giveu.corder:id/et_pwd").send_keys("123456")
        self.driver.find_element_by_id("tv_login").click()
        try:
            self.driver.find_element_by_id("top_tab_center_title").is_displayed()
        except:
            self.assertEquals(1, 2, u"登录没有成功!,请查找原因")
        finally:
            tt=self.driver.find_element_by_id("top_tab_center_title").text()
            tl = tt.strip()
            self.assertEquals(tl,u"新建订单",u"jyb登录成功")
        self.log.info("jyb登录成功")
        self.driver.quit()

    def tearDown(self):
        self.log.info("关闭并退出app。")
Ejemplo n.º 9
0
 def base_get_server(self, para_id, data_id, cookies):
     """协同计算--查询服务器公共方法"""
     # 获取请求url
     url_get_server = self.domain + Base.dh.get_path(para_id)
     Log.info('get_server request url : {}'.format(url_get_server))
     # 获取请求数据
     data_source = self.dh.get_data(data_id)
     req_para = Base.get_req_para(para_id=para_id, data_id=data_id)
     Log.info('get_server request data is {}'.format(req_para))
     # 请求
     res = requests.post(url=url_get_server,
                         headers=Base.headers,
                         cookies=cookies,
                         data=Base.sign(req_para)).json()
     Log.info('get_server response data is {}'.format(res))
     # 结果检查
     actual = self.get_server_check(res)
     # 结果写入
     DataHandle.set_data(data_source[0], actual)
     self.dh.write_data(data_source)
     # 结果检查
     return self.dh.check_result(data_source)
Ejemplo n.º 10
0
 def base_logic_get_list(self, para_id, data_id, cookies, flag):
     """逻辑管理-查询列表"""
     # 获取请求url
     url_logic_get_list = self.domain + Base.dh.get_path(para_id)
     Log.info('logic_get_list request url : {}'.format(url_logic_get_list))
     # 获取请求数据
     data_source = self.dh.get_data(data_id)
     req_para = Base.get_req_para(para_id=para_id, data_id=data_id)
     Log.info('logic_get_list request data is {}'.format(req_para))
     # 请求
     res = requests.post(url=url_logic_get_list,
                         headers=Base.headers,
                         cookies=cookies,
                         data=Base.sign(req_para)).json()
     Log.info('logic_get_list response data is {}'.format(res))
     # 结果检查
     actual = self.get_logic_check(res, flag)
     # 结果写入
     DataHandle.set_data(data_source[0], actual)
     self.dh.write_data(data_source)
     # 结果检查
     return self.dh.check_result(data_source)
Ejemplo n.º 11
0
    def base_cancel_task(self, para_id, data_id, cookies, flag, task_modify=0, reason_modify=0):
        """协同计算--取消任务"""
        # 获取请求url
        url_vcf_start = self.domain + Base.dh.get_path(para_id)
        Log.info('cancel_task request url : {}'.format(url_vcf_start))
        # 获取请求数据
        data_source = self.dh.get_data(data_id)
        req_para = Base.get_req_para(para_id=para_id, data_id=data_id)

        req_para['type'] = eval(req_para['type'])

        # 不存在的taskId
        if task_modify:
            temp = {'taskId': None, 'startTaskId': None}
            req_para['taskId'] = self.get_max_task_id(req_para['type'])
        else:
            # 获取请求参数,temp存储id,startTaskId组成的字典
            temp = self.get_task_id(req_para['type'])
            req_para['taskId'] = temp['id']

        # reason 内容
        if reason_modify:
            req_para['reason'] = req_para['reason'] * 100

        data_source[0][5] = req_para['taskId']
        data_source[0][7] = req_para['reason']
        Log.info('cancel_task request data is {}'.format(req_para))
        # 请求
        res = requests.post(url=url_vcf_start, headers=Base.headers, cookies=cookies,
                            data=Base.sign(req_para)).json()
        Log.info('cancel_task response data is {}'.format(res))
        # 结果检查
        actual = self.cancel_check(res, temp, flag)
        # 结果写入
        DataHandle.set_data(data_source[0], actual)
        self.dh.write_data(data_source)
        # 结果检查
        return self.dh.check_result(data_source)
Ejemplo n.º 12
0
 def base_get_list_by_condition(self, para_id, data_id, cookies):
     """获取用户列表"""
     # 获取请求url
     url_get_list_by_condition = self.domain + Base.dh.get_path(para_id)
     Log.info('get_list_by_condition request url : {}'.format(
         url_get_list_by_condition))
     # 获取请求数据
     data_source = self.dh.get_data(data_id)
     req_para = Base.get_req_para(para_id=para_id, data_id=data_id)
     Log.info('get_list_by_condition request data is {}'.format(req_para))
     # 请求
     res = requests.post(url=url_get_list_by_condition,
                         headers=Base.headers,
                         cookies=cookies,
                         data=Base.sign(req_para)).json()
     Log.info('get_list_by_condition response data is {}'.format(res))
     # 结果检查
     actual = self.check(res)
     # 结果写入
     DataHandle.set_data(data_source[0], actual)
     self.dh.write_data(data_source)
     # 结果检查
     return self.dh.check_result(data_source)
Ejemplo n.º 13
0
    def cancel_check(self, res, temp, flag):
        code = '00000'
        if flag and res['code'] != code:
            raise AssertionError('请求返回应该为成功,实际失败 {}'.format(res))
        if not flag and res['code'] == code:
            raise AssertionError('异常用例请求返回应该为失败,实际成功 {}'.format(res))
        if not res['code'] == code:
            Log.error('请求返回有误!{}'.format(res))
            return 0
        else:
            if temp['startTaskId'] is None:
                status = 4
                id = temp['id']
                sql_n = 'select * from t_task_history where id = %d ' % id
                sql_o = 'select * from t_task_history where startTaskId = %d ' % id
            else:
                status = 5
                id = temp['startTaskId']
                sql_n = 'select * from t_task_history where startTaskId = %d ' % id
                sql_o = 'select * from t_task_history where id = %d ' % id
            Log.debug('本端查询sql:{}'.format(sql_n))
            Log.debug('对端查询sql:{}'.format(sql_o))
            data_n = self.con_n.select_dic_single(sql=sql_n)
            Log.info('本端数据为: {}'.format(data_n))
            time.sleep(10)
            try:
                data_o = self.con_o.select_dic_single(sql=sql_o)
            except IndexError as e:
                raise AssertionError('数据库查询为空,exception is:{}'.format(e))
            Log.info('对端数据为: {}'.format(data_o))

            if self.compare(data_n, data_o, status):
                Log.info('compare result is True ,success !')
                return 1
            else:
                Log.error('compare result is False ,fail !')
                return 0
Ejemplo n.º 14
0
 def base_get_Recessive_cal_result(self, para_id, data_id, cookies, flag):
     """历史记录-查询GWAS-隐性计算结果公共方法"""
     # 获取请求url
     url_get_Recessive_cal_result = self.domain + Base.dh.get_path(para_id)
     Log.info('get_Recessive_maf_result request url : {}'.format(
         url_get_Recessive_cal_result))
     # 获取请求数据
     data_source = self.dh.get_data(data_id)
     req_para = Base.get_req_para(para_id=para_id, data_id=data_id)
     # 查询数据库taskId,随机选择查询
     req_para['taskId'] = self.get_Recessive_done_task_id()
     req_para['pageNo'] = eval(req_para['pageNo'])
     req_para['pageSize'] = eval(req_para['pageSize'])
     data_source[0][5] = req_para['taskId']
     # 数据库查询taskId为空处理
     if req_para['taskId'] is None:
         actual = not flag
         Log.error('数据库查询taskId为空,该用例未执行,失败')
     else:
         Log.info(
             'get_Recessive_cal_result request data is {}'.format(req_para))
         # 请求
         res = requests.post(url=url_get_Recessive_cal_result,
                             headers=Base.headers,
                             cookies=cookies,
                             data=Base.sign(req_para)).json()
         Log.info(
             'get_Recessive_cal_result response data is {}'.format(res))
         # 结果检查
         actual = self.get_Recessive_result_check(req_para['taskId'], res,
                                                  flag)
     # 结果写入
     DataHandle.set_data(data_source[0], actual)
     self.dh.write_data(data_source)
     # 结果检查
     return self.dh.check_result(data_source)
Ejemplo n.º 15
0
def sendemail(subject="subject",
              context="context",
              image=None,
              mail_file=None):
    """
	自动发送邮件
	:param subject:邮件主题
	:param context: 邮件正文
	:param image: 邮件图片
	:param mail_file: 邮件附件
	:return:
	"""
    __config = Config().email()
    # 获取配置信息
    smtp_server = __config["smtp_server"]
    user = __config["user"]
    password = __config["password"]
    sender = __config["sender"]
    receiver = __config["receiver"]
    receiver_list = []
    temp = receiver.split(",")
    for t in temp:
        if len(t.strip()) > 0:
            receiver_list.append(t.strip())
    __log = Log().log()
    msg = MIMEMultipart('related')
    # 主题.收发人信息
    msg['Subject'] = Header(subject, 'utf-8')
    msg['From'] = sender
    msg['To'] = receiver

    # 正文
    msg.attach(MIMEText(context, 'plain', 'utf-8'))

    # 添加图片
    if image is not None:
        msgAlternative = MIMEMultipart('alternative')
        msg.attach(msgAlternative)

        mail_msg = '<img src="cid:image1"><br>'
        msgAlternative.attach(MIMEText(mail_msg, 'html', 'utf-8'))

        # 指定图片为当前目录
        with open(image, 'rb') as ff:
            msgimage = MIMEImage(ff.read())

        # 定义图片 ID,在 HTML 文本中引用
        msgimage.add_header('Content-ID', '<image1>')
        msg.attach(msgimage)

    # 附件
    if mail_file is not None and os.path.exists(mail_file):
        with open(mail_file, 'rb') as f:
            msg_file = MIMEText(f.read(), 'base64', 'utf-8')
            msg_file['Content-Type'] = 'application/octet-stream'
            msg_file[
                'Content-Disposition'] = 'attachment; filename=test_report.html'
            msg.attach(msg_file)

    try:
        # 发送
        __log.info("sending email...")
        smtp = smtplib.SMTP_SSL(smtp_server, 465)
        # 1.连接邮件服务器
        # smtp.connect()
        # 2.登录
        smtp.login(user, password)
        # 3.发送邮件
        __log.debug(receiver_list)
        smtp.sendmail(sender, receiver_list, msg.as_string())
        # 4.退出
        smtp.quit()
        __log.info("send email sessful")
    except Exception as e:
        __log.error(e)
Ejemplo n.º 16
0
 def tearDownClass(cls):
     Log.info('TestCancelTaskBB END BB端')
Ejemplo n.º 17
0
 def tearDownClass(cls):
     Log.info('TestGetListByAcceptHK END HK端')
Ejemplo n.º 18
0
 def tearDownClass(cls):
     Log.info('TestGetGenResultHK END HK端')
Ejemplo n.º 19
0
 def tearDownClass(cls):
     Log.info('TestGetListBB END BB端')
Ejemplo n.º 20
0
 def tearDownClass(cls):
     Log.info('TestUserLogin END BB端')
Ejemplo n.º 21
0
    def test_cases(self, case):
        global test_result, cookie, before_amount
        url = case['Url']
        method = case['Method']
        param = case['Param']  # 如Param参数中,有id这个key
        if param.get('id'):
            param['id'] = getattr(GetData, 'loan_id')  # 把loan_id替换成id的value
        if param.get('mobilephone'):  # 把参数中的mobilephone参数化
            param['mobilephone'] = getattr(GetData, 'mobilephone')
        if param.get('pwd'):  # 把参数中的pwd参数化
            param['pwd'] = getattr(GetData, 'pwd')
        if param.get('memberId'):  # 把参数中的mobilephone参数化
            param['memberId'] = getattr(GetData, 'memberId')

        case_id = case['CaseId']
        module = case['Module']
        sql = case['Sql']
        if sql is not None:  # 把sql中的mobilephone参数化
            if sql.get('sql'):
                if sql['sql'].find('mobilephone') != -1:
                    sql['sql'] = sql['sql'].replace(
                        'mobilephone', str(getattr(GetData, 'mobilephone')))
        expected_result = case['ExpectedResult']
        if expected_result.get('data'):  #参数化excepect_result中的电话号码
            if expected_result['data'].get('mobilephone'):
                expected_result['data']['mobilephone'] = str(
                    getattr(GetData,
                            'mobilephone'))  #expect_result中mobilephone为str

        Log.info('--用例参数为{}'.format(case))
        if module == 'recharge' and case_id == 2 or module == 'add_loan' and case_id == 3:  # 查询投资和充值前的金额
            before_amount = DoMsq().my_sql(sql['sql'], 1)
        actual_result = HttpRequest().http_request(url, method, param,
                                                   cookie)  # 返回 resp
        Log.info('--返回结果为:{}'.format(actual_result.json()))
        if actual_result.cookies:
            cookie = actual_result.cookies
        Log.info('---第{}条{}模块用例,返回结果{}---'.format(case_id, module,
                                                  actual_result.text))
        # a=sql['sql']
        try:
            if module == 'add_loan' and case_id == 2:  # 取出加标后的loan_id
                loan_id = DoMsq().my_sql(sql['sql'], 1)
                setattr(GetData, 'loan_id', loan_id[0])

            if module == 'recharge' and case_id == 2:  # 查询充值后的金额
                after_charge = DoMsq().my_sql(
                    sql['sql'], 1)  # sql是返回一个元组,元组中元素什么类型取决于数据库字段类型
                setattr(GetData, 'after_charge',
                        after_charge[0])  # 赋值给after_charge是数字类型
                expected_result['data']['leaveamount'] = str(
                    getattr(GetData, 'after_charge'))
                recharge_amount = getattr(GetData, 'after_charge') - int(
                    before_amount[0])  # 充值金额=充值后的金额-充值前的金额
                self.assertEqual(recharge_amount,
                                 int(param['amount']))  # 判断数据库中充值后的金额是否正确

            if module == 'add_loan' and case_id == 3:  # 查询投资后的金额
                after_invest = DoMsq().my_sql(
                    sql['sql'], 1)  # sql是返回一个元组,元组中元素什么类型取决于数据库字段类型
                setattr(GetData, 'after_invest', after_invest[0])
                invest_amount = before_amount[0] - getattr(
                    GetData, 'after_invest')  # 投资金额=投资前的金额-投资后的金额
                self.assertEqual(invest_amount,
                                 int(param['amount']))  # 判断数据库中投资后的金额是否正确

            self.assertEqual(expected_result, actual_result.json())
            test_result = 'Pass'
        except Exception as e:
            test_result = 'Fail'
            Log().error(traceback.format_exc())
            raise e
        finally:
            Log.info('开始写回测试结果{}'.format(actual_result.json()))
            if module == 'recharge':
                DoExcel(project_path.test_cases_path).write_excel(
                    'recharge', case_id + 1, 9, actual_result.text)
                DoExcel(project_path.test_cases_path).write_excel(
                    'recharge', case_id + 1, 10, test_result)
            elif module in ('register', 'login'):
                DoExcel(project_path.test_cases_path).write_excel(
                    'Sheet1', case_id + 1, 8, actual_result.text)
                DoExcel(project_path.test_cases_path).write_excel(
                    'Sheet1', case_id + 1, 9, test_result)
            elif module == 'withdraw':
                DoExcel(project_path.test_cases_path).write_excel(
                    'withdraw', case_id + 1, 9, actual_result.text)
                DoExcel(project_path.test_cases_path).write_excel(
                    'withdraw', case_id + 1, 10, test_result)
            elif module == 'add_loan':
                DoExcel(project_path.test_cases_path).write_excel(
                    'add_loan', case_id + 1, 9, actual_result.text)
                DoExcel(project_path.test_cases_path).write_excel(
                    'add_loan', case_id + 1, 10, test_result)
            elif module in ('audit', 'invest'):
                DoExcel(project_path.test_cases_path).write_excel(
                    'audit', case_id + 1, 9, actual_result.text)
                DoExcel(project_path.test_cases_path).write_excel(
                    'audit', case_id + 1, 10, test_result)
Ejemplo n.º 22
0
 def tearDownClass(cls):
     Log.info('TestGetDetailByAcceptHK END HK端')
Ejemplo n.º 23
0
 def tearDownClass(cls):
     Log.info('TestQueryUpdateFlagBB END BB端')
Ejemplo n.º 24
0
class BasePage(object):
    original_window = None

    def __init__(self, driver):
        """
            :param driver:打开浏览器驱动
            :param base_url:输入测试url
            :param pagetitle:输入页面title
        """
        self.driver = driver
        self.logger = Log()

    def browser(self, browser="Chrome"):
        """
            打开浏览器函数,Firefox,chrome,IE
            默认Chrome浏览器
        """
        try:
            if browser == "Chrome" or browser == "chrome":
                options = webdriver.ChromeOptions()
                prefs = {
                    'profile.default_content_settings.popups': 0,
                    'download.default_directory': globalparam.download_path
                }
                options.add_experimental_option('prefs', prefs)
                # cap=webdriver.DesiredCapabilities.CHROME()
                # cap..setglobalparam.download_path
                driver = webdriver.Chrome(
                    chrome_options=options,
                    executable_path=globalparam.driver_path)
                return driver
            elif browser == "Firefox" or browser == "firefox":
                driver = webdriver.Firefox(
                    executable_path=globalparam.driver_path)
                return driver
            elif browser == "IE" or browser == "ie":
                driver = webdriver.Ie(executable_path=globalparam.driver_path)
                return driver
            else:
                logger.error("找不到驱动")
        except Exception as msg:
            logger.error("%s" % msg)

    def getElement(self, *param, timeout=10):
        '''
            根据传入的查找类型查找元素
            :param param[0]:     查找元素的方式
            :param param[1]:     元素值
            :timeout:            超时时间设置
            :return:             查找到的元素
        '''
        if param[0] == "id":
            try:
                element = WebDriverWait(self.driver, timeout).until(
                    EC.presence_of_element_located((By.ID, param[1])))
                return element
            except:
                self.logger.error("查找 %s 元素超时,类型为 %s!!" % (param[1], param[0]))
        elif param[0] == "class":
            try:
                element = WebDriverWait(self.driver, timeout).until(
                    EC.presence_of_element_located((By.CLASS_NAME, param[1])))
                return element
            except:
                self.logger.error("查找 %s 元素超时,类型为 %s!!" % (param[1], param[0]))
        elif param[0] == "name":
            try:
                element = WebDriverWait(self.driver, timeout).until(
                    EC.presence_of_element_located((By.NAME, param[1])))
                return element
            except:
                self.logger.error("查找 %s 元素超时,类型为 %s!!" % (param[1], param[0]))
        elif param[0] == "css":
            try:
                element = WebDriverWait(self.driver, timeout).until(
                    EC.presence_of_element_located(
                        (By.CSS_SELECTOR, param[1])))
                return element
            except:
                self.logger.error("查找 %s 元素超时,类型为 %s!!" % (param[1], param[0]))
        elif param[0] == "linktext":
            try:
                element = WebDriverWait(self.driver, timeout).until(
                    EC.presence_of_element_located((By.LINK_TEXT, param[1])))
                return element
            except:
                self.logger.error("查找 %s 元素超时,类型为 %s!!" % (param[1], param[0]))
        elif param[0] == "partcialtext":
            try:
                element = WebDriverWait(self.driver, timeout).until(
                    EC.presence_of_element_located(
                        (By.PARTIAL_LINK_TEXT, param[1])))
                return element
            except:
                self.logger.error("查找 %s 元素超时,类型为 %s!!" % (param[1], param[0]))
        elif param[0] == "tag":
            try:
                element = WebDriverWait(self.driver, timeout).until(
                    EC.presence_of_element_located((By.TAG_NAME, param[1])))
                return element
            except:
                self.logger.error("查找 %s 元素超时,类型为 %s!!" % (param[1], param[0]))
        elif param[0] == 'xpath':
            try:
                element = WebDriverWait(self.driver, timeout).until(
                    EC.presence_of_element_located((By.XPATH, param[1])))
                return element
            except:
                self.logger.error("查找 %s 元素超时,类型为 %s!!" % (param[1], param[1]))
        elif param[0] == 'js' or param[0] == "jquery":
            return self.ExcuteJs(param[1])
        else:
            self.logger.error("请输入适合的查找元素方式。。。")

    def clear_text(self, *param):
        '''
            输入文本框清空操作
            :param param[0]:     查找元素的方式
            :param param[1]:     元素值
        '''
        element = BasePage.getElement(self, param[0], param[1])
        try:
            element.clear()
            self.logger.info('清空文本框内容')
        except NameError as ne:
            self.logger.error("清空文本框内容失败: %s" % ne)
            self.get_screent_img()

    def click_element(self, *param):
        """
            点击某个元素
            :param param[0]:     查找元素的方式
            :param param[1]:     元素值
        """

        try:
            element = BasePage.getElement(self, param[0], param[1])
            element.click()
            self.logger.info('成功点击元素 %s: %s...' % (param[0], param[1]))
            time.sleep(2)
        except:
            self.logger.error("无法点击元素 %s: %s..." % (param[0], param[1]))
            raise

    def get_text(self, *param):
        '''
            获取文本
            :param param[0]:     查找元素的方式
            :param param[1]:     元素值
        '''
        element = BasePage.getElement(self, param[0], param[1])
        return element.text

    def send_key(self, *param):
        """
            文本框输入内容
            :param param[0]:     查找元素的方式
            :param param[1]:     元素值
            :param param[3]:     输入文本的内容

        """

        BasePage.getElement(self, param[0], param[1]).clear()
        self.logger.info('清空%s:%s文本框内容' % (param[0], param[1]))
        time.sleep(1)
        self.logger.info('在 %s:%s在输入内容 %s' % (param[0], param[1], param[2]))
        try:
            BasePage.getElement(self, param[0], param[1]).send_keys(param[2])
            time.sleep(2)
        except Exception as e:
            self.logger.error("在 %s:%s 中输入内容 %s 失败! " %
                              (param[0], param[1], param[2]))

    def move_to_element(self, *param):
        '''
            鼠标悬停操作
            :param param[0]:     查找元素的方式
            :param param[1]:     元素值
            Usage:
            element = ("id","xxx")
            driver.move_to_element(element)
        '''
        element = BasePage.getElement(self, param[0], param[1])
        ActionChains(self.driver).move_to_element(element).perform()

    def close(self):
        """
            关闭浏览器
        """
        try:
            self.driver.close()
            self.logger.info('关闭浏览器窗口')
        except NameError as ne:
            self.logger.error("关闭浏览器窗口失败 %s" % ne)

    def quit(self):
        """
            退出浏览器
        """
        self.driver.quit()

    def browser_back(self):
        """
            浏览器后退
        """
        self.driver.back()

    def browser_forward(self):
        """
            浏览器前进
        """
        self.driver.forward(self)

    def open_url(self, url):
        """
            打开站点
        """
        self.driver.get(url)

    def get_page_title(self):
        '''当前页面title'''
        self.logger.info("当前页面的title为: %s" % self.driver.title)
        return self.driver.title

    def get_screent_img(self):
        '''将页面截图下来'''
        file_path = os.path.dirname(
            os.path.abspath('.')) + globalparam.img_path
        now = time.strftime("%Y-%m-%d_%H_%M_%S_")
        screen_name = file_path + now + '.png'
        try:
            self.driver.get_screenshot_as_file(screen_name)
            logger.info("页面已截图,截图的路径在项目: %s下" % globalparam.img_path)
        except NameError as ne:
            logger.error("失败截图 %s" % ne)
            self.get_screent_img()
Ejemplo n.º 25
0
 def tearDownClass(cls):
     Log.info('TestComputeGenHK END HK端')
Ejemplo n.º 26
0
 def tearDownClass(cls):
     Log.info('TestUpLoadFileHK END HK端')
Ejemplo n.º 27
0
 def tearDownClass(cls):
     Log.info('TestVCFStartHK END HK端')
Ejemplo n.º 28
0
 def tearDownClass(cls):
     Log.info('TestUpLoadFileBB END BB端')
Ejemplo n.º 29
0
class LogEventListener(AbstractEventListener):
    def __init__(self):
        self.log = Log()

    def before_navigate_to(self, url, driver):
        self.log.info('\033[0;32m 前往新页面前URL:%s' % urllib.parse.unquote(driver.current_url, encoding="utf-8"))

    def after_navigate_to(self, url, driver):
        self.log.info('\033[0;32m 前往新页面后URL:%s' % urllib.parse.unquote(driver.current_url, encoding="utf-8"))

    def before_navigate_back(self, driver):
        pass

    def after_navigate_back(self, driver):
        pass

    def before_navigate_forward(self, driver):
        pass

    def after_navigate_forward(self, driver):
        pass

    def before_find(self, by, value, driver):
        time.sleep(5)
        # self.log.info('\033[0;32m before_find:{by:%s},{value:%s},{url:%s}' % (by, value, urllib.parse.unquote(driver.current_url, encoding="utf-8")))

    def after_find(self, by, value, driver):
        time.sleep(5)
        # self.log.info('\033[0;32m before_find:{by:%s},{value:%s},{url:%s}' % (by, value, urllib.parse.unquote(driver.current_url, encoding="utf-8")))

    def before_click(self, element, driver):
        self.log.info('\033[0;32m 点击元素文本:%s,跳转前页面:%s' % (
            element.text, urllib.parse.unquote(driver.current_url, encoding="utf-8")))

    def after_click(self, element, driver):
        time.sleep(5)
        self.log.info('\033[0;32m 跳转后页面:%s' % urllib.parse.unquote(driver.current_url, encoding="utf-8"))

    def before_change_value_of(self, element, driver):
        self.log.info('\033[0;32m 改变前元素文本:%s' % element.text)

    def after_change_value_of(self, element, driver):
        time.sleep(1)
        self.log.info('\033[0;32m 改变后元素文本:%s' % element.text)

    def before_execute_script(self, script, driver):
        pass

    def after_execute_script(self, script, driver):
        pass

    def before_close(self, driver):
        pass

    def after_close(self, driver):
        pass

    def before_quit(self, driver):
        pass

    def after_quit(self, driver):
        pass

    def on_exception(self, exception, driver):
        pass
            print(str(ex))
            log.info(str(ex))

        finally:
            print("*********TEST END*********")
            log.info("*********TEST END*********")
            fp.close()

        log.info("发送邮件开始")
        Email.send_email(REPORTER_PATH)
        log.info("发送邮件成功")


# pythoncom.CoInitialize()
# scheduler = BlockingScheduler()
# scheduler.add_job(AllTest().run, 'cron', day_of_week='1-5', hour=14, minute=59)
# scheduler.start()

if __name__ == '__main__':
    start_time = time.time()
    suit = AllTest().set_case_suite()
    AllTest().run(suit)
    end_time = time.time()
    log.info('总时长=%.4f' % (end_time - start_time))
    # tests = AllTest()
    # tests.run()
'''
1、生成的测试报告有问题
2、时间没有减少太多
'''