Python自動化測試框架pytest的詳解安裝與運(yùn)行
1. pytest的介紹
pytest是一個非常成熟的全功能的python測試工具,它主要有以下特征:
簡單靈活,容易上手;
支持簡單的單元測試和復(fù)雜的功能測試
顯示詳細(xì)的斷言失敗信息
能自動識別測試模塊和測試功能
有測試會話、測試模塊、測試類、測試函數(shù)級別的fixture
可用于selenium/Appium等自動化測試和接口自動化測試(pytest+requests);
擁有豐富的第三方插件,還可自定義擴(kuò)展;
可與持續(xù)集成工具進(jìn)行很好的集成,如:Jenkins。
…
2. pytest的安裝
1. 使用以下命令進(jìn)行安裝
pip install -U pytest
參數(shù)說明:
-U: 將指定的軟件包升級至當(dāng)前最新的可用版本
其他說明:
官網(wǎng)安裝說明有加上-U參數(shù),不加上-U參數(shù)亦可
2. 檢查是否成功安裝正確版本
$ pytest --version pytest 6.2.4
3. pytest識別測試的條件
1.若無指定參數(shù),pytest會從testpath(如果配置)或當(dāng)前目錄下遞歸查找與 norecursedirs不匹配的目錄。
2.查找目錄中所有符合test_*.py和*_test.py的文件
3.從匹配到的測試文件中,搜集滿足以下條件的測試用例:
- 在類之外的所有
test_*方法 Test*類中包含的所有test_*方法(Test*類中不能含有__init__()方法)
4. pytest的運(yùn)行
pytest的運(yùn)行分為以下方式:
1. Pycharm中進(jìn)行調(diào)用
2. Python代碼中調(diào)用
3. 使用命令行進(jìn)行調(diào)用
4.1 Pycharm中調(diào)用
Pycharm中默認(rèn)的test runner是Unittest,無法識別使用pytest編寫的測試文件和測試用例


進(jìn)入Preferences-->Tools-->Python Integrted Tools,
修改Testing下的Default test runner,改成pytest后,
則可以直接使用Pycharm中的Run按鈕無參數(shù)的調(diào)用pytest。

4.2 Python代碼中調(diào)用
在代碼中添加入口函數(shù)—pytest.main(),即可在Python代碼中調(diào)用pytest。
pytest.main()的參數(shù):

1. args:命令行指令列表集
示例代碼sample1:
import pytest
class TestDemo:
def test_demo1(self):
print("test_demo1")
def test_demo2(self):
print("test_demo2")
if __name__=='__main__':
pytest.main(['test_sample.py::TestDemo::test_demo1','-v'])
pytest.main(['test_sample.py::test_demo1','-v'])的參數(shù)說明:
''test_sample.py::TestDemo::test_demo1'':表示運(yùn)行test_sample.py中的TestDemo類里面名為test_demo1的測試方式
-v:表示打印詳細(xì)運(yùn)行日志信息
運(yùn)行結(jié)果:

2. plugins:在初始化過程中可自動注冊的插件對象列表
示例代碼sample2:
import pytest
import sys
class TestDemo:
def test_demo1(self):
print("test_demo1")
def test_demo2(self):
print("test_demo2")
class MyPlugin:
def pytest_sessionfinish(self):
print("*** test run reporting finishing")
if __name__ == '__main__':
sys.exit(pytest.main(['-v','test_sample.py::TestDemo::test_demo1'], plugins=[MyPlugin()]))
pytest.main(['-v','test_sample.py::TestDemo::test_demo1'], plugins=[MyPlugin()])參數(shù)說明:
plugins=[MyPlugin()])):傳入自定義的MyPlugin()函數(shù)
運(yùn)行結(jié)果:

4.3 使用命令行調(diào)用
1. 使用python調(diào)用
當(dāng)代碼中我們添加入口函數(shù)后,可以使用python來調(diào)用pytest。
以sample2的代碼為例,在終端輸入一下命令:
python test_sample.py
運(yùn)行結(jié)果:

