pytest文件66 工廠化的 fixtures

2022-06-13 08:48:07 字數 1863 閱讀 1372

在乙個測試用例中需要多次呼叫同乙個fixture的時候,工廠化的 fixture 的模式對於乙個 fixture 在單一的測試中需要被多次呼叫非常有用。

之前寫fixture是直接return乙個資料,在測試用例中可以直接使用,現在我們需要返回乙個生成資料的函式,這樣就能在用例中多次呼叫了。

「factories as fixtures」模式可以幫助在一次測試中多次需要乙個fixture的結果的情況下。

fixture不是直接返回資料,而是返回乙個生成資料的函式。然後可以在測試中多次呼叫此函式。

使用示例

import pytest

@pytest.fixture

def make_customer_record():

def _make_customer_record(name):

return

return _make_customer_record

def test_customer_records(make_customer_record):

customer_1 = make_customer_record("lisa")

customer_2 = make_customer_record("mike")

customer_3 = make_customer_record("meredith")

如果工廠建立的資料需要管理,那麼fixture可以處理:

import pytest

@pytest.fixture

def make_customer_record():

created_records =

def _make_customer_record(name):

record = models.customer(name=name, orders=)

return record

yield _make_customer_record

for record in created_records:

record.destroy()

def test_customer_records(make_customer_record):

customer_1 = make_customer_record("lisa")

customer_2 = make_customer_record("mike")

customer_3 = make_customer_record("meredith")

有個場景案例:當使用者第一次註冊的時候,可以註冊成功,第二次註冊的時候,提示使用者已被註冊了

import pytest

# 作者-上海悠悠 qq***:717225969

# blog位址

@pytest.fixture()

def register():

def _register(user):

# 呼叫註冊介面,返回結果

print("註冊使用者:%s" % user)

result =

return result

return _register

def test_case_1(register):

'''測試重複註冊介面案例'''

# 第一次呼叫註冊

result1 = register("yoyo")

assert result1["message"] == "success"

# 第二次呼叫

result2 = register("yoyo")

# 真實場景可以斷言 已被註冊了

這種場景把註冊寫到fixture的話,在測試用例裡面就需要呼叫兩次

c 典型工廠化實現例項

工廠介面定義 複製 如下 n程式設計客棧bsp 工廠介面定義 ttarget abstract product type tsource concrete product type public inte ce ifactory 註冊類複製 如下 public sealed class typere...

pytest文件9 引數化parametrize

pytest.mark.parametrize裝飾器可以實現測試用例引數化。1.這裡是乙個實現檢查一定的輸入和期望輸出測試功能的典型例子 content of test expectation.py coding utf 8 import pytest pytest.mark.parametrize...

pytest文件9 引數化parametrize

pytest.mark.parametrize裝飾器可以實現測試用例引數化。1.這裡是乙個實現檢查一定的輸入和期望輸出測試功能的典型例子 content of test expectation.py coding utf 8 import pytest pytest.mark.parametrize...