<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
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測試框架,主要有以下幾個特點:
1.直接使用pip命令安裝:
pip install -U pytest # -U是如果已安裝會自動升級最新版本
2.驗證安裝結果:
pytest --version # 展示當前安裝版本 C:Usersedison>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:CodevenvScriptspython.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’])
冒號分割
print/logging
輸出–resultlog=./log.txt 生成log
–junitxml=./log.xml 生成xml報告
pytest斷言主要使用Python原生斷言方法,主要有以下幾種:
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:CodevenvScriptspython.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內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45