pytest解讀一次請(qǐng)求多個(gè)fixtures及多次請(qǐng)求
跟著節(jié)奏繼續(xù)來(lái)探索fixtures的靈活性。
一、一個(gè)測(cè)試函數(shù)/fixture一次請(qǐng)求多個(gè)fixture
在測(cè)試函數(shù)和fixture函數(shù)中,每一次并不局限于請(qǐng)求一個(gè)fixture。他們想要多少就可以要多少。
下面是另一個(gè)簡(jiǎn)單的例子:
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ì)被緩存起來(lái)。
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"],被緩存起來(lái) return order.append(first_entry) def test_string_only(append_first, order, first_entry): # 在測(cè)試函數(shù)里,order第二次被請(qǐng)求,但是并不會(huì)拿到空列表[],而且拿到了被緩存起來(lái)的["a"] # 所以斷言order == [first_entry],其實(shí)就是 ["a"] == ["a"],測(cè)試通過(guò) # Assert assert order == [first_entry]
從示例中可以看出:
- 在fixture函數(shù)append_first中,order第一次被請(qǐng)求,返回一個(gè)列表[],被緩存起來(lái)。
- 接著,order.append(first_entry)在[]中增加了first_entry的返回值,所以,此時(shí)的order變成了["a"]。
- 最后,在測(cè)試函數(shù)test_string_only中,order第二次被請(qǐng)求,但是并不會(huì)拿到空列表[],而且拿到了被緩存起來(lái)的["a"]。這樣的話,最后的斷言assert order == [first_entry]就會(huì)成功。
反過(guò)來(lái),如果同一個(gè)fixture在一個(gè)測(cè)試函數(shù)中每次都去請(qǐng)求一次,那上面的測(cè)試函數(shù)必然失敗。
因?yàn)?,這樣一來(lái),雖然在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)的異常問(wèn)題
今天小編就為大家分享一篇解決Django刪除migrations文件夾中的文件后出現(xiàn)的異常問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-08-08如何使用Typora+MinIO+Python代碼打造舒適協(xié)作環(huán)境
這篇文章主要介紹了如何使用Typora+MinIO+Python代碼打造舒適協(xié)作環(huán)境,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-05-05PyCharm軟件無(wú)法安裝lxml庫(kù)的問(wèn)題及解決
這篇文章主要介紹了PyCharm軟件無(wú)法安裝lxml庫(kù)的問(wèn)題及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-01-01利用Python多處理庫(kù)處理3D數(shù)據(jù)詳解
本文將介紹處理大量數(shù)據(jù)時(shí)非常方便的工具,例如tqdm與 multiprocessing?imap??一起使用、并行處理檔案、繪制和處理3D數(shù)據(jù)等,感興趣的小伙伴可以了解一下2021-12-12Python與MongoDB交互的代碼實(shí)現(xiàn)
Python與MongoDB的交互通常通過(guò)pymongo庫(kù)來(lái)實(shí)現(xiàn),pymongo是一個(gè)官方的Python驅(qū)動(dòng)程序,用于與MongoDB數(shù)據(jù)庫(kù)進(jìn)行交互,以下是一個(gè)簡(jiǎn)單的示例,具有一定的參考價(jià)值,需要的朋友可以參考下2024-10-10python散點(diǎn)圖雙軸設(shè)置坐標(biāo)軸刻度的實(shí)現(xiàn)
散點(diǎn)圖是一種常用的圖表類(lèi)型,可以用來(lái)展示兩個(gè)變量之間的關(guān)系,本文主要介紹了python散點(diǎn)圖雙軸設(shè)置坐標(biāo)軸刻度的實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下2024-01-01Python requests庫(kù)用法實(shí)例詳解
這篇文章主要介紹了Python requests庫(kù)用法,結(jié)合實(shí)例形式分析了Request庫(kù)的功能、安裝、請(qǐng)求創(chuàng)建、響應(yīng)等相關(guān)操作技巧,需要的朋友可以參考下2018-08-08