Beispiel #1
0
    def test_loans(self, cas):
        cas['url'] = replace_data(cas['url'])
        url = conf.get('env', 'url') + cas['url']
        headers = eval(conf.get('env', 'headers'))
        headers["Authorization"] = getattr(EnvData, "token")
        method = cas['method']
        expected = eval(cas['expected'])
        row = cas['case_id'] + 1

        respones = request(url=url, method=method, headers=headers)
        res = respones.json()

        try:
            self.assertEqual(expected['code'], res['code'])
            self.assertEqual(expected['msg'], res['msg'])
        except AssertionError as e:
            log.error('用例--{}--未通过'.format(cas['title']))
            log.debug('预期结果{}'.format(expected))
            log.debug('实际结果{}:'.format(res))
            log.exception(e)
            self.execl.write(row=row, column=8, value='不通过')

            raise e
        else:
            log.info('用例--{}--通过'.format(cas['title']))
            self.execl.write(row=row, column=8, value='通过')
Beispiel #2
0
 def wait_element_visibility(self,
                             locator,
                             img_info,
                             timeout=15,
                             poll_frequency=0.5):
     """
     等待元素可见
     :param locator: 定位表达式
     :param img_info:  错误截图文件名
     :param timeout: 等待超时时间
     :param poll_frequency: 等待轮询时间
     :return:
     """
     start_time = time.time()
     try:
         ele = WebDriverWait(self.driver, timeout, poll_frequency).until(
             EC.visibility_of_element_located(locator))
     except Exception as e:
         # 输出日志
         log.error("元素--{}--等待可见超时".format(locator))
         log.exception(e)
         self.save_scree_image(img_info)
         raise e
     else:
         # 元素等待出现以后,获取实际
         end_time = time.time()
         log.info("元素--{}--等待成功,等待时间{}秒".format(locator,
                                                end_time - start_time))
         return ele
Beispiel #3
0
 def wait_element_clickable(self,
                            locator,
                            img_info,
                            timeout=15,
                            poll_frequency=0.5):
     """
     等待元素可点击
     :param locator: 定位表达式
     :param img_info: 错误截图文件名
     :param timeout: 等待超时时间
     :param poll_frequency: 等待轮询时间
     :return:
     """
     # 等待元素之前获取当前的时间
     start_time = time.time()
     try:
         ele = WebDriverWait(self.driver, timeout, poll_frequency).until(
             EC.element_to_be_clickable(locator))
     except Exception as e:
         # 输出日志
         log.error("元素--{}--等待可点击超时".format(locator))
         log.exception(e)
         # 对当前页面进行截图
         self.save_scree_image(img_info)
         raise e
     else:
         # 元素等待出现之后,获取实际
         end_time = time.time()
         log.info("元素--{}--可点击等待成功,等待时间{}秒".format(locator,
                                                   end_time - start_time))
         return ele
Beispiel #4
0
 def save_scree_imge(self, img_info):
     '''保存截图'''
     start_time = time.time()
     filename = '{}__{}__操作.png'.format(start_time, img_info)
     file_path = os.path.join(ERROR_IMG, filename)
     self.driver.save_screenshot(file_path)
     log.info('错误页面截图成功,图表保存路径:{}'.format(file_path))
 def save_error_image(self, img_info):
     # img_info 错误截图信息
     record_time = time.time()  # 记录时间
     img_name = F'{img_info}_{record_time}.png'  # 拼接图片名 主要包含用例执行信息,执行时间
     file_path = os.path.join(ERROR_IMG, img_name)  # 拼接组成文件路径
     self.driver.save_screenshot(file_path)  # 调用方法进行保存
     log.info(F"错误页面截屏成功,保存路径为{file_path}")
