在寫接口或功能自動化case的時候,會遇到一些case有前後執行順序的場景。好比:註冊->登錄,先調用註冊接口在數據庫裏面生成用戶名和密碼,而後使用登錄接口驗證登錄。html
在pytest裏,若是註冊和登錄分別是兩個testcase,默認執行執行順序是從前到後的。python
有一個pytest的測試case用例:test_login.py數據庫
#/usr/bin/env python3 import pytest def test_login(): assert True def test_reg(): assert True
運行:pytest test_login.pyide
能夠看到test_login在test_reg以前執行,這和咱們的指望相悖。函數
解決方法:測試
1. 能夠在編寫testcase腳本時候,把test_reg放到test_login前面。編碼
2.使用pytest-ordering插件url
第一種方式屬於硬編碼的方式,在後續維護過程當中很容易出現維護的混亂性(好比後續有人要新加case和註冊登陸相關,可能改起來就比較麻煩了)。spa
第二種的好處就是能夠經過pytest-ordering插件,使用裝飾器的方式寫清楚這種前後順序,方便閱讀和維護。.net
sudo pip3(pip) install 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