Pytest框架 — 14、Pytest的标记(五)(控制测试用例执行顺序)

目录
  • 1、前言
  • 2、使用
  • 3、标记最先执行和最后执行

1、前言

在执行自动化测试时,我们通常都希望能够控制执行测试用例的顺序。

  • unittest
    框架中默认按照ACSII码的顺序加载测试用例并执行,顺序为:
    0~9
    A~Z
    a~z
    ,测试目录、测试模块、测试类、测试方法/测试函数都按照这个规则来加载测试用例。
  • pytest
    测试框架中,默认从上至下执行,也可以通过
    pytest-ordering
    插件来自定义执行顺序。

安装方式:

pip install pytest-ordering

2、使用

直接在要控制顺序的测试用例上使用

@pytest.mark.order(order=顺序值)
装饰器来标记执行顺序。
示例:

 import pytest

@pytest.mark.run(order=4)
def test_pay():
print("第四步:支付订单")

@pytest.mark.run(order=2)
def test_add_cart():
print("第二步:加入购物车")

@pytest.mark.run(order=1)
def test_login():
print("第一步:登录")

@pytest.mark.run(order=3)
def test_place_order():
print("第三步:下订单")

"""
执行结果
mark/ordering/pytest_ordering.py::test_login 第一步:登录
PASSED
mark/ordering/pytest_ordering.py::test_add_cart 第二步:加入购物车
PASSED
mark/ordering/pytest_ordering.py::test_place_order 第三步:下订单
PASSED
mark/ordering/pytest_ordering.py::test_pay 第四步:支付订单
PASSED
"""

注意:

  1. @pytest.mark.run()
    必须以
    order=顺序值
    这种形式传递顺序值
  2. order
    值可以为正数或负数,但遵从值越小优先级越高原则
  3. order
    值混用正负数时,采用正数的优先级更高
  4. 没有标记顺序的用例优先级高于标记为负数的用例

3、标记最先执行和最后执行

可以通过

@pytest.mark.firt
@pytest.mark.last
来标记用例的最先执行和最后执行。
示例:

 import pytest

@pytest.mark.first
def test_login():
print("登录")

@pytest.mark.last
def test_logout():
print("注销")

def test_place_order():
print("下单")

def test_pay():
print("支付")

"""
执行结果
mark/ordering/order_first_and_last.py::test_login 登录
PASSED
mark/ordering/order_first_and_last.py::test_place_order 下单
PASSED
mark/ordering/order_first_and_last.py::test_pay 支付
PASSED
mark/ordering/order_first_and_last.py::test_logout 注销
PASSED
"""

提示:
当我们在使用

@pytest.mark.first
@pytest.mark.last
装饰器时,
python
会把
first
last
当成自定义标记,从而出现如下提示

 PytestUnknownMarkWarning: Unknown pytest.mark is this a typo?  You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/mark.html
@pytest.mark.last

此时我们可以在命令行中添加

-p no:warnings
来屏蔽错误提示。

标签: python

添加新评论