Beispiel #6
0
 def wait_element_visibility(self,
                             locator,
                             img_info,
                             timeout=20,
                             poll_frequency=0.5):
     '''等待元素可见'''
     # 等待元素之前获取当前时间
     start_time = time.time()
     try:
         ele_visibility = WebDriverWait(
             self.driver, timeout, poll_frequency).until(
                 EC.visibility_of_element_located(locator))
     except Exception as e:
         # 输出日志
         log.error('元素--{}--等待可见超时'.format(locator))
         log.exception(e)
         # 对当前页面进行截图
         self.save_scree_imge(img_info)
         raise e
     else:
         # 元素等待出现之后获取实际时间
         end_time = time.time()
         log.info('元素--{}--等待成功,耗时:{}秒'.format(locator,
                                               end_time - start_time))
         return ele_visibility
Beispiel #7
0
    def test_audit(self, cas):

        url = conf.get('env', 'url') + cas['url']
        method = cas['method']
        data = eval(replace_data(cas['data']))
        headers = eval(conf.get('env', 'headers'))
        headers['Authorization'] = getattr(EnvData, 'admin_token')
        expected = eval(cas['expected'])
        row = cas['case_id'] + 1

        respones1 = request(url=url, method=method, json=data, headers=headers)
        res1 = respones1.json()

        if cas['title'] == '审核通过' and res1['msg'] == 'OK':
            setattr(EnvData, 'pass_loan_id', str(data['loan_id']))
        print('预期结果:', expected)
        print('实际结果:', res1)

        try:
            self.assertEqual(expected['code'], res1['code'])
            self.assertEqual(expected['msg'], res1['msg'])
            #判断审核状态是否符合预期的结果
            if cas['check_sql']:
                sql = replace_data(cas['check_sql'])
                status = self.bb.find_one(sql)['status']
                self.assertEqual(expected['status'], status)
        except AssertionError as e:
            log.error('这条用例{}没有通过'.format(cas['title']))
            log.exception(e)
            self.exce.write(row=row, column=8, value='不通过')
            raise e
        else:
            log.info('这条用例{}执行通过'.format(cas['title']))
            self.exce.write(row=row, column=8, value='通过')
Beispiel #8
0
    def test_update(self, cas):

        url = conf.get('env', 'url') + cas['url']
        method = cas['method']
        cas['data'] = replace_data(cas['data'])
        data = eval(cas['data'])
        headers = eval(conf.get('env', 'headers'))
        headers['Authorization'] = getattr(EnvData, 'token')
        expected = eval(cas['expected'])
        row = cas['case_id'] + 1

        respones = request(url=url, method=method, json=data, headers=headers)
        res = respones.json()

        try:
            self.assertEqual(expected['code'], res['code'])
            self.assertEqual(expected['msg'], res['msg'])
            #判断数据库中是否更新昵称
            if cas['check_sql']:
                sql = replace_data(cas['check_sql'])
                s = self.bb.find_one(sql)['reg_name']
                self.assertEqual(data['reg_name'], s)

        except AssertionError as e:
            log.error('该用例{}报错'.format(cas['title']))
            log.exception(e)
            self.exce.write(row=row, column=8, value='不通过')
            raise e
        else:
            log.info('该用例{}通过'.format(cas['title']))
            self.exce.write(row=row, column=8, value='通过')
Beispiel #9
0
    def test_register(self, cas):
        url = cas['url']
        method = cas['method']

        if '#phone#' in cas['data']:
            phon = self.phone_replace()
            setattr(EnvData, 'mobile_phone', phon)
            cas['data'] = replace_data(cas['data'])

        data = eval(cas['data'])
        headers = eval(conf.get('env', 'headers'))
        expected = eval(cas['expected'])
        row = cas['case_id'] + 1

        respones = request(url=url, method=method, json=data, headers=headers)
        res = respones.json()

        try:
            self.assertEqual(expected['code'], res['code'])
            self.assertEqual(expected['msg'], res['msg'])
            if cas['check_sql']:
                sql = replace_data(cas['check_sql'])
                f = self.my.find_count(sql)
                self.assertEqual(1, f)
        except AssertionError as e:
            log.error('这条用例{}报错'.format(cas['title']))
            log.exception(e)
            self.exce.write(row=row, column=8, value='不通过')
            raise e
        else:
            log.info('这条用例{}通过了'.format(cas['title']))
            self.exce.write(row=row, column=8, value='通过')
