目标: 在原有基础上进行框架优化,本内容不做强制要求,了解即可。
1. Faker(伪造器)模块生成数据
2. 实战:结合框架动态生成请求数据
3. 实战:响应进行动态断言处理
一、 Faker(伪造器)模块生成数据
1、对faker对象,需要设置语言
name这个方法,是faker这个类本身的属性。方法都是类里提供的,不是随便写的
2、使用:快速随机生成伪造数据
3、常见用法
4、大量生成数据 --通过循环
5、处理空格
正常运行的英文名字,中间会有空格
需要做一个拼接的动作
class ReqDataDriver():def get_name(self):"""获取用户名@return:"""data = faker_data.name()# 以空格分割,并且合并return ''.join(data.split())
处理后的结果:
二、实战:结合框架动态生成请求数据
1、通过faker方法去进行封装对应的获取数据的方法
2、维护一个文件,告诉Faker,需要生成哪些数据。
将请求数据驱动文件,与告知框架(faker)要生成的数据文件,做映射 。可以通过反射的方式
3、写一个方法: 执行之前生成数据。
1)第一步:读取yaml文件,获取要生成数据 :
{
regName:get_name,
regPhone: get_Phone
}
#读取yaml文件,
def GenerateData():# 由于这里的file_path和read_yaml()方法本身的参数路径不一致,所以这里需要专门指定一下路径data = FileDataDriver.read_yaml(file_path="./data/DriverData/DriverData.yaml")all_data = {}for key, value in data.items():#getattr反射(实例化的对象, 方法或者属性名)re_value = getattr(REQDATADRI, value)()all_data.update({key: re_value})return all_data
2)第二步:循环遍历,生成对应的数据并且组成一个新的数据字典。setup_class
三、实战:响应进行动态断言处理
1、excel维护数据源:[{},{},{}]
{ "errorMsg":"昵称判断",
"target": "$.data.nickname", # 实际结果,可以是jsonpath 也可以是正则
"type":"equals", # 对比符号
"value": "哈米老师" # 期望结果
}
2、写断言的工具类---AssertUtils.py
第一步: 断言有多个场景:等于、不等于、包含... (断言方法先给写好)-AssertUtils.py
3、核心执行器-添加代码【遍历调用断言的工具类里的断言方法】
from P11_PytestFrame.Common.AssertUtils import assert_exec#响应多个数据断言for assert_option in eval(CaseData.get("assertOptions", '[]')):# 5.1 获取目标值target_value = None#如果对应的头的 $.则意味着这个是JSONpath提取if assert_option["target"].startswith("$."):# jsonpath 提取target_value = self.ak.get_text(res.json(), assert_option["target"])else:# 正则提取--不常用pattern = re.compile(assert_option["target"])target_value = re.findall(pattern, res.text)[0]# 5.2 进行判断assertResult = assert_exec(assert_option["type"], target_value, assert_option["value"])assert assertResult, "断言不通过:" + assert_option["errorMsg"]
四、扩展:上传图片问题
上传图片问题:(附加)-- 接口
读书屋上传头像功能 (2个)- 上传和提交(或者是修改)
1、第一个接口:上传--- 返回响应数据 :{msg:上传成功,path:图片路径}
2、修改接口:图片途径做为请求数据