pytest插件开发(常用的插件、pytest执行测试用例顺序控制、分布式执行测试用例、hook体系)

pytest插件开发(常用的插件、pytest执行测试用例顺序控制、分布式执行测试用例、hook体系)

  • pytest插件分类
    1、外部插件:pip install 安装的插件
    2、本地插件:pytest 自动模块发现机制(conftest.py存放的)
    3、内置插件:代码内部的_pytest目录加载

  • pytest常用的插件
    1、pip install pytest-ordering #控制用例的执行顺序(重点)
    2、pip install pytest-xdist #分布式并发执行测试用例(重点)
    3、pip install pytest-dependency #控制用例的依赖关系(了解)
    4、pip install pytest-rerunfailures #失败重跑(了解)
    5、pip install pytest-assume #多重校验(了解)
    6、pip install pytest-random-order #用例随机执行(了解)
    7、pip install pytest-html #测试报告(了解)

  • pytest执行顺序控制
    适用场景:
    1、对于集成测试,经常会有上下文依赖关系的测试用例。例如10个步骤,拆成10条case,这时候使用pytest执行顺序控制,就能
    知道到底是执行到哪步开始报错。
    2、用例默认的执行顺序为:自上而下执行
    解决:
    1、可以通过setup,teardown和fixture来解决。也可以使用对应的插件。
    2、安装:pip install pytest-ordering
    3、用法:@pytest.marl.run(order=2)
    4、注意:多个插件装饰器(>2)的时候,有可能会发生冲突

  • pytest测试用例并行运行与分布式
    1、使用分布式并发执行测试用例,分布式插件:pytest-xdist
    2、安装及运行:pip install pytest-xdist
    3、注意:用例多的时候效果明显,多进程并发执行,同时支持allure

  • 分布式执行测试用例原则
    1、用例之间是独立的,不能有依赖关系
    2、用例执行没有顺序,随机顺序都能正常执行
    3、每个用例都能重复运行,运行结果不会影响其他用例

  • pytest内置插件hook体系
    1、pytest hook 介绍:
    1、是个函数,在系统消息触发时被系统调用
    2、自动触发机制
    3、Hook函数的名称是确定的
    4、pytest有非常多的钩子函数
    5、使用时直接编写函数体

    2、pytest hook 执行顺序:

    site-package/_pytest/hookspec.py
    pytest_addoption : 添加命令行参数,运时会先读取命令行参数
    pytest_collection_modifyitems : 收集测试用例,收集之后(改编码,改执行顺序)
    pytest_collection_finish:收集之后的操作
    pytest_runtest_setup:在调用 pytest_runtest_call 之前调用
    pytest_runtest_call:调用执行测试的用例
    pytest_runtest_makereport:运行测试用例,返回setup,call,teardown的执行结果

  • 简单的例子

def pytest_runtest_setup(item):    
  # 执行测试用例前执行的setup方法    
  print("setting up", item)

def pytest_runtest_call(item):    
  # 调用执行测试的用例
  print("pytest_runtest_call")

def pytest_runtest_teardown(item):   
  #  执行测试用例后执行的teardown
  print("pytest runtest teardown",item)
  • 总结

1、hook 函数名字固定
2、hook 函数会被自动执行
3、执行是有先后顺序的
4、pytest 定义了很多 hook 函数,可以在不同阶段实现不同的功能