2

嗨,我正在使用“ http://pytest-ordering.readthedocs.org/en/develop/ ”,当我使用如下装饰器时,订单工作正常,

import pytest

@pytest.mark.run(order=3)
def test_three():
    assert True

@pytest.mark.run(order=1)
def test_four():
    assert True

@pytest.mark.run(order=2)
def test_two():
    assert True

现在说我有两个文件 test_example1.py 和第二个文件 test_example2.py

在这种情况下,如果我使用此排序,则首先执行来自 file1 和 file2 的 order=1,然后开始在两个文件中执行 order=2

有没有办法指定只在当前正在执行的文件中说订单检查?

4

2 回答 2

2

我遇到了同样的问题。在这里我开始使用pytest-order而不是pytest-ordering因为pytest-ordering不再维护。

将所有标记从 更改runorder,例如从更改@pytest.mark.run(order=1)@pytest.mark.order(1)

现在使用以下命令执行测试:

pytest -v --order-scope=module

测试现在将在每个文件中单独排序。

参考https ://pytest-dev.github.io/pytest-order/dev/configuration.html#order-scope

于 2021-05-05T04:27:27.573 回答
1

即使文件中有两个类并且我们已经为这两个类中的函数定义了顺序,我也会看到这个问题。

例子:

class Test_abc:

    @pytest.mark.run(order=1)
    def test_func_a(self):
        print 'class 1 test 1'
    @pytest.mark.run(order=1)
    def test_func_b(self):
        print 'class 1 test 2'
    @pytest.mark.run(order=1)
    def test_func_c(self):
        print 'class 1 test 3'

class Test_bcd:

    @pytest.mark.run(order=1)
    def test_func_ab(self):
        print 'class 2 test 1'
    @pytest.mark.run(order=1)
    def test_func_bc(self):
        print 'class 2 test 2'
    @pytest.mark.run(order=1)
    def test_func_cd(self):
        print 'class 2 test 3'

输出如下:

class 1 test 1
class 2 test 1
class 1 test 2
class 2 test 1
class 1 test 3
class 2 test 1

我做了这样的事情来解决这个问题

@pytest.mark.run(order=1)
class Test_abc:
    def test_func_a(self):
        print 'class 1 test 1'
    def test_func_b(self):
        print 'class 1 test 2'
    def test_func_c(self):
        print 'class 1 test 3'


@pytest.mark.run(order=2)
class Test_bcd:

    def test_func_ab(self):
        print 'class 2 test 1'

    def test_func_bc(self):
        print 'class 2 test 2'

    def test_func_cd(self):
        print 'class 2 test 3'

输出:

class 1 test 1
class 1 test 2
class 1 test 3
class 2 test 1
class 2 test 2
class 2 test 3

所以,谈到你的问题,我认为你可以尝试这样的事情。我知道这不是您问题的完美答案,但您可以使用此解决方案即兴发挥。我尝试对文件(和文件名)执行此操作。似乎 pytest 编译器被编程为按顺序获取数字或字母。因此,您可能需要将文件命名为test_1_foo.pyandtest_2_bar.pytest_a.pyandtest_b.py以按顺序执行它们。但我个人觉得第一种方法更好。

于 2016-09-30T07:10:26.840 回答