案例8-Pytest简单测试平台
需求描述
假设你们的自动化测试是基于Pytest的,并且已经积累了大量的测试用例。但是在实际回归使用中,还挑选用例麻烦,用例可用状态不明确以及上手使用有一定门槛等问题。
现在领导希望你能复用已有的自动化测试用例,开发一个界面化的测试平台。基本功能要求如下:
提示
页面实现
可以使用Flask编写简单的接口来实现,配合Bootstrap4来美化页面
用例收集
使用自定义插件及钩子方法pytest_collection_modifyitems
配合pytest --co
可以收集所有用例,并存到插件对象的属性中,每一个item
就是一个用例,其中包含了
- item.name: 测试函数名
- item.function:测试函数对象
- item.nodeid: 测试函数节点
- item.location: 测试函数所在文件、前一行行号,函数名
- item.iter_markers(): 测试用例所有marker标记,每个marker包含name, args, kwargs三个属性
...
可以使用inspect.get_source(function)
通过函数对象获取函数代码。
用例调试
可以用pytest <用例根目录/用例nodeid> -vs --no-header --no-summary
直接执行用例,使用os.popen()
或supprocess.Popen()
执行命令并拿到命令行输出。
测试计划
可以使用json文件来存储每一个测试计划,主要保存选择的用例的nodeid列表。
- 新建测试计划时,将选中的测试用例nodeid列表保存到测试计划名称对应的json文件中。
- 执行测试计划时,根据测试计划名称读取json文件中的nodeid列表,使用
pytest <测试目录/nodeid> <测试目录/nodeid> <测试目录/nodeid>
来执行多条用例
测试报告
可以安装pytest-html或pytest-html-cn,在执行测试计划时添加报告生成,例如:
pytest <测试目录/nodeid> <测试目录/nodeid> <测试目录/nodeid> --html=report.html --self-contailed-html
将报告生成到Flask的tempaltes目录中,并使用Flask多render_template
渲染得到报告页面。