pytest基本使用指南


注:關於pytest的基礎要點個人已經總結好了,直接git clone即可,gitee:https://gitee.com/teark/pytest_exercise.git

 

啟動:

在main下,pytest.main(['-q','test_demo.py'])

或者在終端,pytest ./test_demo.py

執行多個:pytest test_fixture1.py test_fixture2.py

 

啟動參數說明:

-s: 顯示程序中的print/logging輸出

-v: 豐富信息模式, 輸出更詳細的用例執行信息

-q: 安靜模式, 不輸出環境信息,只給結果

-k:關鍵字匹配,用and區分:匹配范圍(文件名、類名、函數名)

 

setup/teardown:

setup和teardown函數:運行在每個測試方法的始末

setup_class和teardown_class函數:運行在類的始末

 

pytest.ini:

參數最好都放配置文件里,不用再main里放

addopts配置pytest命令行運行參數

testpaths配置測試搜索的路徑

python_files配置測試搜索的文件名

python_classes配置測試搜索的測試類名

python_functions配置測試搜索的測試函數名

配置文件里不要出現中文,需要gbk編碼,但是改了gbk,控制台打印時會報錯,無語。

 

pytest-html:

安裝它

用法:配置文件里添加報告參數:addopts = -s --html=./report.html,若要生成xml文件改一下就行

 

pytest-ordering:

安裝它

用法:函數上面加@pytest.mark.run(order=n)

優先級:order值全為正數或全為負數時, 值越小,優先級越高;正數和負數同時存在,正數優先級高

 

pytest-rerunfailures:

安裝它

用法:命令行格式, pytest —reruns n # n為重試的次數;或添加失敗重試參數,即:addopts = -s --reruns 2 --html=./report.html

記住命令行是reruns,最好配置參數

 

fixture:

功能:通常會被用於完成預置處理和重復操作。如在測試網站的功能時,每個測試用例都要登錄和退出,利用fixture就可以只做一次;完成setup和

teardown操作,處理數據庫或文件的打開、關閉操作;將數據提前寫入數據庫或通過params返回給測試用例。強大吧!

pytest.fixture(scope='function', params=None, autouse=False, ids=None, name=None)

 

常用參數解釋:

"scope": 被標記方法的作用域;

"function": 默認值,表示每個測試方法都要執行一次

"class": 作用於整個類, 表示每個類的所有測試方法只運行一次

"module": 作用於整個模塊, 每個module的所有測試方法只運行一次.

"session": 作用於整個session, 每次session只運行一次. ⚠️(此方法慎用!!)

params: list類型,默認None, 接收參數值,對於param里面的每個值,fixture都會去遍歷執行一次.

autouse: 是否自動運行,默認為false, 為true時此session中的所有測試函數都會調用fixture

以上的所有參數也可以不傳

 

使用:

把返回值作為參數使用:某個功能函數如before上面放@pytest.fixture(),然后before可以作為參數放在需要用的函數里,選這個沒錯了。

直接使用:某個功能函數如before上面放@pytest.fixture(),然后需要用的函數或類上面放@pytest.mark.usefixtures("before")

 

skipif:

@pytest.mark.skipif(condition, reason=None)

參數解釋:

condition: 跳過的條件,必傳參數

reason: 標注原因,必傳參數

 

xfail:

@pytest.mark.xfail(condition=None, reason=None, raises=None, run=True, strict=False)

常用參數:

condition:預期失敗的條件,必傳參數

reason:失敗的原因,必傳參數

 

parametrize:

@pytest.mark.parametrize(argnames,argvalues)

參數值為N個,測試方法就會運行N次

常用參數:

argnames:參數名

argvalues:

參數對應值,類型必須為list

當參數為一個時,參數格式:[value]

當參數個數大於一個時,格式為:[(param_value1,param_value2.....),(param_value1,param_value2.....)]

 

運行:

pytest.main("d:/pyse/pytest/") # 指定測試目錄

pytest.main("-q test_main.py") # 指定測試文件

pytest.main("-v -s spec_001_modul_test.py::test_001_spec") #運行模塊中指定用例

pytest.main("-v -s spec_001_modul_test.py::Test_Class::test_003_spec") #運行類中指定用例

#運行spec_001_modul_test模塊中用例名稱包含spec的用例

pytest.main("-v -s -k spec spec_001_modul_test.py")

#運行當前文件夾匹配Test_Class的用例,類文件下面的用例

pytest.main('-s -v -k Test_Class')

pytest 目錄/文件::類名::函數名 或者 pytest 目錄/文件::函數名

 

其他:

不需要在main里面寫pytest.main,只要是符合命名,默認為pytest啟動,都會自動調用pytest

如果兩個測試函數體里面的內容一樣,只會輸出一次結果。

改了哪兒,直接運行后測的就是哪兒。需要重新定位鼠標,一般放最后。這條很重要!

 

斷言對比

unittest(3種):

  assertIn(expect,result)斷言包含(被包含的寫前面)

  assertEqual(expect,result)斷言相等

  assertTure(條件)斷言是否為真。返回Ture或False

pytest(5種,即python里的斷言)

  assert xx:判斷xx為真

  assert not xx:判斷xx不為真

  assert a in b:判斷b包含a

  assert a == b:判斷a等於b

  assert a !=b,"判斷a不等於b"(加上括號后面有說明)

 

 

后記

如果哪里不明白可以留下你的評論,如果覺得對你有幫助,記得關注我哦!pytest基本使用練習地址:https://gitee.com/teark/pytest_exercise.git,歡迎mark!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM