目錄
pytest簡介及安裝
pytest的使用規(guī)則
pytest運(yùn)行方式
主函數(shù)方式
命令行方式
跳過、標(biāo)記及預(yù)期失敗特殊場景處理
pytest前后置、夾具
pytest高級(jí)用法fixture
pytest接口斷言
pytest結(jié)合allure-pytest生成allure測(cè)試報(bào)告
pytest簡介及安裝
????????談起用例管理框架:python中的unittest、pytest;java中的testng 、junit都是比較熟悉的,本篇文章從安裝到使用到結(jié)合插件多樣化等層面來學(xué)習(xí)和介紹pytest這個(gè)自動(dòng)化測(cè)試框架。
????????使用pytest來作為我們的用例管理框架,自然是因?yàn)樗嬖诤芏鄡?yōu)勢(shì),總的來說就是:簡單靈活,容易上手、支持參數(shù)化,如下列出:
????????1. 能夠支持簡單的單元測(cè)試和復(fù)雜的功能測(cè)試,它可以和所以的自動(dòng)化測(cè)試工具selenium、、appium結(jié)合實(shí)現(xiàn)web自動(dòng)化、接口自動(dòng)化(pytest+requests)以及app自動(dòng)化
????????2. 跳過用例以及失敗用例重跑,測(cè)試用例的skip和xfail處理
????????3. 結(jié)合allure生成美觀的測(cè)試報(bào)告
????????4. 和jenkins持續(xù)集成
????????5. 有很多的強(qiáng)大的插件
????????????????pytest-html 用于生成html測(cè)試報(bào)告
????????????????pytest-xdist 多線程運(yùn)行
????????????????pytest-ordering 改變測(cè)試用例的執(zhí)行順序
????????????????pytest-rerunfailures 失敗用例重跑
????????????????allure-pytest 生成allure測(cè)試報(bào)告
????????????????pytest-selenium 集成selenium
? ? ? ? 我們一般實(shí)際項(xiàng)目開發(fā)當(dāng)中都會(huì)使用requrement.txt文件保存插件名稱,然后通過pip install -r requirements.txt進(jìn)行安裝所以插件。
????????這么好用的框架,安裝是第一步,我們使用以下命令進(jìn)行安裝。
##安裝
pip install pytest
##查看版本號(hào)
pytest --version
pytest的使用規(guī)則
? ? ? ? 安裝完成,就可以使用該框架來幫助我們進(jìn)行更高效率的測(cè)試,在測(cè)試前,我們必須明白使用該框架要遵循的一些規(guī)則:
- py文件名必須以test_開頭或者_(dá)test結(jié)尾
- 類名必須以Test開頭
- 測(cè)試用例(類內(nèi)的方法)/函數(shù)名(類外)必須以test_開頭
? ? ? ? 只有遵循這些規(guī)則,我們編寫的用例pytest才能認(rèn)識(shí)。才能更好的發(fā)揮它的作用:發(fā)現(xiàn)測(cè)試用例、執(zhí)行測(cè)試用例、判斷測(cè)試結(jié)果、生成測(cè)試報(bào)告。
pytest運(yùn)行方式
? ? ? ? pytest的運(yùn)行方式有兩種:主函數(shù)方式和命令行方式。
主函數(shù)方式
if_name_ == '_main_':
pytest.main(['-vs'])
? ? ? ? 這種方式運(yùn)行,有一些命令需要知道
????????????????-v 輸出更加詳情的運(yùn)行信息
????????????????-s 輸出調(diào)試信息
????????????????-n=數(shù)字 多線程運(yùn)行
????????????????--reruns=數(shù)字 失敗用例重新運(yùn)行
????????????????--html=./report.html 生成html報(bào)告
命令行方式
- 運(yùn)行包: pytest (pytest會(huì)自動(dòng)檢索當(dāng)前目錄下所有符合規(guī)則的測(cè)試用例)
- 運(yùn)行一個(gè)模塊:pytest -vs test.py
- 只執(zhí)行某一條測(cè)試用例:pytest 目錄/模塊.py::類名::用例名
????????使用命令行方式運(yùn)行測(cè)試用例,也可以添加相應(yīng)的參數(shù),
????????????????pytest --help: 獲取所有參數(shù)列表
????????????????-x: 用例一旦失敗(fail/error),就立刻停止
????????????????-m: 標(biāo)記用例
????????????????-k: 執(zhí)行包含某個(gè)關(guān)鍵字的測(cè)試用例
????????????????-v: 打印詳細(xì)日志
????????????????-s 打印輸出日志(一般-vs一塊使用)
????????????????--collect-only:(測(cè)試平臺(tái),pytest 自動(dòng)導(dǎo)入功能)
這些參數(shù)也不需要背過,但是要有個(gè)印象,需要的時(shí)候再進(jìn)行查找,來輔助我們測(cè)試。
跳過、標(biāo)記及預(yù)期失敗特殊場景處理
當(dāng)我們需要跳過一些測(cè)試用例時(shí),可以這么操作:
- ship: 始終跳過該用例
- 方式1: @pytest.mark.skp(reason="代碼沒有實(shí)現(xiàn)")
- 方式2:在測(cè)試用代碼中添加判斷的語句def test_demo(): if not login(): pytest.skip("未登錄無法運(yùn)行該用例")
- skipif: 遇到特定情況跳過該測(cè)試用例,需要給定條件@pytest.mark.skipif(條件="", reason="打印提示信息內(nèi)容")
當(dāng)然需要標(biāo)記一些用例的場景也很多:
- 場景:只執(zhí)行符合要求的某一部分用例,把項(xiàng)目分為多個(gè)模塊,然后指定模塊名稱執(zhí)行
- 解決:在測(cè)試用例的上方加上pytest裝飾器:@pytest.mark.標(biāo)簽名
- 執(zhí)行 -m 標(biāo)記自定義的相關(guān)用例
- pytest -s test_mark.py -m=標(biāo)簽名
- pytest -s test_mark.py -m 標(biāo)簽名
- pytest -s test_mark.py -m "not 標(biāo)簽名" (not:邏輯運(yùn)算,表示不是標(biāo)簽名的都去執(zhí)行
xfail: 遇到特殊情況,產(chǎn)生一個(gè)“期望失敗”輸出。
pytest前后置、夾具
? ? ? ? pytest可以實(shí)現(xiàn)前后置的效果。
????????setup/teardown 在每個(gè)用例之前和之后執(zhí)行一次
????????setup_class/teardown_class 在每個(gè)類之前和之后執(zhí)行一次
也可以實(shí)現(xiàn)部分用例的前置:
????????@pytest.fixtrue(scope="作用域",params="數(shù)據(jù)驅(qū)動(dòng)",autouse="自動(dòng)執(zhí)行",ids="自定義參數(shù)名字", name="重命名")
????????作用域:function(默認(rèn))、class、module、package/session
????????params :參數(shù)化( 支持,列表,元祖,字典列表,字典元祖)
????????autouse=True :自動(dòng)使用,默認(rèn)False
????????ids:當(dāng)使用params參數(shù)化時(shí) ,給每一個(gè)值設(shè)置一個(gè)交量名
????????name:給表示的是被@pytest fixture標(biāo)記的方法取一個(gè)別名
pytest高級(jí)用法fixture
1. fixture 作用
????????Fixture是在測(cè)試函數(shù)運(yùn)行前后,由pytest執(zhí)行的外殼函數(shù),代碼可以定制,滿足多變的測(cè)試需求,功能包括:
????????定于傳入測(cè)試中的數(shù)據(jù)集
????????配置測(cè)試前系統(tǒng)的初始狀態(tài)
????????為批量測(cè)試提供數(shù)據(jù)源等
Fixture是pytest用于將測(cè)試前后進(jìn)行預(yù)備,清理工作的代碼分類核心測(cè)試邏輯的一種機(jī)制
2.? fixture用法
????????類似setup teardown功能,但比setup teardown更靈活
????????直接通過函數(shù)名調(diào)用或者裝飾去@pytest.mark.usefixtures('test1')
????????允許使用多個(gè)Fixture
????????使用autouse自動(dòng)應(yīng)用,如果由返回值,需要穿fixture函數(shù)名
????????作用域 session>module>class>function
3.? pytest yield
????????以上fixture記錄的僅僅是setup,即測(cè)試用例運(yùn)行前的操作,如果需要加上teardown的操作,需要在fixture函數(shù)中加入 yield
pytest接口斷言
assert 'access_token' in rep.json() and 1==1
pytest結(jié)合allure-pytest生成allure測(cè)試報(bào)告
1. 官網(wǎng)下載allure:https://github.com/allure-framework/allure2/releases
放到?jīng)]有中文路徑下,然后把bin目錄配置到環(huán)境變量的path里面
配置完成,allure --version 可查看版本
2. 重啟pycharm,通過allure --version 驗(yàn)證;安裝allure-pytest
3. 執(zhí)行命令
- 生成臨時(shí)的json文件的報(bào)告 在pytest.ini里加命令 addopts = -vs --alluredir ./temp
- 通過臨時(shí)的json文件生成allure報(bào)告 在main函數(shù)里 os.system("allure generate ./reports -clean")
4.allure報(bào)告可進(jìn)行各種美化和定制文章來源:http://www.zghlxwxcb.cn/news/detail-455920.html
以上是學(xué)習(xí)記錄,持續(xù)加更...今天好熱,喝了芒果蛋蜜汁~文章來源地址http://www.zghlxwxcb.cn/news/detail-455920.html
到了這里,關(guān)于pytest接口測(cè)試自動(dòng)化框架的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!