Pytest系列(5) – 測試用例執行後的幾種狀態
- 2020 年 4 月 7 日
- 筆記
如果你還想從頭學起Pytest,可以看看這個系列的文章哦!
https://www.cnblogs.com/poloyy/category/1690628.html
用例執行狀態
用例執行完成後,每條用例都有自己的狀態,常見的狀態有
- passed:測試通過
- failed:斷言失敗
- error:用例本身寫的品質不行,本身程式碼報錯(譬如:fixture不存在,fixture裡面有報錯)
- xfail:預期失敗,加了 @pytest.mark.xfail()
error的栗子一:參數不存在
def pwd(): print("獲取用戶名") a = "yygirl" assert a == "yygirl123" def test_1(pwd): assert user == "yygirl"
為啥是error
pwd參數並不存在,所以用例執行error
error的栗子二:fixture有錯
@pytest.fixture() def user(): print("獲取用戶名") a = "yygirl" assert a == "yygirl123" return a def test_1(user): assert user == "yygirl"
為啥是error?
- fixture裡面斷言失敗,所以fixture會報錯;
- 因為test_1調用了錯誤的fixture,所以error表示用例有問題
failed的栗子一
@pytest.fixture() def pwd(): print("獲取密碼") a = "yygirl" return a def test_2(pwd): assert pwd == "yygirl123"
為啥是failed
因為fixture返回的變數斷言失敗
failed的栗子二
@pytest.fixture() def pwd(): print("獲取密碼") a = "polo" return a def test_2(pwd): raise NameError assert pwd == "polo"
為啥是failed
因為用例執行期間拋出了異常
總結
- 測試用例的程式碼有異常,包括主動拋出異常或程式碼有異常,都算failed
- 當測試用例調用的fixture有異常,或傳入的參數有異常的時候,都算error
- 如果一份測試報告中,error的測試用例數量越多,說明測試用例品質越差
xfail的栗子
# 斷言裝飾器 @pytest.mark.xfail(raises=ZeroDivisionError) def test_f(): 1 / 0
為啥是xfail
程式碼有異常,且和raised的異常類匹配,所以是xfail(算測試通過的一種,表示符合期望捕捉到的異常),並不算failed
如果和raised的異常類不匹配,則是failed