在乙個測試用例中需要多次呼叫同乙個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...