pytest解讀一次請(qǐng)求多個(gè)fixtures及多次請(qǐng)求
跟著節(jié)奏繼續(xù)來探索fixtures的靈活性。
一、一個(gè)測(cè)試函數(shù)/fixture一次請(qǐng)求多個(gè)fixture
在測(cè)試函數(shù)和fixture函數(shù)中,每一次并不局限于請(qǐng)求一個(gè)fixture。他們想要多少就可以要多少。
下面是另一個(gè)簡單的例子:
import pytest
# Arrange
@pytest.fixture
def first_entry():
return "a"
# Arrange
@pytest.fixture
def second_entry():
return 2
# Arrange
@pytest.fixture
def order(first_entry, second_entry):
# 這是一個(gè)fixture函數(shù),請(qǐng)求了2個(gè)其他的fixture函數(shù)
return [first_entry, second_entry]
# Arrange
@pytest.fixture
def expected_list():
return ["a", 2, 3.0]
def test_string(order, expected_list):
# 這是一個(gè)測(cè)試函數(shù),請(qǐng)求了2個(gè)不同的fixture函數(shù)
# Act
order.append(3.0)
# Assert
assert order == expected_list
可以看出,在fixture函數(shù)order中,請(qǐng)求了2個(gè)其他的fixture函數(shù),分別是:first_entry、second_entry。
在測(cè)試函數(shù)test_string中,請(qǐng)求了2個(gè)不同的fixture函數(shù),分別是:order、expected_list。
二、每個(gè)測(cè)試函數(shù)可以多次請(qǐng)求fixtures(返回值被緩存)
在同一個(gè)測(cè)試函數(shù)中,fixture也可以被請(qǐng)求多次。但是在這個(gè)測(cè)試函數(shù)中,pytest在第一次執(zhí)行fixture函數(shù)之后,不會(huì)再次執(zhí)行它們。
如果第一次執(zhí)行fixture函數(shù)有返回值,那么返回值會(huì)被緩存起來。
import pytest
# Arrange
@pytest.fixture
def first_entry():
return "a"
# Arrange
@pytest.fixture
def order():
return []
# Act
@pytest.fixture
def append_first(order, first_entry):
# 在這里order第一次被請(qǐng)求,返回一個(gè)列表[]
# 接著,order空列表增加了first_entry的返回值,此時(shí)的order變成了["a"],被緩存起來
return order.append(first_entry)
def test_string_only(append_first, order, first_entry):
# 在測(cè)試函數(shù)里,order第二次被請(qǐng)求,但是并不會(huì)拿到空列表[],而且拿到了被緩存起來的["a"]
# 所以斷言order == [first_entry],其實(shí)就是 ["a"] == ["a"],測(cè)試通過
# Assert
assert order == [first_entry]
從示例中可以看出:
- 在fixture函數(shù)append_first中,order第一次被請(qǐng)求,返回一個(gè)列表[],被緩存起來。
- 接著,order.append(first_entry)在[]中增加了first_entry的返回值,所以,此時(shí)的order變成了["a"]。
- 最后,在測(cè)試函數(shù)test_string_only中,order第二次被請(qǐng)求,但是并不會(huì)拿到空列表[],而且拿到了被緩存起來的["a"]。這樣的話,最后的斷言assert order == [first_entry]就會(huì)成功。
反過來,如果同一個(gè)fixture在一個(gè)測(cè)試函數(shù)中每次都去請(qǐng)求一次,那上面的測(cè)試函數(shù)必然失敗。
因?yàn)椋@樣一來,雖然在append_first中的返回值仍然是["a"],但是在test_string_only中,又去重新請(qǐng)求了一次order,拿到的其實(shí)是空列表[],所以最后斷言會(huì)失敗。
以上就是pytest解讀一次請(qǐng)求多個(gè)fixtures及多次請(qǐng)求 的詳細(xì)內(nèi)容,更多關(guān)于pytest解讀fixtures請(qǐng)求 的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
- pytest解讀fixtures中yield與addfinalizer區(qū)別
- pytest解讀fixtures之Teardown處理yield和addfinalizer方案
- pytest官方文檔解讀fixtures的調(diào)用方式
- pytest官方文檔解讀fixtures
- pytest官方文檔解讀fixtures的autouse
- pytest官方文檔解讀fixtures調(diào)用fixtures及fixture復(fù)用性
- pytest解讀fixture有效性及跨文件共享fixtures
- pytest?fixtures函數(shù)及測(cè)試函數(shù)的參數(shù)化解讀
- pytest fixtures裝飾器的使用和如何控制用例的執(zhí)行順序
- Pytest中Fixtures的高級(jí)用法
相關(guān)文章
解決Django刪除migrations文件夾中的文件后出現(xiàn)的異常問題
今天小編就為大家分享一篇解決Django刪除migrations文件夾中的文件后出現(xiàn)的異常問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-08-08
如何使用Typora+MinIO+Python代碼打造舒適協(xié)作環(huán)境
這篇文章主要介紹了如何使用Typora+MinIO+Python代碼打造舒適協(xié)作環(huán)境,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-05-05
Python與MongoDB交互的代碼實(shí)現(xiàn)
Python與MongoDB的交互通常通過pymongo庫來實(shí)現(xiàn),pymongo是一個(gè)官方的Python驅(qū)動(dòng)程序,用于與MongoDB數(shù)據(jù)庫進(jìn)行交互,以下是一個(gè)簡單的示例,具有一定的參考價(jià)值,需要的朋友可以參考下2024-10-10
python散點(diǎn)圖雙軸設(shè)置坐標(biāo)軸刻度的實(shí)現(xiàn)
散點(diǎn)圖是一種常用的圖表類型,可以用來展示兩個(gè)變量之間的關(guān)系,本文主要介紹了python散點(diǎn)圖雙軸設(shè)置坐標(biāo)軸刻度的實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下2024-01-01

