Beispiel #1
0
class TestHttpRequest(unittest.TestCase):
    def setUp(self):
        self.t = DoExcel(project_path.test_data_path,
                         'test_data')  # 操作Excel的实例
        # print("开始测试啦")
        logger.info("开始执行测试啦")

    @data(*test_data)
    def test_http_request(self, a):
        # print("测试数据是:",a)
        # print("目前正在执行第%s条用例"%a[0])
        logger.info("测试数据是:{0}".format(a))
        logger.info("目前正在执行第%s条用例" % a[0])
        global COOKIES
        # IP+a[4]  ip地址与uri的拼接
        res = HttpRequest(IP + a[4], a[5]).http_request(a[3], cookies=COOKIES)
        if res.cookies != {}:  # 判断长度或者是判断是否为空{}
            COOKIES = res.cookies  # 只有登录才会产生cookies
        # print(res.json())
        # 检查数据库
        # eval(a[6])
        print(a[7]['sql_data'])
        print(type(a[7]['sql_data']))
        sql_result = DoMysql().do_mysql(a[7]['sql'], (str(a[7]['sql_data']), ))
        try:
            self.assertEqual(str(sql_result), a[7]['expected'])
            check_sql_result = 'PASS'
        except AssertionError as e:
            check_sql_result = 'FAIL'
            raise e
        finally:
            self.t.write_data(a[0] + 1, 2, str(sql_result), check_sql_result)

        try:
            self.assertEqual(str(a[6]), res.json()['code'])
            result = 'PASS'
            # self.t.write_data(a[0]+1,str(res.json()),test_result)
        except AssertionError as e:
            result = 'Fail'
            # self.t.write_data(a[0]+1,str(res.json()),test_result)
            raise e  # 跟return一样 中断代码
        finally:  #
            self.t.write_data(a[0] + 1, 1, str(res.json()), result)

    def tearDown(self):
        # print("结束测试了")
        logger.info("结束测试了")
Beispiel #2
0
class TestHttpRequest(unittest.TestCase):  #!!!这里要继承TestCase
    def setUp(self):
        #创建操作excel的实例
        self.t = DoExcel(project_path.test_data_path, 'test_data')
        logger.info("开始测试")

    @data(*test_data)
    def test_http_request(self, a):
        logger.info("测试数据是:{0}".format(a))  #!!!括号中不能用逗号的方式传递变量值
        logger.info("目前正在执行第%s条用例" % a['case_id'])

        global COOKIES

        logger.info("请求的地址为:%s" % (ip + a['url']))
        logger.info("请求的参数为:%s" % a['params'])
        # print('a5的类型',type(a[5]))

        #此方法是针对list形式
        # res=HttpRequest(ip+a[4],(a[5])).httpRequest(a[3],cookies=COOKIES)
        #此方法是针对字典取值,可以根据key取value值
        res = HttpRequest(ip + a['url'],
                          eval(a['params'])).httpRequest(a['method'],
                                                         cookies=COOKIES)

        if res.cookies != {}:  #判断cookies是否为空用{},或用len(res.cookies)==0
            COOKIES = res.cookies
        # print(res.json())

        #检查数据库的值
        # sql_result=DoMysql().do_mysql(a[7]['sql'],(str(a[7]['sql_data']),))

        #判断是否对数据库进行检查
        if a['check_sql'] != None:  #是否需要对数据库进行检查
            sql_result = DoMysql().do_mysql(eval(a['check_sql'])['sql'])
            try:
                self.assertEqual(
                    eval(a['check_sql'])['expected'], str(sql_result)
                )  #!!!a['check_sql]['expected'] 这种用法错误,应将前面转换成字典类型
                check_sql_result = 'PASS'
            except AssertionError as e:
                check_sql_result = 'FAIL'
                raise e
            finally:
                self.t.write_data(
                    int(a['case_id']) + 1, 2, str(sql_result),
                    check_sql_result)

        #判断是否存在id和regtime需要替换
        if a['expect_result'].find("${id}") != -1 and a['expect_result'].find(
                '${regtime}') != -1:
            #获取手机号 从params里面去获取手机号
            mobilephone = eval(a['params'])['mobilephone']  #!!! 记住,字典的键值要用“”
            #替换id
            member_id = DoMysql().do_mysql(
                'select id from member where mobilephone=%s' %
                mobilephone)[0]  #sql返回是元组类型
            #替换regtime
            regtime = DoMysql().do_mysql(
                'select regtime from member where mobilephone=' +
                mobilephone)[0]

            expected_result = eval(a['expect_result'])
            expected_result['data']['id'] = member_id
            expected_result['data']['regtime'] = str(regtime) + '.0'
        else:
            expected_result = eval(a['expect_result'])

        #检查excel中的预期值
        try:
            self.assertEqual(expected_result, res.json())  #!!!预期结果要转换成str
            result = 'PASS'
        except AssertionError as e:
            logger.error("断言报错信息是%s" % e)
            result = 'FAIL'
            raise e  #!!!终止后面的代码
        finally:
            self.t.write_data(
                int(a['case_id']) + 1, 1, str(res.json()), result)

    def tearDown(self):
        logger.info("测试结束")
