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

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

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

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

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

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

Or

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

Or

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


当前回答

例如,你有一个名为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

其他回答

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

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

你可以使用-k选项来运行不同模式的测试用例:

py.test tests_directory/foo.py tests_directory/bar.py -k 'test_001 or test_some_other_test'

这将运行名称为test_001和test_some_other_test的测试用例,取消选择其余的测试用例。

注意:这将选择以test_001或test_some_other_test开头的任何测试用例。例如,如果您有测试用例test_0012,它也会被选中。

例如,你有一个名为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

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

pytest tests.py -k "TestClassName and test_method_name"

假设测试名称是唯一的,你必须删除测试文件的名称:

cut -d : -f 3 foo.txt > FAILED_TESTS.txt

正如其他人指出的那样,使用-k,但你必须将文件的内容(即测试名称列表)作为单个字符串传递:

pytest -k "$(awk '$1=$1' RS= OFS=' or '  FAILED_TESTS.txt)"

Awk将用分隔符替换新行,这样测试名称就会以pytest期望的格式连接起来。