python 之 pytest框架

进步的桃白白發表於2024-08-16

一、pytest 單元測試框架

1、什麼是單元測試,針對軟體的最小單位(函式,方法,介面)進行正確性的檢查測試。

2、單元測試框架(按語言分)

java : junit 和testing

python : unittest 和 pytest

3、單元測試主要是做什麼呢?

(1)、測試發現:從多個檔案裡面去找到測試用例

(2)、測試執行:按照一定的順序和規則去執行。並生成結果

(3)、測試判斷:透過斷言判斷預期結果和實際結果的差異

(4)、測試報告:測試統計進度,耗時,透過率,生成測試報告

二、pytest簡介

1、pytest是一個非常成熟的python的單元框架,比unittest更靈活,容易上手。

2、pytest可以和selenium,requests,applum結合實現web自動化,介面自動化,app自動化

3、pytest可以實現測試用例的跳過以及reruns失敗用例重試

4、pytest可以和allure生成非常美觀的測試報告

5、pytest可以和Jenkins持續整合

6、pytest有很多強大的外掛,並且這些外掛能夠實現很多的使用的操作

例如:

pytest

pytest-xdist -- 測試用例分散式執行,多CPU分發

pytest-ordering -- 用於改變測試用例的執行順序

pytest-rerunfailures -- 用例失敗後重跑

pytest-html -- 生成html格式的自動化測試報告

allure-pytest -- 用於生成美觀的測試報告

三、使用pytest,預設的測試用例的規則以及基礎應用

1、模組名必須以test_開頭或者_test結尾

2、測試類必須以Test開頭,並且不能用init方法

3、測試方法必須以test開頭

四、pytest 測試用例的執行方式

1、主函式模式

(1)執行所有:pytest.main()

(2)指定模組:pytest.main(['-vs','test_login.py'])

(3)指定目錄:pytest.main(['-vs','/interface'])

(4)透過nodeid指定用例執行:nodeid由模組名,分隔符,類名,方法名,函式名組成

pytest.main(['-vs','/interface/test_login.py:test_01'])

2、命令列模式

(1)執行所有:pytest

(2)指定模組:pytest -vs test_login.py

(3)指定目錄:pytest -vs /interface

引數詳解:

-s:表示輸出除錯資訊,包含print列印的資訊

-v:顯示更多的資訊

-vs:上面兩個引數一起用

-n:支援多執行緒或者分散式執行測試用例

例:pytest -vs /interface/test_login.py -n 2 (分兩個執行緒)

--reruns num:失敗用例重跑(num重跑次數)

-x:表示只要一個用例報錯,測試停止

--maxfail=2 出現兩個用例失敗停止

-k:根據測試用例的部分字串指定測試用例

例:pytest -vs 。/interface -k "ao"

--html ./interface/interface.html:在interface目錄下生成html的測試報告

3、透過讀取pytest.ini配置檔案執行

pytest.ini檔案是pytest單元測試框架的核心配置檔案

(1)、位置:一般在專案的根目錄

(2)、編碼:必須是ANSI,可以使用notpad++修改編碼格式

(3)、作用:改變pytest預設的行為

(4)、執行的規則:不管是主函式模式執行,命令列模式也能行,都會去讀取這個配置檔案

例:

[pytest]
addopts = -vs --html ./report.html -- 引數
testpaths = ./web -- 測試用例路徑
python_files = test_*.py -- 模組名的規則
python_classes = Test* -- 類名的規則
pythonn_functions = test -- 方法名規則
markers = -- 標記用例
smoke:冒煙測試


五、pytest 用例的執行順序是怎麼樣的?
unittest 以ASCLL的大小來執行
pytest預設從上到下
改變預設執行順序,就用mark標記
例:@pytest.mark.run(order = 3)


六、如何分組執行(冒煙,分模組執行,分介面和web執行)
smoke:貓眼用力,分佈在各個模組
pytest -m "smoke"                -- 就會執行帶有smoke標記的模組
pytest -m "smlke or smoke ir smoke2"     -- 執行多個


七、pytest跳過測試用例
1、無條件跳過
  @pytest.mark.skip(reason = "單純想跳過")
2、有條件跳過
@pytest.mark.skip(age>18,reason = "跳過年紀大於18的")














相關文章