Pytest學習(五) - Pytest的用例執行測試后的常見報錯


常見的狀態

  • passed:測試通過
  • failed:斷言失敗
  • error:代碼編寫上的錯誤
  • xfail:預期失敗,加了 @pytest.mark.xfail()

測試通過的栗子(passed)

示例代碼如下:

# -*- coding: utf-8 -*-
# @Time    : 2020/10/25 17:17
# @Author  : longrong.lang
# @FileName: test_pass.py
# @Software: PyCharm
# @Cnblogs :https://www.cnblogs.com/longronglang
'''
測試通過的例子
'''
import pytest


@pytest.fixture()
# 定義一個測試數據
def data():
    return 1


def test_pass(data):
    assert 1 == data


if __name__ == '__main__':
    pytest.main(["-q", "test_pass.py"])

輸出結果:

斷言失敗的栗子(failed)

1、正常斷言失敗

示例代碼如下:

# -*- coding: utf-8 -*-
# @Time    : 2020/10/25 17:26
# @Author  : longrong.lang
# @FileName: test_failed.py
# @Software: PyCharm
# @Cnblogs :https://www.cnblogs.com/longronglang
'''
斷言失敗的栗子
'''
import pytest


@pytest.fixture()
def data():
    return 'python'


def test_failed(data):
    assert 'test' in data


if __name__ == '__main__':
    pytest.main(["-q", "test_failed.py"])

輸出結果:

2、測試方法里主動拋出異常了

示例代碼如下:

# -*- coding: utf-8 -*-
# @Time    : 2020/10/25 17:26
# @Author  : longrong.lang
# @FileName: test_failedException.py
# @Software: PyCharm
# @Cnblogs :https://www.cnblogs.com/longronglang
'''
斷言失敗的栗子
'''
import pytest


@pytest.fixture()
def data():
    return 'python'


def test_failed(data):
    # 這塊隨便拋出一個異常了
    raise IOError
    assert 'py' in data


if __name__ == '__main__':
    pytest.main(["-q", "test_failedException.py"])

輸出結果:

代碼編寫上的錯誤(error)

1、fixture中有錯

示例代碼如下:

# -*- coding: utf-8 -*-
# @Time    : 2020/10/25 17:34
# @Author  : longrong.lang
# @FileName: test_error.py
# @Software: PyCharm
# @Cnblogs :https://www.cnblogs.com/longronglang
'''
代碼編寫上的錯誤栗子
'''
import pytest


@pytest.fixture()
def data():
    str = 'python'
    assert 'test' in str
    return str


def test_error(data):
    assert data == 'python'


if __name__ == '__main__':
    pytest.main(["-q", "test_error.py"])

輸出結果:

fixture里面斷言失敗,導致fixture標記的data會報錯,使得data沒有返回值;而test_error調用了錯誤的fixture,所以error表示代碼寫的有問題了

2、參數不存在

示例代碼如下:

# -*- coding: utf-8 -*-
# @Time    : 2020/10/25 17:34
# @Author  : longrong.lang
# @FileName: test_errorNoParam.py
# @Software: PyCharm
# @Cnblogs :https://www.cnblogs.com/longronglang
'''
代碼編寫上的錯誤栗子
'''
import pytest


def data():
    str = 'python'
    return str


def test_error(data):
    assert data == 'python'


if __name__ == '__main__':
    pytest.main(["-q", "test_errorNoParam.py"])

輸出結果:

data參數並不存在,找不到自然就error了

總結:

  • 測試用例的代碼有異常,包括主動拋出異常或代碼有異常,都算failed
  • 當測試用例調用的fixture有異常,或傳入的參數有異常的時候,都算error
  • 如果一份測試報告中,error的測試用例數量越多,說明測試用例質量越差

預期失敗的栗子(xfail)

這個和testng的異常測試差不多了,就是斷言預期的異常,可以測試是否需要代碼拋出異常或不拋出。
示例代碼如下:

# -*- coding: utf-8 -*-
# @Time    : 2020/10/25 17:51
# @Author  : longrong.lang
# @FileName: test_xfail.py
# @Software: PyCharm
# @Cnblogs :https://www.cnblogs.com/longronglang
'''
預期失敗栗子
'''
import pytest

# 斷言裝飾器
@pytest.mark.xfail(raises=ZeroDivisionError)
def test_xfail():
    var = 1 / 0
    print(var)

輸出結果:

代碼有異常,且和raised的異常類匹配,所以是xfail(算測試通過的一種,表示符合期望捕捉到的異常),並不算failed

如果和raised的異常類不匹配,則是failed

系列參考文章:

https://www.cnblogs.com/poloyy/category/1690628.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM