009、pytest 基礎彙總
一、編寫測試用例:
用例名稱——>用例步驟——>預期結果——>實際結果——>前置、後置
1、用例名稱:要以 test_開頭 ;
2、用例步驟:即用例業務邏輯 ;
3、斷言:(實際和預期結果比對) assert 表示式( True/ False ) AssertError ;
當出現用例 AssertError 或者 測試用例其他原因 raise 異常時,測試用例執行Fail ;
4、用例呈現的2種形式:
a、.py 下的函式,函式名以 test_ 開頭 ;
b、.py 下類裡面的方法,方法名以 test_ 開頭 ;
5、自動蒐集測試用例:
a、蒐集目錄 :在哪個檔案目錄下執行 pytest 命令,就在 哪個目錄開始蒐集測試用例 ;
b、目錄下的檔案過濾: 檔名以 test_ 開頭的 py檔案,或者 檔名 以 _test 結尾的py 檔案 ;
目錄下所有 .py 檔案 的執行順序是 按照 ASCII 碼 順序 ;
c、.py 檔案下的用例過濾:.py 檔案下的函式, 函式名以 test_ 開頭,
所有測試用例 test_xx 是按照程式碼 自上而下的 順序執行 ;
6、pytest.main(['-s', '-v', 'test_dd.py']) 在 _.py 檔案中新增pytest.main() 的效果 和 在cmd 命令列執行效果一樣 ;
a、當出現用例 AssertError 或者 測試用例其他原因 raise 異常時,測試用例執行Fail ;
示例程式碼如下:
def test_3():
login = 'success'
assert login == 'success'
# 除數不能為0 ,異常,測試用例執行Fail
def test_1():
a = 10
b = 0
c = a / b
login = 'success'
assert login == 'success'
執行結果如下:
D:\SkyWorkSpace\WorkSpace\Pytest\Temp\day15\dd>pytest -sv
================================================= test session starts =================================================
platform win32 -- Python 3.8.6, pytest-5.4.3, py-1.10.0, pluggy-0.13.1 -- c:\skyworkspace\worktools\python\python38\python.exe
cachedir: .pytest_cache
metadata: {'Python': '3.8.6', 'Platform': 'Windows-10-10.0.19041-SP0', 'Packages': {'pytest': '5.4.3', 'py': '1.10.0', 'pluggy': '0.13.1'}, 'Plugins': {'allure-pytest': '2.9.43', 'html': '2.1.1', 'metadata': '1.11.0'}, 'JAVA_HOME': 'C:\\SkyWorkSpace\\WorkTools\\Java\\jdk1.8\\jdk1.8.0_271'}
rootdir: D:\SkyWorkSpace\WorkSpace\Pytest\Temp\day15\dd
plugins: allure-pytest-2.9.43, html-2.1.1, metadata-1.11.0
collected 2 items
test_dd.py::test_3 PASSED
test_dd.py::test_1 FAILED
====================================================== FAILURES =======================================================
_______________________________________________________ test_1 ________________________________________________________
def test_1():
a = 10
b = 0
> c = a / b
E ZeroDivisionError: division by zero
test_dd.py:11: ZeroDivisionError
=============================================== short test summary info ===============================================
FAILED test_dd.py::test_1 - ZeroDivisionError: division by zero
============================================= 1 failed, 1 passed in 0.16s =============================================
D:\SkyWorkSpace\WorkSpace\Pytest\Temp\day15\dd>
b、pytest.main(['-sv', 'test_dd.py']) : 在 _.py 檔案中新增pytest.main() 的效果 和 在cmd 命令列執行效果一樣 ;
或者pytest.main(['-s', '-v', 'test_dd.py']) ,引數以列表的形式 ;
程式碼如下:
import pytest
class TestDemo():
def test_3(self):
login = 'success'
assert login == 'success'
def test_2(self):
login = 'success'
assert login == 'success'
def func_1(self):
login = 'success'
assert login == 'success'
class TestDemoAA():
def test_3(self):
login = 'success'
assert login == 'success'
def test_2(self):
login = 'success'
assert login == 'success'
def func_1(self):
login = 'success'
assert login == 'success'
if __name__ == '__main__':
pytest.main(['-sv', 'test_dd.py'])
執行結果如下:
D:\SkyWorkSpace\WorkSpace\Pytest\Temp\day15\venv\Scripts\python.exe D:/SkyWorkSpace/WorkSpace/Pytest/Temp/day15/dd/test_dd.py ============================= test session starts ============================= platform win32 -- Python 3.8.6, pytest-6.2.4, py-1.10.0, pluggy-0.13.1 -- D:\SkyWorkSpace\WorkSpace\Pytest\Temp\day15\venv\Scripts\python.exe cachedir: .pytest_cache rootdir: D:\SkyWorkSpace\WorkSpace\Pytest\Temp\day15\dd collecting ... collected 4 items test_dd.py::TestDemo::test_3 PASSED test_dd.py::TestDemo::test_2 PASSED test_dd.py::TestDemoAA::test_3 PASSED test_dd.py::TestDemoAA::test_2 PASSED ============================== 4 passed in 0.01s ============================== Process finished with exit code 0