2. 使用pytest調(diào)用
常用參數(shù)列表
以下列舉了一些常用的pytest的執(zhí)行參數(shù),其他參數(shù)可使用pytest --help查看。
| 參數(shù) | 說明 |
|---|---|
| pytest 目錄路徑 | 運(yùn)行指定目錄下可收集到的測試,為空則默認(rèn)執(zhí)行當(dāng)前目錄下收集到的測試 |
| pytest 文件名.py | 執(zhí)行單獨(dú)一個pytest模塊 |
| pytest 文件名.py::類名 | 運(yùn)行某個模塊中的某個類 |
| pytest 文件名.py::類名::方法名 | 運(yùn)行某個模塊中的某個類的某個方法 |
| pytest -v | 打印詳細(xì)運(yùn)行日志信息 |
| pytest -v -s 文件名.py | 帶控制臺輸出結(jié)果,也輸出運(yùn)行詳細(xì)日志信息 |
| pytest -x 文件名.py | 一旦運(yùn)行到報(bào)錯,就停止運(yùn)行 |
| pytest -k "類名 and not 方法名" | 執(zhí)行某個關(guān)鍵字的用例 |
| pytest -m [標(biāo)記名] | @pytest.mark.[標(biāo)記名]將運(yùn)行這個標(biāo)記的測試用例 |
| pytest –maxfail=[num] | 當(dāng)運(yùn)行錯誤到達(dá)num時(shí)候就停止運(yùn)行 |
| pytest –colection-only | 只收集測試用例 |
| pytest –junitxml=./result.xml | 生成執(zhí)行結(jié)果文件 |
| pytest –setup-show | 回溯fixture的執(zhí)行過程 |
參數(shù)演示示例:
demo目錄如下

1.pytest目錄路徑:運(yùn)行指定目錄下可收集到的測試

2.pytest文件名.py:執(zhí)行單獨(dú)一個pytest模塊

3.pytest 文件名.py::類名:運(yùn)行某個模塊中的某個類

4.pytest 文件名.py::類名::方法名:運(yùn)行某個模塊中的某個類的某個方法

5.pytest -v: 打印詳細(xì)運(yùn)行日志信息

6.pytest -v -s 文件名.py:帶控制臺輸出結(jié)果,也輸出運(yùn)行詳細(xì)日志信息

7.pytest -x 文件名.py:一旦運(yùn)行到報(bào)錯,就停止運(yùn)行

8.pytest -k "類名 and not 方法名":執(zhí)行某個關(guān)鍵字的用例
注意:示例中,測試用例名稱中包含“test_c”和“test_d”的都會被執(zhí)行

9.pytest -m [標(biāo)記名]:@pytest.mark.[標(biāo)記名]將運(yùn)行這個標(biāo)記的測試用例
對兩個測試方法進(jìn)行@pytest.mark.[標(biāo)記]的標(biāo)記。

運(yùn)行結(jié)果:
只運(yùn)行了被標(biāo)記的兩個測試方法。

10. pytest --maxfail=[num]:當(dāng)運(yùn)行錯誤到達(dá)num時(shí)候就停止運(yùn)行
對代碼進(jìn)行修改,模擬兩條運(yùn)行失敗測試用例。

運(yùn)行結(jié)果:

11. pytest --colection-only:只收集測試用例

12. pytest --junitxml=./result.xml:生成執(zhí)行結(jié)果文件

執(zhí)行結(jié)束后,對應(yīng)目錄下會生成一個結(jié)果文件。

13.pytest --setup-show:回溯fixture的執(zhí)行過程
對原有代碼進(jìn)行修改。新增一個fixture修飾的函數(shù),并對test_demo1測試方法進(jìn)行修改。

運(yùn)行結(jié)果:

文末說明:
以上內(nèi)容是我在閱讀pytest官方文檔后,依照個人理解進(jìn)行整理。內(nèi)容可能會有理解錯誤之處,歡迎大家留言指正。謝謝!
以上就是Python自動化測試框架pytest介紹安裝與運(yùn)行的詳細(xì)內(nèi)容,更多關(guān)于Python自動化測試框架pytest的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
基于python的Tkinter實(shí)現(xiàn)一個簡易計(jì)算器
這篇文章主要介紹了基于python的Tkinter實(shí)現(xiàn)一個簡易計(jì)算器的相關(guān)資料,還為大家分享了僅用用50行Python代碼實(shí)現(xiàn)的簡易計(jì)算器,感興趣的小伙伴們可以參考一下2015-12-12
python 實(shí)現(xiàn)在shell窗口中編寫print不向屏幕輸出
這篇文章主要介紹了python 實(shí)現(xiàn)在shell窗口中編寫print不向屏幕輸出的代碼,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-02-02
Python中os.path模塊的8個神奇函數(shù)分享
在Python編程中,os.path模塊是一個非常重要的模塊,它提供了用于處理文件路徑和目錄的函數(shù),本文將介紹os.path模塊中最常用的8個內(nèi)置函數(shù),需要的可以參考下2023-11-11
Python計(jì)算三角函數(shù)之a(chǎn)sin()方法的使用
這篇文章主要介紹了Python計(jì)算三角函數(shù)之a(chǎn)sin()方法的使用,是Python入門的基礎(chǔ)知識,需要的朋友可以參考下2015-05-05
python內(nèi)置進(jìn)制轉(zhuǎn)換函數(shù)的操作
這篇文章主要介紹了python內(nèi)置進(jìn)制轉(zhuǎn)換函數(shù)的操作,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-06-06
Java byte數(shù)組操縱方式代碼實(shí)例解析
這篇文章主要介紹了Java byte數(shù)組操縱方式代碼實(shí)例解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-07-07

