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("结束测试了")
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")