1、前言 在執行自動化測試時,我們通常都希望能夠控制執行測試用例的順序。 在unittest框架中預設按照ACSII碼的順序載入測試用例並執行,順序為:0~9、A~Z、a~z,測試目錄、測試模塊、測試類、測試方法/測試函數都按照這個規則來載入測試用例。 在pytest測試框架中,預設從上至下執行,也 ...
目錄
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
來屏蔽錯誤提示。