pytest用例执行顺序
- pytest默认按字母顺序去执行的(小写英文—>大写英文—>0-9数字)
- 用例之间的顺序是文件之间按照ASCLL码排序,文件内的用例按照从上往下执行。
- setup_module->setup_claas->setup_function->testcase->teardown_function->teardown_claas->teardown_module
- 可以通过第三方插件pytest-ordering实现自定义用例执行顺序
pytest-ordering—指定用例的运行顺序
pytest默认是按照字母来执行执行顺序,由于多接口之间存在值引用的关系,此时就需要执行case的执行顺序。
pytest控制case执行顺序的插件是pytest-ordering,直接用pip安装。
1.安装依赖包
pip install pytest-ordering
2.pytest-ordering的使用
通过装饰器的方法来控制case的执行顺序
1.方式一:
- 第一个执行: @ pytest.mark.run('first')
- 第二个执行: @ pytest.mark.run('second')
- 倒数第二个执行: @ pytest.mark.run('second_to_last')
- 最后一个执行: @ pytest.mark.run('last')
2.方式二:
- 第一个执行: @ pytest.mark.first
- 第二个执行: @ pytest.mark.second
- 倒数第二个执行: @ pytest.mark.second_to_last
- 第四个执行: @pytest.mark.last
3.方式三:
第一个执行: @ pytest.mark.run(order=1)
第二个执行: @ pytest.mark.run(order=2)
倒数第二个执行: @ pytest.mark.run(order=-2)
最后一个执行: @ pytest.mark.run(order=-1)
执行优先级:
0>较小的正数>较大的正数>无标记>较小的负数>较大的负数
导入 pytest
@ pytest.mark.run (order = -2 )
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
@ pytest.mark.run (order = 1 )
def test_one ():
assert True
$ py.test test_foo.py -vv
=============================测试会话开始=================== ============
test_foo.py:17:test_one通过
test_foo.py:12:test_two通过
test_foo.py:3:test_three通过
test_foo.py:7:test_four通过
============================ 4 = 0.02秒================== =========
4.方式四:
导入 pytest
@ pytest.mark.run (after = 'test_second' )
def test_third ():
assert True
def test_second ():
assert True
@ pytest.mark.run (before = 'test_second' )
def test_first ():
assert True
$ py.test test_foo.py -vv
=============================测试会话开始=================== ============
test_foo.py:11:test_first通过
test_foo.py:7:通过了test_second
test_foo.py:4:test_third通过
============================ 4 = 0.02秒================== =========