是否有办法从文件中选择要运行的pytest测试? 例如,文件foo.txt包含要执行的测试列表:

tests_directory/foo.py::test_001
tests_directory/bar.py::test_some_other_test

或者,是否有一种方法可以从pytest的不同目录中选择多个测试,测试名称中没有公共模式?

Pytest -k <pattern>允许单个模式。

一种选择是做尿检。针对每个测试进行标记,但我的要求是运行来自不同文件的不同测试组合。

是否有办法为每个模式指定多个模式和一个测试文件名?

Or

是否有一种方法可以在文件中指定准确的测试路径,并将该文件作为输入提供给pytest?

Or

是否有可以用于此目的的钩子函数?


当前回答

Try:

pytest path/file_test.py::test_name

像其他人建议的那样使用-k将匹配具有该子字符串的任何测试,而不仅仅是特定的测试。

其他回答

指定测试/选择测试

Pytest支持多种从命令行运行和选择测试的方法。

在模块中运行测试

pytest test_mod.py

在目录中运行测试

pytest测试/

按关键字表达式运行测试

pytest -k“MyClass而不是方法”

这将运行包含与给定字符串表达式匹配的名称的测试,其中可以包括使用文件名、类名和函数名作为变量的Python操作符。上面的例子将运行TestMyClass。test_something而不是TestMyClass.test_method_simple。

按节点id运行测试

每个收集的测试都被分配一个唯一的nodeid,它由模块文件名组成,后面跟着说明符,比如类名、函数名和参数化参数,用::字符分隔。

在一个模块中运行一个特定的测试:

pytest test_mod.py:: test_func

另一个在命令行中指定测试方法的例子:

pytest test_mod.py: TestClass:: test_method

通过标记表达式运行测试

Pytest -m慢

将运行所有带有@pytest.mark标记的测试。缓慢的装饰。

有关更多信息,请参阅标记。

从包中运行测试

Pytest——pyargs pkg.testing

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

来源:https://docs.pytest.org/en/latest/usage.html specifying-tests-selecting-tests

也许使用pytest_collect_file()钩子,您可以解析.txt或.yaml文件的内容,其中指定了您想要的测试,并将它们返回到pytest核心。

pytest文档中给出了一个很好的示例。我想这就是你要找的。

例如,你有一个名为test.py的文件。在这个文件中,您有一个名为TestSomeService的类。这个类有两个函数,分别是test_service1和test_service2。

现在要运行特定的功能测试,您可以这样做

pytest test . py: 2008: TestSomeService test_service1 pytest test . py: 2008: TestSomeService test_service2

运行特定的类

pytest test.py:: TestSomeService

方法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'

如果你在两个不同的类中有相同的方法名,你只想运行其中一个,这是可行的:

pytest tests.py -k "TestClassName and test_method_name"