1.pytest介紹
- pytest是一個非常成熟的全功能的python測試框架
- 簡單靈活,易上手
- 支持參數化
測試用例的skip和xfail,自動失敗重試等處理
- 能夠支持簡單的單元測試和復雜的功能測試,還可以用來做selenium/appium等自動化測試、接口自動化測試(pytest+requests);
- pytest並且具有很多第三方插件,並且可以自定義擴展,比較好用的比如pytest-allure(完美 html測試報告生成),pytest-xdist(多cpu分發)等;
- 可以很好的和jenkins集成
單元框架類似與unitest,但是比unitest更加成熟
pytest文檔:https://docs.pytest.org/en/latest/contents.html
第三方庫:https://pypi.org/search/?q=pytest
2.pytest安裝與依賴
pip install -U pytest U表示升級
pip insetall pytest-sugar ( sugar可以對我們運行的過程界面進行美化)
pip install pytest-rerunfailures( rerunfailures可以重新運行執行出錯的測試用例)
pip install pytest-xdist( xdist多任務並發的執行測試用例)
pip install pytest-assume( assume可以在測試用例里面添加斷言,通常是斷言出錯了就不執行了,但是通過用這個包,就可以即使這個斷言出錯了,也可以繼續執行下一個斷言)
pip install pytest-html( html可以生成html結果報告)
....
pip list 查看
pytest -h幫助
3.測試用例的識別與運行
- 測試文件
test_*.py
*_test.py
- 用例識別
Test*類包含的所有test_*的方法(測試類不能帶有__init__方法)
不在class中的所有的test_*方法
- pytest也可以執行unittest框架寫的用例和方法(pytest與unittest的區別,可以參考unittest的使用 https://www.jianshu.com/p/125fd33d55ed)
4.測試用例的識別與運行
終端執行
pytest/py.test
pytest -v (最高級別信息--verbose)打印詳細運行日志信息
pytest -v -s 文件名 (s是帶控制台輸出結果,也是輸出詳細運行日志)
pytest 文件名.py 執行單獨一個pytest模塊
pytest 文件名.py::類名 運行某個模塊里面的某個類
pytest 文件名.py::類名::方法名 運行某個模塊里面某個類里面的方法
pytest -v -k "類名and not方法名" 跳過運行某個測試用例
執行 pytest test_demo.py::Test_cal2,只運行test_sub 方法
執行 pytest test_demo.py::Test_cal::test_muti,只運行test_muti方法
執行 pytest test_demo.py -k "Test_cal and not test_muti" ,只運行test_demo.py中的非test_muti方法
pytest -m[標記名] @pytest.mark.[標記名]將運行這個有標記的測試用例
pytest -x 文件名 一旦運行報錯就停止運行
pytest --maxfail=[num] 當運行錯誤達到num的時候就停止運行(比如冒煙測試,執行多少個失敗的用例就打回)
例如:執行pytest --maxfail=1 test_demo.py,就運行到一個錯誤停止運行了
5.pytest執行-失敗重新運行
場景:測試失敗后要重新運行n次,要在重新運行只見添加延遲時間,間隔n秒再運行。
安裝:pip install pytest-rerunfailures
執行:pytest --reruns 3 -v -s test_demo.py
pytest -v --reruns 3 --reruns-delay 1 test_demo.py (添加延遲時間1s)
6.pytest執行多條斷言有失敗也都運行
場景:一個方法中寫多條斷言,通常第一條過不去,下面就不執行了。我們想報錯也都執行一下。
安裝:
pip install pytest-assume
執行:
pytest.assume(1==4)
pytest.assume(2==4)
6.pycharm中運行
三種運行方式: