Pytest Pytest框架的使用

2021-09-24 21:43:31 字數 4188 閱讀 8369

1、pytest介紹

基於unittest之上的單元測試框架

(1)、自動發現測試模組和測試方法;

(2)、斷言使用assert+表示式即可;

(3)、可以設定會話(從執行所有用例開始-用例結束)級,模組(.py)級,類級(setupclass/teardownclass),

函式(測試用例)級的fixtures,資料準備+清理工作

(4)、有豐富的外掛程式,300+以上。==allure

(5)、測試用例不一定要放在測試類當中。

安裝命令:pip install pytest

安裝html報告外掛程式:pip install pytest-html

pytest收集測試用例的規則:

(1)、預設從當前目錄中收集測試用例,即在哪個目錄下執行pytest命令,則從哪個目錄當中搜尋;

(2)、搜尋規則:

a、符合命名規則,test_*.py 或者 *_test.py的檔案;

b、以test_開頭的函式名;

c、以test開頭的測試類,(沒有__init__函式)當中,以test_開頭的函式;

d、斷言使用基本的assert即可;

pytest的特點:

1、簡單靈活,容易上手,文件豐富;

2、支援引數化,可以細粒度地控制要測試的測試用例;

3、能夠支援簡單的單元測試和複雜的功能測試,

介面自動化測試(pytest+requests);

4、pytest具有很多第三方外掛程式,並且可以自定義擴充套件,比較好用的如:

pytest-selenium(整合selenium)、

pytest-html(完美html測試報告生成)、

pytest-rerunfailures(失敗case重複執行)、

pytest-xdist(多cpu分發)等;

5、測試用例的skip和xfail處理;

6、可以很好的和ci工具結合,例如jenkins

2、pytest之mark功能

mark機制  4.6

先註冊 pytest.ini [pytest] markers=標籤名:說明

去給用例打標籤

@pytest.mark.已註冊的標籤名

測試類和模組: 類下面設定類屬性值,模組下面設定全域性變數。

pytestmarker=pytest.mark.已註冊的標籤名

多個標籤:pytestmarker=[pytest.mark.已註冊的標籤名,pytest.mark.已註冊的標籤名]

3、pytest之命令執行用例

4、pytest之fixture功能

(1)、定義fixture

1.1 建立了乙個conftest.py檔案

1.2 在conftest中,建立fixture

1.3 定義函式,函式前面加上@pytest.fixture(scope=作用域)

函式內部:yield 隔開前置後後置的**,之前是前置,之後是後置

yield 返回值(後面跟上返回值用於呼叫)

(2)、呼叫fixture

在測試用例.測試類 前面加上(@pytest.mark.usefixtures("fixture對應的函式名稱"));

fixture對應的函式名稱=它的返回值;

fixture對應的函式名稱作為測試用例的引數,將返回值傳給測試用例;

fixure 在conftest.py當中,定義的時候,就已經決定了他的用例域,決定了它的命運;

fixture可以有很多個;

無論在測試類、測試用例去主動呼叫fixture,都不能夠改變它的命運;

呼叫就是決定在哪兒去使用它。在哪個測試類?

pytest的用例執行順序:

基本原則:按照搜尋規則,先匹配到的先執行。

1、檔名稱:按名稱名稱順序去搜尋。先找到的,先去內部找用例。

2、在py檔案內部:按照**順序去找用例。先找到的先執行。

(3)、fixture暫不支援與unittest同用,斷言都用assert.

(4)、pytest之fixture引數化-多執行,pytest層級覆蓋。測試用例與其同級或者在其子目錄

(5)、fixture的scope引數

scope引數有四種,分別是'function','module','class','session',預設為function。

function:每個test都執行,預設是function的scope

class:每個class的所有test只執行一次

module:每個module的所有test只執行一次

session:每個session只執行一次

(6)、setup和teardown操作

setup,在測試函式或類之前執行,完成準備工作,例如資料庫鏈結、測試資料、開啟檔案等

teardown,在測試函式或類之後執行,完成收尾工作,例如斷開資料庫鏈結、**記憶體資源等

備註:也可以通過在fixture函式中通過yield實現setup和teardown功能

(7)、fixture定義與呼叫

定義 == 定命運。session、modle、class、function

呼叫 == 你準備把它在哪兒用?

session:整個會話都有效。

module:模組內有效。

class:類內有效。

function:測試用例內有效。

conftest.py檔案。 === 定義多個fixture.

5、pytest之引數化—ddt

引數化  ddt   引數名 = 用例的引數名稱

在測試用例的前面加上:

@pytest.mark.parametrize("引數名",列表)

引數名:用來接收每一項資料,並作為測試用例的引數;

@pytest.mark.parametrize("引數1,引數2",[(數1,數2),(數1,數2)]);

排列組合。多個引數的值排列組合。在乙個用例前面 ,使用多個@pytest.mark.parametrize

示例:用例有4個:0,2/0,3/1,2/1,3

@pytest.mark.parametrize("x", [0, 1])

@pytest.mark.parametrize("y", [2, 3])

def test_foo(x, y):

pass

6、pytest之重執行

外掛程式名稱:rerunfailures

安裝方法:pip install pytest-rerunfailures(失敗case重複執行)

使用方式:

命令列引數形式:

命令:pytest -reruns 重試次數

比如:pytest --reruns 2 表示:執行失敗的用例可以重新執行兩次

命令:pytest --reruns 重試次數 --reruns-delay 次數之間設定的延時(單位:秒)

pytest --reruns 2 --reruns-delay 5

表示失敗的用例可以重新執行2次,第一次和第二次的時間間隔為5秒;

7、pytest之html報告

測試報告  = junitxml,html,allure

1、先裝外掛程式

2、命令列的引數:

--html=相對路徑/report.html # 相對於pytest命令執行時,所在的根目錄。

--alluredir=相對路徑

4、生成allure檔案之後,用命令:allure serve alluredir

os.system("")

allure與jenkins的整合、重執行機制、pytest中的失敗截圖。

1、生成junitxml格式的測試報告:命令:--junitxml = path

2、生成result log格式的測試報告:命令:--resultlog=report、log.txt

3、生成html格式的測試報告:命令:--html=report\test_one_func.html(相對路徑)

# pytest -v -s -m demo --html=demo/po_v6/outputs/reports/pytest_run_reports.html

8、pytest之allure測試(allure測試報告)

Pytest Pytest基礎(持續學習更新)

fixture 優勢 1 命名方式靈活,不侷限於 setup 和 teardown 返幾個命名 2 conftest.py 配置裡可以實現資料共享,不需要 import 就能自動找到一些配置 3 scope module 可以實現多個.py 跨檔案共享前置 4 scope session 以實現多個...

目標檢測框架mmdetection框架的安裝與測試

1 框架介紹 這個框架還是非常清晰的,整個 從骨架,模型,bbox處理,推斷等都有專門的專案資料夾。而且提供了當前許多主流的目標檢測模型的實現。2 安裝 建議使用conda的方式來安裝,用 重新編譯的方式會出現一些bug。在conda環境下有一些支援的lib容易有,而用傳統的python包的方式,在...

框架的概念,框架與庫的區別

框架,庫的區別?庫,供我們呼叫。比如,檔案處理類。處理類。框架,組織controller。框架是 的半成品。成熟的框架往往包含大量的常用庫 處理庫,檔案上傳庫等 為什麼用框架?接收引數 驗證引數 拼接sql語句 考慮安全性,是否有sql注入 執行sql等等。mysql connect mysql q...