前言

  安静以前出去面试的时候遇到过这样一个问题:你怎么保证你的自动化用例的执行顺序。当时安静的回答是用例通过数字的形式进行标记,因为unittest执行是按照ascII码的顺序执行的。当时回答比较low。那我们看看如果用pytest怎么控制用例的执行顺序。

 

pytest-ordering

pytest-ordering属于pytest的一个插件,它可以控制pytest的执行顺序。

安装:  pip install pytest-ordering 

源码:https://github.com/ftobia/pytest-ordering

pytest执行顺序

pytest的执行顺序是根据代码编写的顺序进行执行的。

import pytest

class Test01():
    
    def test_02(self):
        print('n---用例02---')

    def test_01(self):
        print('n---用例01---')
    
    def test_03(self):
        print('n---用例03---')

if __name__ == '__main__':
    pytest.main(['-vs'])

通过下图可以看出来,我们执行的顺序是先执行了用例2,然后用例1,最后用例3,所以说pytest的执行顺序是默认编写的顺序来执行的。

 

定制用例执行顺序

如果在特定一些自动化中,想要定制用例的操作步骤来执行,这个时候就用到了上面介绍的插件pytest-ordering来执行,具体插件怎么用呢?

这里还是需要前面介绍的mark的方法来执行。 @pytest.mark.run(order=X) x:表示执行顺序 

import pytest

class Test01():

    @pytest.mark.run(order=3)
    def test_02(self):
        print('n---用例02---')

    @pytest.mark.run(order=2)
    def test_01(self):
        print('n---用例01---')

    @pytest.mark.run(order=1)
    def test_03(self):
        print('n---用例03---')

if __name__ == '__main__':
    pytest.main(['-vs'])

通过下图可以看出来,用例已经按照我们的要求,先执行用例3,在执行用例1,最后执行用例2的方法来的

 

这里需要注意的是,如果你在那个用例上面没有添加执行顺序要求的话,他会先执行带有标记的用例,然后根据未标记的用例顺序进行执行

import pytest

class Test01():

    def test_02(self):
        print('n---用例02---')

    @pytest.mark.run(order=2)
    def test_01(self):
        print('n---用例01---')

    @pytest.mark.run(order=1)
    def test_03(self):
        print('n---用例03---')

    def test_04(self):
        print('n---用例04---')


if __name__ == '__main__':
    pytest.main(['-vs'])

这里执行顺序:先执行用例3然后在是用例1,最后按照顺利顺序执行用例2和用例4。

 

 

好了,pytest的用例执行顺序,就是这么简单,只要通过mark的方法进行标记就行了,但是千万不要忘记了需要安装插件

 

内容来源于网络如有侵权请私信删除