環境搭建
- 使用pip安裝pytest:pip install pytest
- 原生態報告模板:pip install pytest-html
pytest框架特點
- 是python的第三方單元測驗框架,比unittest更簡潔、高效
- 支持315種以上的插件,同時兼容unittest
- 在unittest框架遷移到pytest框架時,不需要重寫代碼
?
命名規則
- py檔案應當以test_開頭,或以_test結尾來命名
- 類必須以Test開頭,且類中不能有__init__初始化方法
- 方法或函式必須以test_開頭
- 斷言必須使用assert
- project下一般創建: lib包(放公共的封裝類)、data檔案夾(放測驗檔案、檔案等)、test_case包(放測驗用例)、report檔案夾(放報告)
?
簡單示例
def test_login01(self):
assert 1 + 1 == 2
#執行測驗檔案的固定格式,無需實體化類、或呼叫函式就可執行標準命名的類、函式
if __name__ == '__main__':
pytest.main(['test_func01.py'])
?
函式
- setup_class ??在整個類中,最先且只執行一次
- teardown_class ?在整個類中,最后且只執行一次
其他:module、method、fuction也有類似函式,使用方法也類似
import pytest
class TestLogin:
def setup_class(self): #執行測驗類前執行,先后順序不影響該函式的執行
print('\n0-執行類時先執行我')
def test_login01(self):
print('\n1-login01:')
assert 1 + 1 == 2
def test_login02(self):
print('\n2-login02:')
assert 2 + 1 == 2
def teardown_class(self): #執行測驗類后執行,先后順序不影響該函式的執行
print('\n3-執行類后,最后執行我')
if __name__ == '__main__':
pytest.main(['test_func01.py','-s']) #-s表示允許執行print陳述句
執行結果:

?
資料驅動–引數化
@pytest.mark.parametrize(‘變數’,引數串列)
@pytest.mark.parametrize(‘多個變數’,子元素為元組的引數串列)
import pytest
class TestLogin:
@pytest.mark.parametrize('a', [1,2])
def test_login01(self,a):
assert 1 + 1 == a
@pytest.mark.parametrize('a,b', [(1, 2), (3, 4)])
def test_login02(self,a,b):
assert 2 + a == b
if __name__ == '__main__':
pytest.main(['test_func01.py'])
執行結果:

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/248205.html
標籤:python
