<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
fixture有效性,說白了就是fixture函數只有在它定義的使用範圍內,才可以被請求到。比如,在類裡面定義了一個fixture,那麼就只能是這個類中的測試函數才可以請求。但是,如果一個fixture定義的範圍是整個模組,那麼這個模組下的每個測試函數都可以去請求。
這裡還有另一個影響fixture有效性的引數autouse=True
,預設為False,等於True的話會在其他fixture之前先執行該fixture,後面有需要另起一篇,這裡簡短帶過。
另外,一個fixture函數還可以請求任何其他的fixture函數。不管被請求的那個fixture函數在哪裡定義,只要測試函數請求了它們,fixture函數就可以。
看範例程式碼(為了更直觀的看效果,在官方程式碼基礎上我加了幾個fixture函數的print):
# content of test_module1.py import pytest @pytest.fixture def order(): print("n執行fixture函數-order") return [] @pytest.fixture def outer(order, inner): print("執行fixture函數-outer") order.append("outer") class TestOne: @pytest.fixture def inner(self, order): print("執行TestOne下的fixture-inner") order.append("one") def test_order(self, order, outer): assert order == ["one", "outer"] class TestTwo: @pytest.fixture def inner(self, order): print("執行TestTwo下的fixture-inner") order.append("two") def test_order(self, order, outer): assert order == ["two", "outer"]
注意:
outer
在測試類的外部inner
的fixture函數,分別在測試類TestOne
和TestTwo
中。outer
中,又請求了內部的fixture函數inner
。現在我只執行類TestOne
,看執行結果:
test_module1.py 執行fixture函數-order 執行TestOne下的fixture-inner 執行fixture函數-outer . [100%] ============================== 1 passed in 0.01s ============================== Process finished with exit code 0
說明測試函數裡的斷言通過。測試函數執行的時候,外部outer
請求的inner
是TestOne
下的。雖然TestOne
類下的inner
,只能作用於TestOne
下的測試函數。但是,由於測試函數請求了外部的outer
,所以,外部的outer
也就可以請到內部的inner
。
官方還給出一個示意圖,可以結合著上述的思路,理解一下。
注意,fixture定義的範圍與它將被範例化的順序無關:範例化順序由呼叫邏輯強制執行
可以參考 https://www.jb51.net/article/250148.htm
如果你把fixture函數放到conftest.py
檔案中,那麼在這個檔案所在的整個目錄下,都可以直接請求裡面的fixture,不需要匯入。
在實際場景中,我們的測試目錄或者包可能有多層的巢狀,這種情況下,每個目錄都可以有一個自己的conftest檔案。比如,像這樣:
各層級裡的內容是這樣的:
tests/ __init__.py conftest.py # content of tests/conftest.py import pytest @pytest.fixture def order(): return [] @pytest.fixture def top(order, innermost): order.append("top") test_top.py # content of tests/test_top.py import pytest @pytest.fixture def innermost(order): order.append("innermost top") def test_order(order, top): assert order == ["innermost top", "top"] subpackage/ __init__.py conftest.py # content of tests/subpackage/conftest.py import pytest @pytest.fixture def mid(order): order.append("mid subpackage") test_subpackage.py # content of tests/subpackage/test_subpackage.py import pytest @pytest.fixture def innermost(order, mid): order.append("innermost subpackage") def test_order(order, top): assert order == ["mid subpackage", "innermost subpackage", "top"]
同樣的,這裡也有一張作用域邊界圖幫助理解。
知識點:
其實對於上述,按照我的白話來說,想用conftest裡的fixture函數,你只能用同層級或者上層級的。但是上級裡的其他兄弟目錄或者包,以及他們的下層級的conftest,你是不能用的。
但是讀了官方檔案,我覺得官方的那個圈子描述挺不錯的,更嚴謹。
以上就是pytest解讀fixture有效性及跨檔案共用fixtures的詳細內容,更多關於 pytest解讀fixture fixtures的資料請關注it145.com其它相關文章!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45