pytest-ordering:指定pytest的case運行順序的插件

背景

在寫接口或功能自動化case的時候,會遇到一些case有先後執行順序的場景。比如:註冊->登陸,先調用註冊接口在數據庫裏面生成用戶名和密碼,然後使用登陸接口驗證登陸。

在pytest裏,如果註冊和登陸分別是兩個testcase,默認執行執行順序是從前到後的。

例子

有一個pytest的測試case用例:test_login.py

#/usr/bin/env python3
import pytest
def test_login():
    assert True

def test_reg():
    assert True

運行:pytest test_login.py

可以看到test_login在test_reg之前執行,這和我們的期望相悖。

解決方法:

1. 可以在編寫testcase腳本時候,把test_reg放到test_login前面。

2.使用pytest-ordering插件

第一種方式屬於硬編碼的方式,在後續維護過程中很容易出現維護的混亂性(比如後續有人要新加case和註冊登錄相關,可能改起來就比較麻煩了)。

第二種的好處就是可以通過pytest-ordering插件,使用裝飾器的方式寫清楚這種先後順序,方便閱讀和維護。

pytest-ordering使用

安裝pytest-ordering

sudo pip3(pip) install pytest-ordering

使用pytest-ordering修飾符

1. 通過指定序數詞指定,比如first,second,third...second-to-last(倒數第二), last(最後)。這種含義比較直接(不過容易寫錯單詞)

#/usr/bin/env python3
import pytest

@pytest.mark.run('second')
def test_login():
    assert True

@pytest.mark.run('first')
def test_reg():
    assert True

2. 通過指定序號指定,比如1,2,3...-2(倒數第二), -1(最後)。這種寫錯的機率下,也比較直接。

#/usr/bin/env python3
import pytest

@pytest.mark.run(order=2)
def test_login():
    assert True

@pytest.mark.run(order=1)
def test_reg():
    assert True

3. 通過指定函數名指定,比如test_login和test_order都要在test_reg後執行,這種用法就比較適合此類場景。

#/usr/bin/env python3
import pytest

@pytest.mark.run(after='test_reg')
def test_login():
    assert True

def test_reg():
    assert True

@pytest.mark.run(after='test_reg')
def test_order():
    assert True

以上就是pytest-ordering插件的三種寫法,如果有任何疑問和建議可以留言~

博主:測試生財

座右銘:專注測試與自動化,致力提高研發效能;通過測試精進完成原始積累,通過讀書理財奔向財務自由。

csdn:https://blog.csdn.net/ccgshigao

博客園:https://www.cnblogs.com/qa-freeroad/

51cto:https://blog.51cto.com/14900374


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章