是否有办法从文件中选择要运行的pytest测试?
例如,文件foo.txt包含要执行的测试列表:
tests_directory/foo.py::test_001
tests_directory/bar.py::test_some_other_test
或者,是否有一种方法可以从pytest的不同目录中选择多个测试,测试名称中没有公共模式?
Pytest -k <pattern>允许单个模式。
一种选择是做尿检。针对每个测试进行标记,但我的要求是运行来自不同文件的不同测试组合。
是否有办法为每个模式指定多个模式和一个测试文件名?
Or
是否有一种方法可以在文件中指定准确的测试路径,并将该文件作为输入提供给pytest?
Or
是否有可以用于此目的的钩子函数?
我的回答提供了一种在不同场景中运行测试子集的方法。
运行项目中的所有测试
pytest
在单个目录中运行测试
要从一个目录运行所有测试,请将该目录作为参数
pytest:
pytest tests/my-directory
在单个测试文件/模块中运行测试
要运行一个充满测试的文件,请将具有相对路径的文件作为pytest的参数列出:
pytest tests/my-directory/test_demo.py
运行一个测试函数
要运行单个测试函数,添加::和测试函数名:
pytest -v tests/my-directory/test_demo.py::test_specific_function
使用-v可以看到运行了哪个函数。
运行一个测试类
要只运行一个类,就像我们对函数所做的那样,添加::,然后将类名添加到文件形参中:
pytest -v tests/my-directory/test_demo.py::TestClassName
运行一个测试类的单个测试方法
如果不想运行一个测试类的所有部分,只运行一个方法,只需添加
另一个::和方法名:
pytest -v tests/my-directory/test_demo.py::TestClassName::test_specific_method
根据测试名称运行一组测试
-k选项使您可以传入一个表达式以运行具有的测试
表达式指定的某些名称作为测试名称的子字符串。
可以使用and、or和不创建复杂的表达式。
例如,要运行所有名称中包含_raise的函数:
pytest -v -k _raises
方法1:随机选择试验。又长又丑。
python -m pytest test/stress/test_performance.py::TestPerformance::test_continuous_trigger test/integration/test_config.py::TestConfig::test_valid_config
方法二:使用关键字表达式。
注意:我正在通过测试用例名称进行搜索。同样适用于TestClass名称。
案例1:下面的程序将运行找到的任何程序。因为我们已经使用了'OR'。
python -m pytest -k 'test_password_valid or test_no_configuration'
假设上面两个实际上是正确的,将运行2个测试。
情况2:现在有一个不正确的名字和另一个正确的名字。
python -m pytest -k 'test_password_validzzzzzz or test_no_configuration'
只有一个被找到并运行。
案例3:如果您想运行所有提到的测试或None,那么使用AND
python -m pytest -k 'test_password_valid and test_no_configuration'
如果正确或不正确,两者都将运行。
案例4:只在一个文件夹中运行测试:
python -m pytest test/project1/integration -k 'test_password_valid or test_no_configuration'
案例5:只从一个文件运行测试。
python -m pytest test/integration/test_authentication.py -k 'test_password_expiry or test_incorrect_password'
用例6:运行除匹配之外的所有测试。
python -m pytest test/integration/test_authentication.py -k 'not test_incorrect_password'