前言
安静以前出去面试的时候遇到过这样一个问题:你怎么保证你的自动化用例的执行顺序。当时安静的回答是用例通过数字的形式进行标记,因为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(' ---用例02---') def test_01(self): print(' ---用例01---') def test_03(self): print(' ---用例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(' ---用例02---') @pytest.mark.run(order=2) def test_01(self): print(' ---用例01---') @pytest.mark.run(order=1) def test_03(self): print(' ---用例03---') if __name__ == '__main__': pytest.main(['-vs'])
通过下图可以看出来,用例已经按照我们的要求,先执行用例3,在执行用例1,最后执行用例2的方法来的
这里需要注意的是,如果你在那个用例上面没有添加执行顺序要求的话,他会先执行带有标记的用例,然后根据未标记的用例顺序进行执行
import pytest class Test01(): def test_02(self): print(' ---用例02---') @pytest.mark.run(order=2) def test_01(self): print(' ---用例01---') @pytest.mark.run(order=1) def test_03(self): print(' ---用例03---') def test_04(self): print(' ---用例04---') if __name__ == '__main__': pytest.main(['-vs'])
这里执行顺序:先执行用例3然后在是用例1,最后按照顺利顺序执行用例2和用例4。
好了,pytest的用例执行顺序,就是这么简单,只要通过mark的方法进行标记就行了,但是千万不要忘记了需要安装插件