Beispiel #10
0
    def test_login(self, cas):
        url = cas['url']
        method = cas['method']
        headers = eval(conf.get('env', 'headers'))
        data = eval(cas['data'])
        expected = eval(cas['expected'])
        row = cas['case_id'] + 1

        respons = request(url=url, method=method, json=data, headers=headers)
        res = respons.json()
        print('实际结果:', res)
        print('预期结果:', expected)

        try:
            self.assertEqual(expected['code'], res['code'])
            self.assertEqual(expected['msg'], res['msg'])
        except AssertionError as e:
            log.error('用例{}没有通过,错误等级为error'.format(cas['title']))
            log.debug('预期结果{}'.format(cas['expected']))
            log.debug('实际结果{}'.format(res))
            log.exception(e)
            self.excel.write(row=row, column=8, value='未通过')
            raise e
        else:
            log.info('用例{}执行通过'.format(cas['title']))
            self.excel.write(row=row, column=8, value='通过')
Beispiel #11
0
    def test_loans(self,cas):
        url = conf.get('env','url') + cas['url']
        data = eval(cas['data'])
        headers = eval(conf.get('env','headers'))
        method = cas['method']
        expected = eval(cas['expected'])
        row = cas['case_id'] + 1

        respones = request(url=url,method=method,params=data,headers=headers)
        res = respones.json()

        try:
            self.assertEqual(expected['code'],res['code'])
            self.assertEqual(expected['msg'],res['msg'])
            #判断返回的数据条数
            self.assertEqual(expected['len'],len(res['data']))
        except AssertionError as e:
            log.error('用例--{}--未通过'.format(cas['title']))
            log.debug('预期结果{}'.format(expected))
            log.debug('实际结果{}:'.format(res))
            log.exception(e)
            self.execl.write(row=row, column=8, value='不通过')

            raise e
        else:
            log.info('用例--{}--通过'.format(cas['title']))
            self.execl.write(row=row, column=8, value='通过')
Beispiel #12
0
 def wait_element_presence(self,
                           locator,
                           img_info,
                           timeout=15,
                           poll_frequency=0.5):
     """
     等待元素被加载
     :param locator: 定位表达式
     :param img_info: 错误截图信息
     :param timeout: 超时时间
     :param poll_frequency: 轮询时间
     :return:
     """
     # 等待元素之前获取当前的时间
     start_time = time.time()
     try:
         ele = WebDriverWait(self.driver, timeout, poll_frequency).until(
             EC.presence_of_element_located(locator))
     except Exception as e:
         # 输出日志
         log.error("元素--{}--等待被加载超时".format(locator))
         log.exception(e)
         # 对当前页面进行截图
         self.save_scree_image(img_info)
         raise e
     else:
         # 元素等待出现之后,获取实际
         end_time = time.time()
         log.info("元素--{}--加载等待成功,等待时间{}秒".format(locator,
                                                  end_time - start_time))
         return ele
def pre_method():
	log.info("----------开始执行登录的用例--------")
	driver = webdriver.Chrome()
	login_page=LoginPage(driver)
	index_page=IndexPage(driver)
	yield  login_page,index_page
	driver.quit()
	log.info("-----------登录的用例执行完毕---------")
Beispiel #14
0
def fixture():
    log.info("--------------开始执行登录的用例----------")
    driver = webdriver.Chrome()
    login_page = LoginPage(driver)
    userInfo_page = UserInfoPage(driver)
    yield login_page, userInfo_page
    driver.quit()
    log.info("---------------登录的测试用例执行完毕-------")
Beispiel #15
0
 def click_ele(self, locator, img_info):
     try:
         ele = self.driver.find_element(*locator).click()
     except Exception as e:
         log.error(F"点击元素--{locator}--失败")
         log.exception(e)
         # 进行截图
         self.save_error_image(img_info)
     else:
         log.info(F"元素--{locator}--点击成功")
Beispiel #16
0
 def get_ele(self, locator, img_info):
     try:
         ele = self.driver.find_element(*locator)
     except Exception as e:
         log.error(F"获取元素--{locator}--失败")
         log.exception(e)
         # 进行截图
         self.save_error_image(img_info)
     else:
         log.info(F"元素--{locator}--获取成功")
         return ele
Beispiel #17
0
 def save_scree_image(self, img_info):
     """
     对当前页面进行截图
     :param img_info: 错误截图信息
     :return:
     """
     start_time = time.time()
     filename = '{}_{}.png'.format(img_info, start_time)
     file_path = os.path.join(ERROR_IMG, filename)
     self.driver.save_screenshot(file_path)
     log.info("错误页面截图成功,图表保存的路径:{}".format(file_path))
Beispiel #18
0
def login_fixture():
    """登录功能的前置后置"""
    # 前置条件
    log.info("开始执行登录的用例")
    driver = webdriver.Chrome()
    login_page = LoginPage(driver)
    index_page = IndexPage(driver)
    yield login_page, index_page
    # 后置条件
    driver.quit()
    log.info("登录的用例执行完毕")
    def test_register(self, case):
        # 第一步,准备用例数据  (请求方法,请求地址,请求参数,请求头
        # 请求方法
        method = case["method"]
        # 请求url
        url = case["url"]
        # 请求参数是否有手机号需要替换
        # 判断
        if "#phone#" in case["data"]:
            phone = self.random_phone()
            case["data"] = case["data"].replace("#phone#", phone)

        data = eval(case["data"])
        headers = eval(conf.get("env", "headers"))
        expected = eval(case["expected"])
        # 用例所在行
        row = case["case_id"] + 1

        # 第二步,发送请求获取实际结果
        response = request(method=method, url=url, json=data, headers=headers)
        res = response.json()
        # print("实际结果:",res)

        print("预期结果:", expected)
        print("实际结果:", res)

        # 第三步,断言
        try:

            self.assertEqual(expected["code"], res["code"])
            self.assertEqual(expected["msg"], res["msg"])
            # 判断是否需要进行sql校验
            if case["check_sql"]:
                sql = case["check_sql"].replace("#phong#",
                                                data["mobile_phone"])

                res = self.db.find_count(sql)
                self.assertTrue(1, res)

        except AssertionError as e:
            # ---------------------将结果回写excel  中
            log.error("用例---- {}----执行未通过".format(case["title"]))
            log.info("预期结果:", expected)
            log.info("实际结果:", res)
            log.exception(e)
            # log.error(e)
            log.exception(e)  # 这样可以异常情况打印到日志文件中!
            self.excel.write_data(row=row, column=8, value="未通过")
            raise e
        else:
            # ----------------------将结果回写excel  中
            log.error("用例---- {}----执行通过".format(case["title"]))

            self.excel.write_data(row=row, column=8, value="通过")
Beispiel #20
0
 def get_element_text(self, locator, img_info):
     try:
         text = self.driver.find_element(*locator).text
     except Exception as e:
         # 日志输出
         log.error("元素--{}--获取文本失败".format(locator))
         log.exception(e)
         self.save_scree_image(img_info)
         raise e
     else:
         log.info("元素--{}--获取文本失败".format(locator))
         return text
Beispiel #21
0
 def click_ele(self, locator, img_info):
     # 点击元素
     try:
         self.driver.find_element(*locator).click()
     except Exception as e:
         # 输出日志
         log.error("元素--{}--点击元素失败".format(locator))
         log.exception(e)
         # 对当前页面进行截图
         self.save_error_image(img_info)
         raise e
     else:
         log.info("元素--{}--点击成功".format(locator))
Beispiel #22
0
 def get_ele_attr(self, locator, img_info, attr_name):
     try:
         ele = self.driver.find_element(*locator)
         attr_value = ele.get_attribute(attr_name)
     except Exception as e:
         # 输出日志
         log.error(F"获取元素--{locator}--属性失败")
         log.exception(e)
         # 对当前页面进行截图
         self.save_error_image(img_info)
         raise e
     else:
         log.info(F"获取元素--{locator}--属性成功")
         return attr_value
Beispiel #23
0
 def get_ele_text(self, locator, img_info):
     # 获取元素包含text信息 需要传入loactor 还要进行拆包
     try:
         text = self.driver.find_element(*locator).text
     except Exception as e:
         # 输出日志
         log.error("元素--{}--获取文本失败".format(locator))
         log.exception(e)
         # 对当前页面进行截图
         self.save_error_image(img_info)
         raise e
     else:
         log.info("元素--{}--获取文本成功".format(locator))
         return text
