Pytest-JSON提取器实现多接口参数关联

网友投稿 616 2022-08-25


Pytest-JSON提取器实现多接口参数关联

""" Author:Zhou Create_Date:2022年07月13日--21:59 Tool:PyCharm Software: PyCharm"""# 在当前文件中所有用例执行之前执行import allureimport openpyxlimport pytestfrom data_driver.excel_read import Read_Excelfrom encapsulation.api_key import ApiKeydef setup_module(): # 定义全局变量 global ak,excel,sheet,excel_path,all_val # 初始化Excel文件 excel_path = './data/api_cases.xlsx' excel = openpyxl.load_workbook(excel_path) sheet = excel['Sheet1'] # 实例化工具类 ak = ApiKey() # 参数化变量存储字典 all_val = {}@pytest.mark.parametrize('value', Read_Excel())def test_01(value): # 如果存在自定义标题 if value[10] is not None: # 动态生成标题 allure.dynamic.title(value[10]) if value[15] is not None: # 动态获取story模块名 allure.dynamic.story(value[15]) if value[16] is not None: # 动态获取feature模块名 allure.dynamic.feature(value[16]) if value[17] is not None: # 动态获取备注信息 allure.dynamic.description(value[17]) if value[18] is not None: # 动态获取级别信息 allure.dynamic.severity(value[18]) r = value[0] + 1 # ===================Excel数据的解析================= # 判断当前行的第一列的值,是否是数字编号 if type(value[0]) is int: # 准备测试数据 # 请求参数,读取列数是从第一列为0计数 data = value[5] # 校验字段 assert_value = value[7] # 预期结果字段 expect_value = value[8] # 如果存在请求头 if value[4]: # 存在请求参数 if value[5]: dict_data = { 'url': value[1] + value[2], # eval将字符串str当作有效的表达式来求值并返回计算结果 # 这里直接给headers一个字典值,不能直接取字符串,需要转成字典 'headers': eval(value[4]), value[6]: eval(data) } # 不存在请求参数 else: dict_data = { 'url': value[1] + value[2], 'headers': eval(value[4]) } # 如果不存在请求头 else: # 存在请求参数 if value[5]: dict_data = { 'url': value[1] + value[2], value[6]: eval(data) } # 不存在请求参数 else: dict_data = { 'url': value[1] + value[2] } """ 常规的参数传递: request.post(url="",data="",headers="") 封装时,参数可以直接用**kwargs request.post(**kwargs) """ # 使用反射模拟请求 res = getattr(ak, value[3])(**dict_data) # ==================Json提取,单参数版================== if value[11] is not None: valueJson = ak.get_text(res.text, value[12]) # 将获取到的token值复制到Excel中定义的变量名 # 变量名获取 key = value[11] # 用定义的字典all_val保存响应得到的键值 all_val[key] = valueJson # ================JSONt提取,多参数版================ if value[11] is not None: # 遍历分割JSON提取_引用名称 jsonStr = value[11] # 用分号分割varStr字符串,并保存到列表里 jsonList = jsonStr.split(';') # 获取varStrList列表长度 length = len(jsonList) # 循环输出列表值 for i in range(length): # json引用变量名获取 key = jsonList[i] # json表达式获取 jsonExp = jsonList[i] # 字典值的获取 valueJson = ak.get_text(res.text, jsonExp) # 变量值的存储 all_val[key] = valueJson try: # 结果校验 # 实际结果 # 让异常信息好检验 result = None result = ak.get_text(res.text, assert_value) print("==========检查信息==========") print("检验字段:"+value[7]) print("预期结果:"+value[8]) print("实际结果:"+result) print(result == expect_value) if result == expect_value: sheet.cell(r, 10).value = '通过' else: sheet.cell(r, 10).value = '不通过' excel.save(excel_path) assert result == value[8] except: print("==========实际结果==========") print("请求参数有误,请检查!") sheet.cell(r, 10).value = "请求参数有误,请检查" excel.save(excel_path) assert result == value[8]


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:绝了!深度解析了1道华为Python笔试题,竟然可以学会12种Python里正则表达式的用法
下一篇:# yyds干货盘点 # 盘点一个列表中字符串替换的基础题目
相关文章

 发表评论

暂时没有评论,来抢沙发吧~