pytest how to invoke pytest
且任容枯 Lv4

选择运行哪个测试

命令行形式

  • 运行测试在module

    1
    pytest test_mod.py
  • 运行测试在一个目录

    1
    pytest testing/
  • 运行测试通过关键字表达

    1
    pytest -k "MyClass and not method"

    这将运行包含与给定字符串表达式(不区分大小写)匹配的名称的测试,这些名称可以包括使用文件名、类名和函数名作为变量的 Python 运算符。上面的示例将运行 TestMyClass.test _ something,但不运行 TestMyClass.test _ method _ simple。

  • 运行测试通过节点模式

    1
    pytest test_mod.py::TestClass::test_method
  • 运行测试 marker 表达式

    1
    pytest -m slow

    这个命令会运行 被 @pytest.mark.slow 装饰器装饰的用例

  • 从包中运行测试

    1
    pytest --pyargs pkg.testing

    这将导入 pkg.test 并使用其文件系统位置来查找和运行测试。

help

1
2
3
pytest --version   # shows where pytest was imported from
pytest --fixtures # show available builtin function arguments
pytest -h | --help # show help on command line and config file options

分析测试执行时间

1
pytest --durations=10 --durations-min=1.0

获得1.0 s 长度内最慢的10个测试持续时间列表 默认情况下,pytest 不会显示太小的测试持续时间(< 0.005 s) ,除非在命令行上传递-vv

管理插件的加载

提前加载插件 通过-p 命令提前加载插件

1
pytest -p mypluginmodule

不加载插件

1
pytest -p no:mypluginmodule

其他调用pytest的方式

  • python解释器
    1
    python -m pytest [...]
  • 通过main函数
    1
    retcode = pytest.main()
    添加插件
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    import sys

    import pytest

    class MyPlugin:
    def pytest_sessionfinish(self):
    print("*** test run reporting finishing")

    if __name__ == "__main__":
    sys.exit(pytest.main(["-qq"], plugins=[MyPlugin()]))