<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
分享一個關於在pytest中,如何將測試用例檔案中的變數傳遞到fixture函數。
ok,大背景是這樣的。
現在有小夥伴來需求了,她要在setup_before()裡去造數,通過請求另一個介面,這個請求也需要使用token。
那麼,問題也就可以轉化為:
這裡把實際程式碼抽象一下,轉化為簡易程式碼,方便演示和理解:
# 目錄結構 -- /demo_top -- /demo_sub __init__.py conftest.py test_case.py __init__.py conftest.py
以下分別是/demo_top/conftest.py、/demo_top/demo_sub/conftest.py、/demo_top/demo_sub/test_case.py的內容。
# content of /demo_top/conftest.py import pytest @pytest.fixture() def gen_token(request): params = request.param print("n根目錄下gen_token()拿到的引數:", params) if params[0] + params[1] == 5: return "api_token" else: return None
這裡,模擬生成token的fixture函數,當傳過來的值相加等於5,就會返回"api_token",否則返回None。
# content of /demo_top/demo_sub/conftest.py import pytest @pytest.fixture() def setup_before(request, gen_token): print("執行子級setup_before,拿到的傳參:", request.param) print("執行子級setup_before,拿到gen_token的返回值:", gen_token) if gen_token: yield "造數完成" print("測試用例test_case執行完畢,清理測試資料") else: pytest.skip("跳過")
這裡模擬了給測試用例造資料的fixture函數,如果沒拿到token的話,就跳過測試用例。
# content of /demo_top/demo_sub/test_case.py import pytest test_param = [(1, 4)] @pytest.mark.parametrize("gen_token", test_param, indirect=True) @pytest.mark.parametrize("setup_before", test_param, indirect=True) def test_case1(gen_token, setup_before): print("n測試用例裡拿到的gen_token返回值:", gen_token) print("測試用例裡拿到的setup_before返回值:", setup_before) print("執行測試用例test_case1...") if __name__ == '__main__': pytest.main(['-s', 'test_case.py'])
這是測試用例檔案了,裡面有個測試函數test_case1,因為它需要用到2個fixture函數返回的值,所以gen_token, setup_before都請求。
fixture之間的相互呼叫,在之前的文章裡已經有過詳述了。既然這裡setup_before依賴gen_token,之間傳遞呼叫即可setup_before(request, gen_token)。
在各環節做了些print列印出資訊,幫助理解執行過程。
test_case.py [100%] ============================== 1 passed in 0.08s ============================== 根目錄下gen_token()拿到的引數: (1, 4) 執行子級setup_before,拿到的傳參: (1, 4) 執行子級setup_before,拿到gen_token的返回值: api_token . 測試用例裡拿到的gen_token返回值: api_token 執行測試用例test_case1... 測試用例test_case執行完畢,清理測試資料 Process finished with exit code 0
再看下gen_token不返回token的情況,改下傳參test_param = [(2, 4)]。
test_case.py [100%] ============================= 1 skipped in 0.08s ==============================s 根目錄下gen_token()拿到的引數: (2, 4) 執行子級setup_before,拿到的傳參: (2, 4) 執行子級setup_before,拿到gen_token的返回值: None Skipped: 跳過 Process finished with exit code 0
測試用例不執行。
以上就是pytest使用parametrize將引數化變數傳遞到fixture的詳細內容,更多關於pytest parametrize變數傳遞fixture的資料請關注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