pytest測試框架 二 fixture介紹

2021-10-12 18:06:41 字數 2055 閱讀 2394

目錄

一、fixture函式的定義

二、fixture函式的呼叫

三、fixture函式的返回

四、conftest.py的使用

五、使用例項

把乙個函式定義為fixture很簡單,只需要在函式宣告之前加上「@pytest.fixture」,引數如下:

fixture(scope="function", params=none, autouse=false, ids=none, name=none)

scope:有四個級別引數 "function" (預設), "class", "module" or "session":

☆ session多個檔案呼叫一次,可以跨.py檔案呼叫

☆ module每個.py檔案呼叫一次

☆ class每個類呼叫一次

☆ function每個函式或方法都會呼叫

params: 乙個可選的引數列表,預設為none。當它不為none時,params裡面的每個值,fixture都會去呼叫執行一次,就像執行for迴圈一樣把params裡的值遍歷一次;

autouse: 當預設為false,就可以選擇另外兩種方式來呼叫fixture。當設定為true時,在乙個session內的所有的測試用例都會自動呼叫這個fixture;

ids: 每個字串id的列表,每個字串對應於params 這樣他們就是測試id的一部分。 如果沒有提供id它們將從params自動生成;

name: fixture的名稱,代表裝飾函式的名稱。

fixture函式定義完成之後,如果想在測試用例中呼叫它,呼叫方式有三種:

☆ 直接呼叫;

☆ 使用fixture呼叫,在測試用例前加上「@pytest.mark.usefixtures(「名」)」;

☆ 使用fixture的autouse引數來呼叫,將autose引數置為true,則該session下的所有用例都會自動呼叫它。

fixture可以返回乙個值、乙個元組、list或字典。

如果多個用例需要呼叫同乙個功能。我們可以將fixture寫入conftest.py 配置檔案裡實現資料共享,同時又方便統一管理這些公共的功能。

conftest.py配置需要注意以下幾點:

☆ conftest.py配置指令碼名稱是固定的,不能改名稱;

☆ conftest.py與執行的用例要在同乙個目錄下,並且有__init__.py檔案;

☆ 不需要import匯入 conftest.py,用例會自動查詢。

conftest.py以及test_fixture.py放在同一目錄下,test_fixture.py即為測試用例。

conftest.py內容如下:

import pytest

@pytest.fixture()

def user():

print("獲取使用者名稱")

a = "hillwill"

b = "wxt"

return (a,b)

test_fixture.py內容如下:

import pytest

def test_1(user):

user1 = user[0]

print("使用者名稱1:%s" % user1)

assert user1 == "hillwill"

def test_2(user):

user2 = user[1]

print("使用者名稱2:%s" % user2)

assert user1 == "wxt"

if __name__ == "__main__":

pytest.main(["-s", "test_fixture.py"])

測試框架 Pytest框架(一)

目錄 pytest的安裝與執行 安裝 執行執行方式及命令 ide中執行 命令列終端執行 生成報告 報告中的亂碼處理 檢查點 斷言 基於python語言的自動化常用的框架有三種,unittest pytest rf。前兩款更多的用於白盒單元測試,rf可以很好的做系統測試使用。安裝pytest pip ...

Pytest測試框架(一)

pip install u pytest 用下面的命令去檢查一下pytest是否成功安裝 pytest version this is pytest version 5.4.1 建立名為test 001.py的檔案,敲如下內容 def reverse string return string 1 d...

測試框架 Pytest框架二(初始化清除)

目錄 初始化和清除 模組級別 類級別方法級別 目錄級別 模組級別的初始化及清除 def setup module print n 初始化 模組 def teardown module print 清除 模組 class test rundemo0 類的初始化和清除 classmethod def s...