1. pytest的介紹
pytest是一個非常成熟的全功能的python測試工具,它主要有以下特征:
簡單靈活,容易上手;
支持簡單的單元測試和復雜的功能測試
顯示詳細的斷言失敗信息
能自動識別測試模塊和測試功能
有測試會話、測試模塊、測試類、測試函數級別的fixture
可用于selenium/Appium等自動化測試和接口自動化測試(pytest+requests);
擁有豐富的第三方插件,還可自定義擴展;
可與持續集成工具進行很好的集成,如:Jenkins。
…
2. pytest的安裝
1. 使用以下命令進行安裝
pip install -U pytest
參數說明:
-U: 將指定的軟件包升級至當前最新的可用版本
其他說明:
官網安裝說明有加上-U參數,不加上-U參數亦可
2. 檢查是否成功安裝正確版本
$ pytest --version pytest 6.2.4
3. pytest識別測試的條件
1.若無指定參數,pytest會從testpath(如果配置)或當前目錄下遞歸查找與 norecursedirs不匹配的目錄。
2.查找目錄中所有符合test_*.py
和*_test.py
的文件
3.從匹配到的測試文件中,搜集滿足以下條件的測試用例:
-
在類之外的所有
test_*
方法 -
Test*
類中包含的所有test_*
方法(Test*
類中不能含有__init__()
方法)
4. pytest的運行
pytest的運行分為以下方式:
1. Pycharm中進行調用
2. Python代碼中調用
3. 使用命令行進行調用
4.1 Pycharm中調用
Pycharm中默認的test runner是Unittest,無法識別使用pytest編寫的測試文件和測試用例
進入Preferences-->Tools-->Python Integrted Tools,
修改Testing下的Default test runner,改成pytest后,
則可以直接使用Pycharm中的Run按鈕無參數的調用pytest。
4.2 Python代碼中調用
在代碼中添加入口函數―pytest.main(),即可在Python代碼中調用pytest。
pytest.main()
的參數:
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'])的參數說明:
''test_sample.py::TestDemo::test_demo1'':表示運行test_sample.py中的TestDemo類里面名為test_demo1的測試方式
-v:表示打印詳細運行日志信息
運行結果:
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()])參數說明:
plugins=[MyPlugin()])):傳入自定義的MyPlugin()函數
運行結果:
4.3 使用命令行調用
1. 使用python
調用
當代碼中我們添加入口函數后,可以使用python來調用pytest。
以sample2的代碼為例,在終端輸入一下命令:
python test_sample.py
運行結果:
2. 使用pytest
調用
常用參數列表
以下列舉了一些常用的pytest的執行參數,其他參數可使用pytest --help
查看。
參數 | 說明 |
---|---|
pytest 目錄路徑 | 運行指定目錄下可收集到的測試,為空則默認執行當前目錄下收集到的測試 |
pytest 文件名.py | 執行單獨一個pytest模塊 |
pytest 文件名.py::類名 | 運行某個模塊中的某個類 |
pytest 文件名.py::類名::方法名 | 運行某個模塊中的某個類的某個方法 |
pytest -v | 打印詳細運行日志信息 |
pytest -v -s 文件名.py | 帶控制臺輸出結果,也輸出運行詳細日志信息 |
pytest -x 文件名.py | 一旦運行到報錯,就停止運行 |
pytest -k "類名 and not 方法名" | 執行某個關鍵字的用例 |
pytest -m [標記名] | @pytest.mark.[標記名]將運行這個標記的測試用例 |
pytest Cmaxfail=[num] | 當運行錯誤到達num時候就停止運行 |
pytest Ccolection-only | 只收集測試用例 |
pytest Cjunitxml=./result.xml | 生成執行結果文件 |
pytest Csetup-show | 回溯fixture的執行過程 |
參數演示示例:
demo目錄如下
1.pytest目錄路徑:運行指定目錄下可收集到的測試
2.pytest文件名.py:執行單獨一個pytest模塊
3.pytest 文件名.py::類名:運行某個模塊中的某個類
4.pytest 文件名.py::類名::方法名:運行某個模塊中的某個類的某個方法
5.pytest -v: 打印詳細運行日志信息
6.pytest -v -s 文件名.py:帶控制臺輸出結果,也輸出運行詳細日志信息
7.pytest -x 文件名.py:一旦運行到報錯,就停止運行
8.pytest -k "類名 and not 方法名":執行某個關鍵字的用例
注意:示例中,測試用例名稱中包含“test_c”和“test_d”的都會被執行
9.pytest -m [標記名]:@pytest.mark.[標記名]將運行這個標記的測試用例
對兩個測試方法進行@pytest.mark.[標記]
的標記。
運行結果:
只運行了被標記的兩個測試方法。
10. pytest --maxfail=[num]
:當運行錯誤到達num時候就停止運行
對代碼進行修改,模擬兩條運行失敗測試用例。
運行結果:
11. pytest --colection-only
:只收集測試用例
12. pytest --junitxml=./result.xml
:生成執行結果文件
執行結束后,對應目錄下會生成一個結果文件。
13.pytest --setup-show
:回溯fixture的執行過程
對原有代碼進行修改。新增一個fixture修飾的函數,并對test_demo1測試方法進行修改。
運行結果:
文末說明:
以上內容是我在閱讀pytest官方文檔后,依照個人理解進行整理。內容可能會有理解錯誤之處,歡迎大家留言指正。謝謝!
以上就是Python自動化測試框架pytest介紹安裝與運行的詳細內容,更多關于Python自動化測試框架pytest的資料請關注服務器之家其它相關文章!
原文鏈接:https://blog.csdn.net/gjj920318/article/details/118515792