您好,登錄后才能下訂單哦!
這篇文章主要介紹了Python測試框架pytest怎么使用的相關知識,內容詳細易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇Python測試框架pytest怎么使用文章都會有所收獲,下面我們一起來看看吧。
Pytest is a mature full-featured Python testing tool that helps you write better programs.The pytest framework makes it easy to write small tests, yet scales to support complex functional testing for applications and libraries.
通過官方網站介紹我們可以了解到,Pytest是一個非常成熟的全功能的python測試框架,主要有以下幾個特點:
簡單靈活易上手
支持參數化
支持簡單的單元測試和復雜的功能測試,還可以用來做自動化測試
具有很多第三方插件,并且可以自定義擴展
測試用例的skip和xfail處理
可以很好的和Jenkins集成
支持運行由Nose、UnitTest編寫的測試用例
1.直接使用pip命令安裝:
pip install -U pytest # -U是如果已安裝會自動升級最新版本
2.驗證安裝結果:
pytest --version # 展示當前安裝版本 C:\Users\edison>pytest --version pytest 6.2.5
3.在pytest測試框架中,要遵循以下約束:
測試文件名要符合test_.py或_test.py格式(例如test_min.py)
測試類要以Test開頭,且不能帶有init方法
在單個測試類中,可以包含一個或多個test_開頭的函數
pytest進行測試比較簡單,我們來看一個實例:
import pytest # 導入pytest包 def test_001(): # 函數以test_開頭 print("test_01") def test_002(): print("test_02") if __name__ == '__main__': pytest.main(["-v","test_1214.py"]) # 調用pytest的main函數執行測試
這里我們定義了兩個測試函數,直接打印出結果,下面執行測試:
============================= test session starts ============================= platform win32 -- Python 3.8.0, pytest-6.2.5, py-1.11.0, pluggy-1.0.0 -- D:\Code\venv\Scripts\python.exe cachedir: .pytest_cache rootdir: D:\Code collecting ... collected 2 items test_1214.py::test_001 PASSED [ 50%] test_1214.py::test_002 PASSED [100%] ============================== 2 passed in 0.11s ============================== Process finished with exit code 0
輸出結果中顯示執行了多少條案例、對應的測試模塊、通過條數以及執行耗時。
pytest.main(["-v","test_1214.py"])
通過python代碼執行pytest.main():
直接執行pytest.main()
【自動查找當前目錄下,以test_開頭的文件或者以_test結尾的py文件】;
設置pytest的執行參數 pytest.main([’–html=./report.html’,‘test_login.py’])【執行test_login.py文件,并生成html格式的報告】。
main()
括號內可傳入執行參數和插件參數,通過[]進行分割,[]內的多個參數通過‘逗號,’進行分割:
運行目錄及子包下的所有用例 pytest.main([‘目錄名’])
運行指定模塊所有用例 pytest.main([‘test_reg.py’])
運行指定模塊指定類指定用例pytest.main([‘test_reg.py::TestClass::test_method’])
冒號分割
-m=xxx: 運行打標簽的用例
-reruns=xxx:失敗重新運行
-q: 安靜模式, 不輸出環境信息
-v: 豐富信息模式, 輸出更詳細的用例執行信息
-s: 顯示程序中的print/logging
輸出
–resultlog=./log.txt 生成log
–junitxml=./log.xml 生成xml報告
pytest斷言主要使用Python原生斷言方法,主要有以下幾種:
== 內容和類型必須同時滿足相等
in 實際結果包含預期結果
is 斷言前后兩個值相等
import pytest # 導入pytest包 def add(x,y): # 定義以test_開頭函數 return x + y def test_add(): assert add(1,2) == 3 # 斷言成功 str1 = "Python,Java,Ruby" def test_in(): assert "PHP" in str1 # 斷言失敗 if __name__ == '__main__': pytest.main(["-v","test_pytest.py"]) # 調用main函數執行測試
============================= test session starts ============================= platform win32 -- Python 3.8.0, pytest-6.2.5, py-1.11.0, pluggy-1.0.0 -- D:\Code\venv\Scripts\python.exe cachedir: .pytest_cache rootdir: D:\Code collecting ... collected 2 items test_pytest.py::test_add PASSED [ 50%] test_pytest.py::test_in FAILED [100%] ================================== FAILURES =================================== ___________________________________ test_in ___________________________________ def test_in(): > assert "PHP" in str1 E AssertionError: assert 'PHP' in 'Python,Java,Ruby' test_pytest.py:11: AssertionError =========================== short test summary info =========================== FAILED test_pytest.py::test_in - AssertionError: assert 'PHP' in 'Python,Java... ========================= 1 failed, 1 passed in 0.18s ========================= Process finished with exit code 0
可以看到運行結果中明確指出了錯誤原因是“AssertionError”,因為PHP不在str1中。
1.運行指定案例:
if __name__ == '__main__': pytest.main(["-v","-s","test_1214.py"])
2.運行當前文件夾包括子文件夾所有用例:
if __name__ == '__main__': pytest.main(["-v","-s","./"])
3.運行指定文件夾(code目錄下所有用例):
if __name__ == '__main__': pytest.main(["-v","-s","code/"])
4.運行模塊中指定用例(運行模塊中test_add用例):
if __name__ == '__main__': pytest.main(["-v","-s","test_pytest.py::test_add"])
5.執行失敗的最大次數
使用表達式"–maxfail=num"來實現(注意:表達式中間不能存在空格),表示用例失敗總數等于num 時停止運行。
6.錯誤信息在一行展示。
在實際項目中如果有很多用例執行失敗,查看報錯信息將會很麻煩。使用"–tb=line"命令,可以很好解決這個問題。
本地寫一個查詢用戶信息的接口,通過pytest來調用,并進行接口斷言。
# -*- coding: utf-8 -*- import pytest import requests def test_agent(): r = requests.post( url="http://127.0.0.1:9000/get_user", data={ "name": "吳磊", "sex": 1 }, headers={"Content-Type": "application/json"} ) print(r.text) assert r.json()['data']['retCode'] == "00" and r.json()['data']['retMsg'] == "調用成功" if __name__ == "__main__": pytest.main(["-v","test_api.py"])
關于“Python測試框架pytest怎么使用”這篇文章的內容就介紹到這里,感謝各位的閱讀!相信大家對“Python測試框架pytest怎么使用”知識都有一定的了解,大家如果還想學習更多知識,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。