Beispiel #24
0
 def get_ele(self, locator, img_info):
     # 获取到元素节点
     try:
         ele = self.driver.find_element(*locator)
     except Exception as e:
         # 输出日志
         log.error("获取元素--{}--失败".format(locator))
         log.exception(e)
         # 对当前页面进行截图   imginfo 错误截图信息由调用处传入
         self.save_error_image(img_info)
         raise e
     else:
         log.info("元素--{}--获取成功".format(locator))
         return ele
Beispiel #25
0
 def input_text(self, locator, input, img_info):
     try:
         self.driver.find_element(*locator).send_keys(input)
     except Exception as e:
         # 输出日志
         log.error("输入文本--{}--失败".format(locator))
         log.exception(e)
         # 对当前页面进行截图
         # filename = '{}_{}.png'.format(img_info, start_time)
         # file_path = os.path.join(ERROR_IMG, filename)
         self.save_error_image(img_info)
         raise e
     else:
         log.info(F"文本内容输入--{locator}--成功")
    def test_recharge(self, cas):

        # 准备数据
        url = conf.get('env', 'url') + cas['url']
        cas['data'] = cas['data'].replace('#member_id#', self.member_id)
        data = eval(cas['data'])
        method = cas['method']
        headers = eval(conf.get('env', 'headers'))
        headers['Authorization'] = self.token
        expected = eval(cas['expected'])
        row = cas['case_id'] + 1

        if cas['check_sql']:
            sql = cas['check_sql'].format(self.member_id)
            money_data = self.bb.find_one(sql)['leave_amount']
            print("充值之前的钱:", money_data)

        # 发送请求获取实际结果
        repans = request(url=url, method=method, json=data, headers=headers)
        res = repans.json()

        if cas['check_sql']:
            sql = cas['check_sql'].format(self.member_id)
            money_data2 = self.bb.find_one(sql)['leave_amount']
            print("充值之后的钱:", money_data2)

        print('预期结果:', expected)
        print('实际结果:', res)
        # 断言
        try:
            self.assertEqual(expected['code'], res['code'])
            self.assertEqual(expected['msg'], res['msg'])
            if cas['check_sql']:
                # 将准备的data数据中的amount数值类型转换为decimal
                my_data = decimal.Decimal(str(data['amount']))
                self.assertEqual(my_data, money_data2 - money_data)

        except AssertionError as e:
            log.error('用例--{}--未通过'.format(cas['title']))
            log.debug('预期结果{}'.format(expected))
            log.debug('实际结果{}:'.format(res))
            log.exception(e)
            self.excel.write(row=row, column=8, value='不通过')

            raise e
        else:
            log.info('用例--{}--通过'.format(cas['title']))
            self.excel.write(row=row, column=8, value='通过')
