Пример #1
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
Пример #2
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='通过')
Пример #3
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='通过')
Пример #4
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='通过')
Пример #5
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='通过')
Пример #6
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
Пример #7
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='通过')
Пример #8
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
Пример #9
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='通过')
Пример #10
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
Пример #11
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}--点击成功")
Пример #12
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
Пример #13
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
Пример #14
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))
Пример #15
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
Пример #16
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
Пример #17
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}--成功")
Пример #18
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
Пример #19
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="通过")
Пример #20
0
    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='通过')
Пример #21
0
 def click_element(self, locator, img_info, timeout=15, poll_frequency=0.5):
     '''点击元素'''
     start_time = time.time()
     try:
         WebDriverWait(self.driver, timeout, poll_frequency).until(
             EC.element_to_be_clickable(locator)).click()
     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))
Пример #22
0
	def test_login_error(self,pre_method,case):
		'''异常用例,窗口上会有提示'''
		login_page,index_page =pre_method
		# 刷新页面提高用例执行效率
		login_page.page_refresh()

		login_page.login(case['mobile'], case['pwd'])
		res = login_page.get_error_info()
		try:
			assert case['expected'] == res
		except AssertionError as e:
			log.error(F'-------用例执行失败---case为:{case}--------')
			log.exception(e)
			raise e
		else:
			log.info("---------用例执行通过--------")
Пример #23
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()
Пример #24
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()
Пример #25
0
    def test_withdraw(self, cas):

        # 准备用例数据
        url = conf.get('env', 'url') + cas['url']
        cas['data'] = cas['data'].replace('#member_id#', str(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)
            start_money = self.bb.find_one(sql)['leave_amount']
            print('取现前:', start_money)
        # 发送请求
        response1 = request(method=method, url=url, headers=headers, json=data)
        res = response1.json()
        print('实际结果:', res)
        print('预期结果:', expected)
        # 断言
        try:
            self.assertEqual(expected['code'], res['code'])
            self.assertEqual(expected['msg'], res['msg'])
            # 查询请求之后的账户余额
            if cas['check_sql']:
                sql = cas['check_sql'].format(self.member_id)
                end_money = self.bb.find_one(sql)['leave_amount']
                print('取现后:', end_money)
                # 用例数据中data,amount的数值类型转换
                my_data = decimal.Decimal(str(data['amount']))

                self.assertEqual(my_data, start_money - end_money)
        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='通过')
Пример #26
0
 def click_element(self, locator, img_info):
     """
             点击元素
             :param locator: 元素定位表达式
             :param img_info: 错误截图信息
             :return:
             """
     try:
         self.driver.find_element(*locator).click()
     except Exception as e:
         # 输出日志
         log.error("点击元素--{}--失败".format(locator))
         log.exception(e)
         # 对当前页面进行截图
         self.save_scree_image(img_info)
         raise e
     else:
         log.info("元素--{}--点击成功".format(locator))
Пример #27
0
 def get_element(self, locator, img_info, timeout=15, poll_frequency=0.5):
     '''获取元素'''
     start_time = time.time()
     try:
         element = 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 element
Пример #28
0
 def window_move_element(self,
                         locator,
                         img_info,
                         timeout=20,
                         poll_frequency=0.5):
     '''移动出窗口到指定元素位置'''
     try:
         element = 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
     return self.driver.execute_script('arguments[0].scrollIntoView();',
                                       element)
Пример #29
0
 def clear_input(self, locator, img_info, timeout=20, poll_frequency=0.5):
     '''清空输入框'''
     start_time = time.time()
     try:
         element = 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 element.clear()
Пример #30
0
    def test_update_regname(self, case):
        # 1、准备数据
        url = conf.get("env", "base_url") + case["url"]
        # 判断是否有昵称需要替换
        if "#reg_name#" in case["data"]:
            # 随机生成一个昵称
            reg_name = self.random_name()
            # print(reg_name)
            # 将参数中的#reg_name#替换成随机生成的昵称
            case["data"] = replace_data(case["data"])
        # 替换用户id
        data = replace_data(case["data"])
        data = eval(data)
        headers = eval(conf.get("env", "headers"))
        headers["Authorization"] = getattr(EnvData, "token")
        expected = eval(case["expected"])
        row = case["case_id"] + 1

        # 2、发起请求,获取实际结果
        response = request(url=url, method="patch", headers=headers, json=data)
        res = response.json()

        # 3、断言
        try:
            self.assertEqual(expected["code"], res["code"])
            self.assertEqual(expected["msg"], res["msg"])
            # 对需要进行数据库校验的用例进行校验
            if case["check_sql"]:
                sql = replace_data(case["check_sql"])
                new_regname = self.db.find_one_data(sql)["reg_name"]
                self.assertEqual(reg_name, new_regname)
        except AssertionError as e:
            # 结果写进日志和excel中
            log.error("用例--{}--执行未通过")
            log.debug("预期结果:{}".format(expected))
            log.debug("实际结果:{}".format(res))
            result = "未通过"
            log.exception(e)
        else:
            log.info("用例--{}--执行通过".format(case["title"]))
            result = "通过"
        finally:
            self.excel.write_data(row=row, column=8, value=result)