标签:last 14 Pytest pytest mark ordering 测试用例 test order
目录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
"""
注意:
@pytest.mark.run()
必须以order=顺序值
这种形式传递顺序值order
值可以为正数或负数,但遵从值越小优先级越高原则- 当
order
值混用正负数时,采用正数的优先级更高 - 没有标记顺序的用例优先级高于标记为负数的用例
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
来屏蔽错误提示。
标签:last,14,Pytest,pytest,mark,ordering,测试用例,test,order 来源: https://www.cnblogs.com/qishuaiRisen/p/16608259.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。