例如,我有一个像这样的pytest文件:
@pytest.mark.parametrize("param",[1,2])
class TestTest():
def test_1(self, param):
pass
def test_2(self,param):
pass
当我将其作为输出运行时,我得到:
test_tmp.py::TestTest::test_1[1]
test_tmp.py::TestTest::test_1[2]
test_tmp.py::TestTest::test_2[1]
test_tmp.py::TestTest::test_2[2]
这不是我期望的顺序。有没有一种方法可以按此顺序运行测试:
test_tmp.py::TestTest::test_1[1]
test_tmp.py::TestTest::test_2[1]
test_tmp.py::TestTest::test_1[2]
test_tmp.py::TestTest::test_2[2]
例如使用第一个参数运行所有类方法,然后使用第二个参数运行。
答案 0 :(得分:0)
您无需在py.test
中编写类:
@pytest.mark.parametrize("param",[1,2])
def test_1(param):
pass
@pytest.mark.parametrize("param",[1,2])
def test_2(param):
pass
将按所需顺序运行测试。
答案 1 :(得分:0)
在您的情况下,我们正在谈论将不同参数应用于不同测试的顺序。 Pytest使用所有参数运行每个测试,然后执行下一个测试,依此类推。
如果出于某种原因需要使用相同的参数运行两个测试,然后再使用其他参数运行它们,依此类推,我认为这意味着实际上这只是一个带有参数的复杂测试,您不应编写作为两个单独的pytest测试。
通常,您可以使用pytest-ordering自己订购测试。 或在pytest hook
中自己实现相同的功能pytest_collection_modifyitems(session, config, items)
(重新排列项目)。
但是,这种糟糕的做法是期望测试将以某种特定的顺序运行。 他们应该是无国籍和独立的。 毕竟将来可能需要并行测试执行或使用测试的某些子集。 无论如何,如果测试取决于执行顺序,那么它们将很难维护。
如果您只需要一些有序的结果,请使用报告工具(例如yandex allure)。