Python 测开27期 - 柒柒 - 接口自动化测试

框架设计思路

  • 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)