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