Pytest
pytest是一個(gè)非常成熟的全功能的Python測(cè)試框架另凌,主要有以下幾個(gè)特點(diǎn):
簡單靈活谱轨,容易上手
支持參數(shù)化
能夠支持簡單的單元測(cè)試和復(fù)雜的功能測(cè)試,還可以用來做selenium/appnium等自動(dòng)化測(cè)試吠谢、接口自動(dòng)化測(cè)試(pytest+requests)
pytest具有很多第三方插件土童,并且可以自定義擴(kuò)展,比較好用的如pytest-selenium(集成selenium)工坊、pytest-html(完美html測(cè)試報(bào)告生成)献汗、pytest-rerunfailures(失敗case重復(fù)執(zhí)行)敢订、pytest-xdist(多CPU分發(fā))等
測(cè)試用例的skip和xfail處理
可以很好的和jenkins集成
report框架----allure 也支持了pytest
安裝Pytest
pip install -U pytest
Pytest用例設(shè)計(jì)原則
測(cè)試類以Test開頭,并且不能帶有init方法
以test_開頭的函數(shù)
以Test開頭的類
所有的包pakege必須要有__init__.py文件
斷言使用assert
運(yùn)行Pytest的兩種方式
Pycharm里代碼運(yùn)行
pytest.main(["test.py"])
Pycharm里代碼運(yùn)行
pytest test.py
# 運(yùn)行指定類下的指定方法
pytest 文件名::類名::方法名
Pytest參數(shù)說明
-v 說明:可以輸出用例更加詳細(xì)的執(zhí)行信息罢吃,比如用例所在的文件及用例名稱等
-s 說明:輸入我們用例中的調(diào)式信息楚午,比如print的打印信息等
-x:遇到錯(cuò)誤的用例,立即退出執(zhí)行刃麸,并輸出結(jié)果
-v:表示查看詳細(xì)的報(bào)告內(nèi)容
-collect-only:表示把待執(zhí)行的用例全部展示出來
-lf:只執(zhí)行上次失敗的用例
-vv :顯示詳細(xì)的測(cè)試結(jié)果
-tb=no:不展示用例失敗的錯(cuò)誤詳情
-tb=line:展示用例失敗的代碼具體行數(shù)
-tb=short:展示更加詳細(xì)的錯(cuò)誤信息
-k "關(guān)鍵字" 說明:執(zhí)行用例包含“關(guān)鍵字”的用例
-q 說明:簡化控制臺(tái)的輸出醒叁,可以看出輸出信息和上面的結(jié)果都不一樣司浪, 下圖中有兩個(gè)..點(diǎn)代替了pass結(jié)果
-maxfail=num 當(dāng)用例錯(cuò)誤達(dá)到指定數(shù)量時(shí)泊业,停止測(cè)試
m 說明:執(zhí)行特定的測(cè)試用例。我們?cè)俅涡薷囊幌挛覀兊挠美∫祝⑻砑右粋€(gè)新的用例
# 如果要運(yùn)行多個(gè)標(biāo)識(shí)的話吁伺,用表達(dá)式,如下
pytest -m "slow or faster" test_1.py? 運(yùn)行有slow標(biāo)識(shí)或 faster標(biāo)識(shí)用例
pytest -m "slow and faster" test_1.py 運(yùn)行有slow和faster標(biāo)識(shí)的用例
pytest -m "slow and not faster" test_1.py 運(yùn)行有slow和沒有faster標(biāo)識(shí)的用例
注意:-m后面不能帶''號(hào)(單引號(hào))租谈,只能帶“”(雙引號(hào))篮奄,不然識(shí)別不到
ini配置文件
創(chuàng)建pytest.ini文件(固定寫法)
[pytest];固定寫法
;變量名不能錯(cuò)
addopts=-vv -s 割去;多個(gè)參數(shù)中間空格
testpaths=../HC/huace 窟却;多個(gè)目錄中間空格
python_files=test*.py ;python文件前綴呻逆,可自定義
python_classes=huace 夸赫;指定類名
python_functions=test* ;指定方法名,可自定義
跳過測(cè)試函數(shù)
跳過測(cè)試函數(shù): 根據(jù)特定的條件,不執(zhí)行標(biāo)識(shí)的測(cè)試函數(shù)
# -*- coding: utf-8 -*-
import pytest
class Test():
? ? def test(self):
? ? ? ? print("執(zhí)行的是testcase的用例")
@pytest.mark.skipif(condition=1<2,reason="1不大于2咖城,所以不執(zhí)行")
class huace():
? ? def haha(self):
? ? ? ? print("執(zhí)行的是haha方法里面的用例")
文章首發(fā)于微信公眾號(hào):程序員一凡