class TestHttpRequest(unittest.TestCase):
    def setUp(self):
        self.excel = DoExcel(project_path.test_data_path, sheet)
        with open(project_path.yaml_path, encoding='utf-8') as file:
            self.yaml_data = yaml.load(file, Loader=yaml.UnsafeLoader)
        logger.info("开始测试啦")

    @data(*test_data)
    def test_http_request(self, sub_data):
        logger.info("目前正在执行第%s条用例" % sub_data['case_id'])

        if re.search('randstrName_|increase_|randstr_|randint_',
                     str(sub_data)):  # 判断是否要做参数配置
            sub_data = ConfigElement(logger).config_variable(
                sub_data, self.yaml_data)

        if re.search('\${.*?}', str(sub_data)):  # 判断是否要做参数替换或反射方法
            sub_data = post_processor.correlation_replace(
                sub_data, self.yaml_data)

        if sub_data['preposition_sql']:  # 判断是否有数据库前置处理
            post_processor.preposition_sql(eval(sub_data['preposition_sql']))

        param = eval(sub_data['param'])
        if re.search("{'base64':.*?}", str(param)):  # 处理需要用64位编码来编码图片
            param = ConfigElement(logger).deal_photo_base64(param)

        logger.info("测试数据是:{0}".format(sub_data['param']))

        res = HttpRequest(IP + sub_data['url'],
                          param).http_request(sub_data['method'],
                                              payload=sub_data['json'],
                                              token=self.yaml_data['token'])
        try:
            response = json.loads(res.content.decode())
            logger.info('返回值为:%s' % res.text)
        except Exception as e:
            logger.error('返回值报错')
            logger.error('报错信息:%s' % res.text)
            raise e

        if ('/account/projectAccount/login'
                in sub_data['url']) and response['data'] != '':
            token = response['data']['Token']
            self.yaml_data['token'] = token

        if sub_data['correlation']:  # 判断是否要调用参数提取函数
            post_processor.correlation_save_dict(response,
                                                 sub_data['correlation'],
                                                 self.yaml_data)

        if sub_data['post_sql']:  # 判断是否要数据库后置处理
            post_processor.post_sql(eval(sub_data['preposition_sql']))

        try:
            logger.info('开始断言')
            contrast_result = post_processor.assert_result(
                eval(sub_data['expect_result']), response)
            self.assertEqual(True, contrast_result)
            logger.info('预期结果断言正确')
            result = 'Pass'
            self.excel.write_data(
                int(sub_data['case_id']) + 1, 'request', str(response), result)
        except AssertionError as e:
            result = 'Fail'
            logger.error('结果断言错误')
            self.excel.write_data(
                int(sub_data['case_id']) + 1, 'request', str(response), result)
            raise e

        if sub_data['check_sql']:
            query_sql = eval(sub_data['check_sql'])
            db = query_sql.get('ab') if query_sql.get('db') else 1
            sql_result = DoMysql(logger).do_mysql(query_sql['sql'], db=db)
            try:
                self.assertEqual(str(query_sql['expected']), str(sql_result))
                check_sql_result = 'PASS'
                logger.info('数据库结果断言正确')
                self.excel.write_data(
                    int(sub_data['case_id']) + 1, 'sql_request',
                    str(sql_result), check_sql_result)
            except AssertionError as e:
                check_sql_result = 'FAIL'
                logger.error('数据库结果断言错误')
                self.excel.write_data(
                    int(sub_data['case_id']) + 1, 'sql_request',
                    str(sql_result), check_sql_result)
                raise e

    def tearDown(self):
        with open(project_path.yaml_path, 'w', encoding='utf-8') as file:
            yaml.dump(self.yaml_data, file)
        logger.info("结束测试了\n")