案例8-Pytest简单测试平台

发布时间 2023-08-04 15:02:23作者: 韩志超

需求描述

假设你们的自动化测试是基于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渲染得到报告页面。