1、關於pytest的外掛程式說明
2.assume外掛程式使用介紹
assume 外掛程式 安裝方法:pip install pytest-assume(需要有 python 環境和 pytest 環境)
assume:assume 外掛程式就是乙個斷言工具,和 pytest 自帶的斷言區別就在於:斷言失敗不會阻塞後面的用例
demo:
import time
import pytest
import random
# 普通斷言
def func(x):
return x + 1
def test_answer():
assert func(3) == 5
assert func(3) == 5
assert func(3) == 5
普通的 assert 斷言,在第一條用例出現錯誤時,就不會繼續執行。
# assume斷言
def test_answer():
pytest.assume(3==3)
pytest.assume(4 == 3)
pytest.assume(5 == 3)
pytest.assume(6 == 3)
assume 斷言和 assert 斷言唯一不同的地方就在於,即使第一條用例未通過,也會繼續往下執行
適用場景:
如果,用例需要順序執行,則不推薦使用 assume 斷言。假設,b用例需要a用例通過後才能繼續操作,如果使用 assume 斷言,則不管a用例是否通過,都會繼續執行b用例。這樣的結果是不符合我們自動化測試的預期的。所以,如果是順序執行的用例,還是使用 assert 斷言比較好。
但是,有另外一種需求。比方說:對整個 web 頁面進行自動化操作,功能與功能之間並沒有很多聯絡,那此時就必須使用 assume 斷言。可以設想,如果因為某個頁面元素沒有載入出來,導致該用例失敗,則後面的用例也無法再繼續進行測試。解決辦法只有重新再跑一遍,這樣的做法很浪費時間資源。
所以,兩種斷言方式,選擇哪一種,看個人具體需求。用例與用例之間,沒有依賴關係的,則使用 assume 斷言,有依賴關係的,使用 assert 斷言
3.rerunfailures外掛程式使用介紹
rerunfailures 外掛程式 安裝方法:pip install pytest-rerunfailures(需要有 python 環境和 pytest 環境)
rerunfailures:rerunfailures 外掛程式,顧名思義,失敗重跑。在做ui自動化當中,最常見的問題就是頁面載入超時。如果因為載入超時而定位不到元素,最後導致用例失敗,這用例失敗得很冤。所以我們需要再給用例一次機會,當用例執行成功後,即使還有剩餘執行次數,也不會再繼續執行。簡單的說:執行結果 == false,rerunfailures生效,執行結果 == true,rerunfailures失效
demo:
import time
import pytest
import random
class testrerun():
@pytest.mark.flaky(reruns=10)
def test_random(self):
pytest.assume((random.randint(0,3)+4)==10)
def test_random2(self):
'''不加mark 命令列中新增:--reruns 5
:return:
'''pytest.assume((random.randint(0,4)+6)==5)
@pytest.mark.flaky(reruns=6, reruns_delay=2)
def test_example(self):
print(3)
assert random.choice([true, false])
1、在修飾符內傳參@pytest.mark.flaky(reruns=10)
這是給下面的用例宣告了,如果該用例失敗了,可以再執行,總共可重複執行10次,10次過後還失敗,則不再允許重複執行。
2、沒有修飾符
如果沒有修飾符,一樣是可以讓用例重複執行的。只需要在命令列中加入 --reruns n 即可。例如:pytest --reruns 5:這宣告了,所有用例,如果失敗了,可以再執行,總共可重複執行10次,10次過後還失敗,則不再允許重複執行。但使用命令列宣告的話,需要注意一點:該宣告是全域性生效,也就是說,所有用例執行失敗,都可以重複執行5遍。
3、指定重試時間@pytest.mark.flaky(reruns=6, reruns_delay=2)
如果在修飾符內傳參: reruns_delay=2,則說明指定了重試時間。每次失敗後,間隔 2 再次執行
4.ordering外掛程式使用介紹
ordering 外掛程式 安裝方法:pip install pytest-ordering(需要有 python 環境和 pytest 環境)
ordering:ordering 外掛程式在除錯中使用較多。如果我們的用例有依賴性,並且是順序執行的,使用常規方法除錯會比較麻煩。舉個例子:後面所有的用例都必須依賴a用例,只有當a用例執行通過,後面的所有用例才能執行。但除了a用例外,其他用例並沒有依賴關係,每次除錯都需要重頭到位跑一遍,這個過程太浪費時間資源,所以就需要使用 ordering 外掛程式指定用例執行順序。簡單的說,就是打亂原先的順序,讓用例照著我們想要的順序去執行。
demo:
import time
import pytest
import random
[email protected](order=2)
def test_order1():
print("first test")
assert true
@pytest.mark.run(order=1)
def test_order2():
print("second test")
assert true
用法其實超級簡單,就在修飾符中傳參 order=n 即可。ordering 外掛程式的場景在介紹中已經說的很明白了,個人可根據需求,判斷是否需要使用 ordering 外掛程式。
5.總結
pytest還有很多很多的外掛程式,但是使用這些外掛程式的時候,建議做一些封裝工作。如果沒有封裝直接呼叫,時間長了,會造成**沉冗。外掛程式雖好,但建議合理使用。
以後發現更多優秀的外掛程式,本人會繼續分享。
pytest 常用外掛程式
雖然pytest給我們提供了很多的功能,但是有些功能還是沒有,而pytest的外掛程式可以滿足我們的需求,比如用例失敗重跑,統計 覆蓋率等等功能。pytest sugar外掛程式可以輸出彩色字元。它也能在執行過程中顯示錯誤和失敗用例的堆疊回溯資訊,而且還能在螢幕右側顯示進度條。安裝pip insta...
pytest04 pytest常用外掛程式
02 生成測試報告 外掛程式 安裝 pip install pytest html 生成測試報告 pytest html 測試報告路徑 html03 在pytest.ini中加入報告生成命令 addopts s html test hello.html 直接執行 pytest即可 如果這裡加上了 s...
pytest (五) pytest中的斷言
pytest 的斷言報告,也很豐富,和詳情,比如 import pytest def test set comparison set1 set 1308 set2 set 8035 assert set1 set2 執行一下 有時候,我們需要對一些異常丟擲作斷言,可以用pytest.raises 比...