框架设计思路
- Apis:
- base_api:二次封装requests
- 各模块接口类:业务接口信息的具体描述,只关注接口本身,不需要涉及业务和断言,可以在每个接口对应方法中返回接口的响应
- configs:存放环境配置,包括base_url、cookie等
- datas:存放测试数据
- logs:存放日志
- testcases:存放测试用例
- utils:工具类
如何传递token
1. 使用继承的方式
- 创建获取token的类,调用__init__方法时,获取token
- 其他类继承获取token的类,完成token的传递
2. 使用requests的session()方法
- 初始化类的时候,调用创建session实例,并通过session调用获取token的接口
- 后续接口都通过session来调用
整体结构响应断言 json schema
环境准备
- 自动生成 jsonschema 文件
pip install genson
- 完成 jsonschema 断言
pip install jsonschema
json schema 文件生成
@classmethod
def genarate_schema(cls, obj, file_path):
"""
自动生成 json schema 文件
:param obj: 要生成 json schema 的对象
:param file_path: 保存 json schema 文件的路径
"""
builder = SchemaBuilder()
# 把预期响应添加到 builder 中
builder.add_object(obj)
# 生成 json schema
schema_content = builder.to_schema()
print(f"生成的 json schema 为 {schema_content}")
# 写入 json 文件
with open(file_path, "w", encoding="utf-8") as f:
json.dump(schema_content, f)
json schema 比对
@classmethod
def schema_validate(cls, obj, schema):
"""
对比 json 格式对象与生成的 json schema 结构是否一致
:param obj: json 格式对象
:param schema: 生成的 json schema 的结构
:return:
"""
try:
validate(instance=obj, schema=schema)
return True
except Exception as e:
print(f"schema 结构校验异常 {e}")
return False
比对实例
def test_get_departments_schema(self):
"""
测试获取所有部门 id 接口响应符合预期结构
"""
expect:dict = {字典}
# 生成文件的路径
schema_path = "../configs/get_department_schema.json"
# 生成 json schema 文件
Utils.genarate_schema(expect, schema_path)
# 发出查询请求,获取待比对的响应
r = self.department.get()
# 读取schema文件,并转为json对象
schema = json.load(open(schema_path, encoding="utf-8"))
print(f"获取到的 schema 内容为 {schema}")
# 断言响应体符合预期结构
assert Utils.schema_validate(r.json(), schema)