Python pytest参数化类方法执行顺序

Python pytest参数化类方法执行顺序,python,pytest,Python,Pytest,例如,我有一个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] tes

例如,我有一个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]

e、 g.使用第一个参数运行所有类方法,然后使用第二个参数运行。

您不需要在
py.test中编写类:

@pytest.mark.parametrize("param",[1,2])
def test_1(param):
    pass

@pytest.mark.parametrize("param",[1,2])
def test_2(param):
    pass

将按所需顺序运行测试。

在您的案例中,我们讨论的是将不同参数应用于不同测试的顺序。Pytest使用所有参数运行每个测试,然后运行下一个测试,依此类推

如果出于某些原因,您需要使用相同的参数运行两个测试,然后再使用其他参数运行它们等等,我认为这意味着实际上这只是一个带有参数的复杂测试,您不应该将其作为两个单独的pytest测试来编写

一般情况下,您可以使用来对测试本身进行排序。 或者自己在pytesthook中实现相同的功能

pytest_collection_modifyitems(session, config, items)
(重新排列项目)

但是,期望测试以某种特定的顺序运行是不好的做法。 他们应该是无国籍和独立的。 毕竟,将来可能需要并行测试执行或使用测试的某些子集。 在任何情况下,如果测试依赖于执行顺序,那么它们很难维护


如果您只需要一些有序的结果,请使用报告工具(例如)。

我认为不可能选择测试的执行顺序,但我知道强制测试的执行顺序是一种不好的做法。测试不应该受执行顺序的影响,因此不应该有任何理由强制执行它们的顺序。您是否尝试了您的代码?它运行第一个测试用例两次,然后运行第二个测试用例2次。这就是参数化的目的。请同时检查原始代码。