接口测试新姿势-1
前提
以往的接口测试大多使用两种方式:
1.工具类(PostMan/Jmeter)
2.代码类(Python+Request)
对于1来说,虽然入门等级低,但是填写参数较为麻烦,且因参数类型的不同,经常出现填错的情况。
对于2来说,需要有代码基础,贵在灵活,但需要经常维护代码。新增一个接口即需要添加用例。
结合两者优点,接口测试新框架应用而生。
介绍
-config(配置)
-database(测试用例)
-db_fixture(测试引擎)
-lib(逻辑处理)
-log(日志)
-mock(虚拟服务器)
-report(测试报告)
-README.md(项目介绍)
-run_test_api.py(用例执行入口)
-requirements (依赖包)
使用说明
环境准备
1.执行前确保 已安装所有依赖库:
1.1 拷贝工程至新环境,切换到工程根目录下cmd:
1.2 pip install -r requirements.txt 一次性安装所有依赖库
2.使用Pycharm打开,配置执行tool为Pytest
3.配置Allure环境依赖
参考http://bbs.apehorde.com/blog/articles/226
调试说明
1.用例填写,参考database/demo.xlsx
1.1 表格设置: 单元格格式为文本
1.2 data中数据为字典格式,若需调用函数,则使用 ${fun_name(parameters)}
{"user_agent":"I",
"device_sn":"98563",
'sign': "${gen_random_string(12)}"}
1.3 result 中格式为字典或列表格式,若需完整匹配响应,则直接填写字典格式;若需分别校验字段时,则使用dict in list 格式,key值为校验函数(参考lib/utils.py中get_uniform_comparator(comparator)方法)value值为[校验项,期待值]。
# dict
{'code': 205, 'message': '请输入正确手机号'}
# dict in list
["{'eq': ['status_code', 201]}","{'eq': ['resp_body_success', True]}"]
# 层级嵌套
'''
json_content = {
"person": {
"first_name": "Leo",
"last_name": "Lee",
},
"cities": ["Guangzhou", "Shenzhen"]
}
@param (str) query
"person.first_name" => "Leo"
"person.cities.0" => "Guangzhou"
'''
["{'eq': ['person.first_name', 'Leo']}"]
2.项目适配
2.1 根据项目需要,在lib/utils.py 中添加所需方法,在config/conf.py中添加或修改本项目相关配置
2.2 若请求有公共部分,可在lib/RequestHandler.py 中自行适配
3.测试范围
根据需要在config/conf.py 中修改test_scope值即可。
# 测试集范围,None为全部执行,列表中为执行对应下标sheet页
test_scope = None # 全部执行
test_scope = [0,1] # 执行第一和第二个sheet中用例
4.mock的使用
使用flask搭建mock_server,可做到“开发未动,测试先行”。不必等到开发完成接口,在接口文档就绪时,即可根据文档搭建mock_server,构建接口的请求与返回。有mock_server后即可验证进行框架的适配或校验。
先启动api_server.py,再进行校验。
解决痛点
1.实现业务与逻辑代码分开,全员可参与:自动化人员可根据项目需求扩展所需函数,业务人员可在测试用例中直接填写接口测试相关参数
2.无需区别请求参数格式,对照规则填写即可
3.代码改动量小,只需维护项目所需函数,无需更改用例代码
4.报告清晰
源码地址
源码可至以下地址获取:
http://172.16.0.209:8000/project/
这么好的框架,值得推广!问下,附件上传的功能是怎么解决的。