一、Pytest簡介
1.pytest是一個非常成熟的全功能的Python測試框架,主要有一下幾個特點:
簡單靈活,容易上手,支持參數化
2.能夠支持簡單的單元測試和復雜的功能測試,還可以用來做selenium、appium等自動化測試,requests+pytest接口自動化測試
3.pytest具有很多第三方插件,并且可以自定義擴展,比較好用的如:
pytest-selenium(集成selenium)
pytest-html(完美html測試報告生成)
pytest-rerunfailures(失敗用例重復執行)
pytest-xdist(多CPU分發)
4.測試用例的skip和xfail處理
5.可以很好的和jenkins集成
6.pytest也支持allure測試報告
7.能兼容unittest,是unittest的擴展
二、Pytest以及常用插件安裝
把如下內容寫到一個txt文件中,如require-install.txt
pytest
pytest-html
pytest-xdist
pytest-rerunfailures
然后在Dos窗口中使用此命令安裝所有的模塊:pip install -r require-install.txt
通過命令:pytest --version驗證安裝結果。如果報如下錯誤則需要調整python或pytest的版本,這是python和pytest的版本不兼容:
下面說兩個錯誤例子,一個是win7、python3.7.4以及pytest5.0+,將python降到3.7.3就ok了,另一個是Windows 10, python 3.8.1, pytest 5.3.3,將pytest降到4.6.9以下版本也ok,因此建議你要么降python版本,要么降pytest版本試試。
筆者使用的是:win7+python3.7.3+pytest5.4.1,親測沒問題。
三、 pytest框架基礎應用
- pytest運行函數時和運行類里面的方法情況如下:
importpytestdeftest01():print('測試用例一')defabcd():print('測試用例二')classTestCase:deftest_03(self):print('測試用例三')defdefg(self):print('測試用例四')if__name__=='__main__':pytest.main(['-s','pytest-demo.py'])
運行結果如下:
注意事項:
(1) 測試函數、類中的測試方法都必須以test_ 開頭,當然以什么開頭在pytest可自定義。
(2) 測試類必須以Test開頭,并且不能帶有init方法
(3) 斷言必須使用assert斷言
執行方式:
(1) 主函數方式運行:
指定運行文件:pytest.main([’-s’,‘pytest-demo.py模塊名’])
注意:如果py文件是以test_開頭或者以_test結尾則可以使用pytest.main()運行。因為pytest.main()會運行當前目錄下所有以test_開頭或者以_test結尾的文件。
(2) 命令行方式運行
點開Pycharm左下角的:Terminal打開當面目錄下的命令行窗口。
輸入命令執行:pytest pytest-demo.py模塊名
注意:如果py文件是以test_開頭或者以_test結尾則可以使用pytest命令運行,因為pytest會運行當前目錄下所有以test_開頭或者以_test結尾的文件。
四、 運行時參數說明
-s:顯示打印內容
如:pytest pytest-demo.py -s
等價于:pytest.main([’-s’,‘pytest-demo.py’])
:::指定測試用例運行
運行函數:如:pytest pytest-demo.py::test_01
等價于:pytest.main([’-s’,‘pytest-demo.py::test01’])
運行類中方法:如:pytest pytest-demp.py::TestCase::test_03
等價于:pytest.main([’-s’, ‘pytest-demo.py::TestCase::test_03’])
–html=路徑/report.html:生成xml/html格式測試報告(需要先安裝pytest-html)
如:pytest pytest-demp.py --html-./report.html
等價于:pytest.main([’-s’,‘pytest-demo.py’,’–html=./report.html’])
–maxfail=1:出現1個失敗就終止測試
如:pytest pytest-demo.py --maxfail=1
等價于:pytest.main([’-s’,‘pytest-demo.py’,’–maxfail=1’])
-n:pytest-xdist多線程運行(需要先安裝pytest-xdist)
如:pytest pytest-demo.py -n 2
等價于:pytest.main([’-s’,‘pytest-demo.py’,’-n=2’])
在用例中使用time.sleep(2)加等待時間測試,發現多線程時間減少了。
–reruns NUM:重試運行測試用例(需要先安裝pytest-rerunfailures)
如:pytest pytest-demo.py --reruns 2
則一旦有用例失敗,則會重復執行兩次,貌似這種不能用main運行。
由此能看出:pytest.main([’-s’,‘pytest-demo.py模塊名’]),main方法中是傳入的一個list格式,list中可以傳入多個參數。
五、pytest的ini配置文件
pytest.ini文件是pytest的主配置文件,可以改變pytest的默認行為。
1.pytest.ini的放置位置:一般放在項目工程的根目錄(即當前項目的頂級文件夾下)
2.pytest.ini的作用:指定pytest的運行方式(在cmd輸入pytest后,會讀取pytest.ini中的配置信息,按指定的方式去運行)
3.cmd下使用 pytest -h 命令查看pytest.ini的設置選項(以下截圖只是部分選項)
常用設置選項如下:
[pytest]
addopts = -s … #可添加多個命令行參數,用空格分隔
testpaths = …/pytestproject #測試用例文件夾,可自己配置,…/pytestproject為上一層的pytestproject文件夾。
python_files = test*.py #配置測試搜索的模塊文件名稱
python_classes = Test* #配置測試搜索的測試類名
python_funtions = test #配置測試搜索的測試函數名
示例如下:
[pytest]
addopts = -s --html=./report.html
testpaths = …/pytestproject
python_files = test*.py
python_classes = Test*
python_funtions = test*
注意:
1.運行的時候自動讀取配置文件,運行pytestproject下的所有test開頭的模塊文件。
這可能是B站最詳細的pytest自動化測試框架教程,整整100小時,全程實戰!!!