代码之家  ›  专栏  ›  技术社区  ›  Naggappan Ramukannan

pytest排序的插件不能与多个文件组合使用

  •  2
  • Naggappan Ramukannan  · 技术社区  · 8 年前

    嗨,我正在使用“ 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

    在这种情况下,如果我使用这种排序,那么首先执行文件1和文件2的order=1,然后在两个文件中都开始执行order=2

    是否有任何方法可以指定只在当前正在执行的文件中执行订单检查?

    2 回复  |  直到 8 年前
        1
  •  3
  •   MrBean Bremen    3 年前

    我也面临同样的问题。在这里我开始使用 pytest-order 而不是 pytest-ordering 因为 pytest-ordering 不再保持。

    更改中的所有标记 run order ,例如来自 @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

        2
  •  1
  •   manoj prashant k    8 年前

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

    例子:

    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.py test_2_bar.py test_a.py test_b.py 以便按顺序执行它们。 但我个人觉得第一种方式更好。