Beispiel #27
0
 def test_register(self, cases):
     # 第一步:准备用例数据
     # 请求方法
     method = cases["method"]
     # 请求地址
     url = cases["url"]
     # 请求参数(参数化替换)
     # 判断data中是否有需要替换的参数
     if "#phone#" in cases["data"]:
         phone = self.random_phone()
         cases["data"] = cases["data"].replace("#phone#", phone)
     data = eval(cases["data"])
     # 请求头
     headers = eval(conf.get("env", "headers"))
     # 预期结果
     expected = eval(cases["expected"])
     # 用例所在行
     row = cases["case_id"] + 1
     # 调用接口请求
     response = request(method=method, url=url, json=data, headers=headers)
     # 获取实际结果
     res = response.json()
     print("预期结果为:", expected)
     print("实际结果为:", res)
     # 断言
     try:
         # 断言两个字段是否相同
         self.assertEqual(expected["code"], res["code"])
         self.assertEqual(expected["msg"], res["msg"])
         # 判断是否需要数据库断言
         if cases["check_sql"]:
             sql = cases["check_sql"].replace("#phone#",
                                              data["mobile_phone"])
             res = self.db.find_count(sql)
             self.assertEqual(1, res)
     except AssertionError as e:
         # 断言结果回写到excel中
         log.error("用例---{}----执行未通过".format(cases["title"]))
         log.debug("预期结果为:{}".format(expected))
         log.debug("实际结果为:{}".format(res))
         log.exception(e)
         self.excel.write_excel(row=row, column=8, value="不通过")
         # 抛出异常
         raise e
     else:
         # 结果回写到excel中
         log.info("用例---{}----执行通过".format(cases["title"]))
         self.excel.write_excel(row=row, column=8, value="通过")
    def test_add(self, case):
        # 第一步:准备数据

        # 请求方法
        method = case["method"]
        # 请求地址
        url = os.path.join(conf.get("env", "BASE_URL")) + case["url"]
        # 请求参数
        data = eval(replace_data(case["data"]))
        # 请求头
        headers = eval(conf.get("env", "headers"))
        headers["Authorization"] = getattr(EnvData, "token")
        # 预期结果
        expected = eval(case["expected"])
        log.info("--------预期结果:{}----------".format(expected))
        # 回写的行
        row = case["case_id"] + 1
        # 数据库前置查询
        if case["check_sql"]:
            start_count = self.db.find_count(replace_data(case["check_sql"]))
        # 第二步:接口调用
        response = requests.request(method=method,
                                    url=url,
                                    json=data,
                                    headers=headers)
        # 实际结果
        res = response.json()
        log.info("--------实际结果:{}----------".format(res))

        # 数据断言和数据库断言
        try:
            self.assertEqual(expected["code"], res["code"])
            self.assertEqual(expected["msg"], res["msg"])
            # 数据库后置查询
            if case["check_sql"]:
                end_count = self.db.find_count(replace_data(case["check_sql"]))
                self.assertEqual(1, end_count - start_count)
        except AssertionError as e:
            # 结果回写到excel中
            log.error("用例--{}--执行未通过".format(case["title"]))
            log.debug("预期结果:{}".format(expected))
            log.debug("实际结果:{}".format(res))
            log.exception(e)
            self.excel.write_excel(row, 8, value="未通过")
        else:
            # 结果回写excel中
            log.info("用例--{}--执行通过".format(case["title"]))
            self.excel.write_excel(row, 8, value="通过")
Beispiel #29
0
class TestLogin:
    """测试登录"""
    @pytest.mark.slow
    @pytest.mark.parametrize("case", LoginCase.success_case_data)
    def test_login_pass(self, case, login_fixture):
        """正常登录的用例"""
        login_page, index_page = login_fixture
        login_page.click_re_mobile()
        # 进行登录的操作
        login_page.login(case['mobile'], case['pwd'])
        # 获取登录之后的用户信息
        res = index_page.get_my_user_info()
        # 断言用例执行是否通过
        try:
            assert '登录成功' == res
        except AssertionError as e:
            log.error("用例执行失败")
            log.exception(e)
            raise e
        else:
            log.info("用例执行通过")
            # 退出登录,重新访问登录页面
            index_page.click_quit()
            # 重新进入登录页面
            login_page.page_refresh()
Beispiel #30
0
class TestLogin:
    ''' 思考需要的前置
	    并且吧前置给分出去
	    使用到 loginPage,userInfoPage两个页面,
	    要使用前置方法生成两个页面的对象'''

    # 正常登录用例
    @pytest.mark.skip
    @pytest.mark.parametrize("case", LoginCase.success_case_data)
    def test_login_pass(self, case, fixture):
        login_page, userInfo_page = fixture
        login_page.login(case["user"], case["pwd"])
        # 实际执行结果
        res = userInfo_page.get_welcome()
        try:
            # 断言登录成功的条件
            assert "登录成功" == res
        except AssertionError as e:
            log.error(F'-------用例执行失败---case为:{case}--------')
            log.exception(e)
            raise e
        else:
            log.info("---------用例执行通过--------")
            # 退出登录。重新访问登录页面
            userInfo_page.quit_login()
            # 重新进入登录页面
            login_page.page_refresh()