下載本文檔
版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第pytest使用parametrize將參數(shù)化變量傳遞到fixture目錄一、交代應(yīng)用場(chǎng)景二、使用@pytest.mark.parametrize、以及fixture的調(diào)用來(lái)解決1./demo_top/conftest.py2./demo_top/demo_sub/conftest.py3./demo_top/demo_sub/test_case.py參數(shù)傳遞fixture調(diào)用fixture分享一個(gè)關(guān)于在pytest中,如何將測(cè)試用例文件中的變量傳遞到fixture函數(shù)。
一、交代應(yīng)用場(chǎng)景
目前組內(nèi)的項(xiàng)目,在根目錄下是有一個(gè)conftest.py文件的,這里有個(gè)生成apitoken的fixture函數(shù),就叫它gen_token()吧。每個(gè)case包下,也會(huì)有個(gè)conftest.py,用于存放適用于本模塊下測(cè)試用例的fixture函數(shù),比如有個(gè)叫setup_before()。因?yàn)槟胻oken是請(qǐng)求接口的前提,所以在case里,比如有個(gè)test_case()里,要傳頂層的fixture函數(shù),也就是這樣test_case(gen_token)。頂層的gen_token(),是需要3個(gè)傳參的。因?yàn)椴煌琧ase可能涉及到的生成不同用戶(hù)的token,所以我們把這個(gè)參數(shù)放在了case文件里。
ok,大背景是這樣的。
現(xiàn)在有小伙伴來(lái)需求了,她要在setup_before()里去造數(shù),通過(guò)請(qǐng)求另一個(gè)接口,這個(gè)請(qǐng)求也需要使用token。
那么,問(wèn)題也就可以轉(zhuǎn)化為:
要將case文件里的參數(shù),傳遞到fixture函數(shù)中。gen_token()里返回的值,setup_before()和test_case()里都要拿到。
二、使用@pytest.mark.parametrize、以及fixture的調(diào)用來(lái)解決
這里把實(shí)際代碼抽象一下,轉(zhuǎn)化為簡(jiǎn)易代碼,方便演示和理解:
#目錄結(jié)構(gòu)
--/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的內(nèi)容。
1./demo_top/conftest.py
#contentof/demo_top/conftest.py
importpytest
@pytest.fixture()
defgen_token(request):
params=request.param
print("\n根目錄下gen_token()拿到的參數(shù):",params)
ifparams[0]+params[1]==5:
return"api_token"
else:
returnNone
這里,模擬生成token的fixture函數(shù),當(dāng)傳過(guò)來(lái)的值相加等于5,就會(huì)返回api_token,否則返回None。
2./demo_top/demo_sub/conftest.py
#contentof/demo_top/demo_sub/conftest.py
importpytest
@pytest.fixture()
defsetup_before(request,gen_token):
print("執(zhí)行子級(jí)setup_before,拿到的傳參:",request.param)
print("執(zhí)行子級(jí)setup_before,拿到gen_token的返回值:",gen_token)
ifgen_token:
yield"造數(shù)完成"
print("測(cè)試用例test_case執(zhí)行完畢,清理測(cè)試數(shù)據(jù)")
else:
pytest.skip("跳過(guò)")
這里模擬了給測(cè)試用例造數(shù)據(jù)的fixture函數(shù),如果沒(méi)拿到token的話(huà),就跳過(guò)測(cè)試用例。
3./demo_top/demo_sub/test_case.py
#contentof/demo_top/demo_sub/test_case.py
importpytest
test_param=[(1,4)]
@pytest.mark.parametrize("gen_token",test_param,indirect=True)
@pytest.mark.parametrize("setup_before",test_param,indirect=True)
deftest_case1(gen_token,setup_before):
print("\n測(cè)試用例里拿到的gen_token返回值:",gen_token)
print("測(cè)試用例里拿到的setup_before返回值:",setup_before)
print("執(zhí)行測(cè)試用例test_case1...")
if__name__=='__main__':
pytest.main(['-s','test_case.py'])
這是測(cè)試用例文件了,里面有個(gè)測(cè)試函數(shù)test_case1,因?yàn)樗枰玫?個(gè)fixture函數(shù)返回的值,所以gen_token,setup_before都請(qǐng)求。
參數(shù)傳遞
@pytest.mark.parametrize:使用pytest內(nèi)置的parametrize,來(lái)把參數(shù)傳遞給目標(biāo)fixture函數(shù),你希望把參數(shù)傳遞給哪個(gè)fixture函數(shù)就加哪個(gè)。比如這里的gen_token和setup_before,注意名稱(chēng)與fixture名稱(chēng)一致。indirect=True:作用是讓parametrize中的參數(shù)名稱(chēng),也就是gen_token當(dāng)成函數(shù)執(zhí)行,并且后面的參數(shù)值test_param,作為gen_token的傳參。request.param:接受傳參的fixture函數(shù),使用request.param來(lái)獲取值。
fixture調(diào)用fixture
fixture之間的相互調(diào)用,在之前的文章里已經(jīng)有過(guò)詳述了。既然這里setup_before依賴(lài)gen_token,之間傳遞調(diào)用即可setup_before(request,gen_token)。
在各環(huán)節(jié)做了些print打印出信息,幫助理解執(zhí)行過(guò)程。
test_case.py[100%]
==============================1passedin0.08s==============================
根目錄下gen_token()拿到的參數(shù):(1,4)
執(zhí)行子級(jí)setup_before,拿到的傳參:(1,4)
執(zhí)行子級(jí)setup_before,拿到gen_token的返回值:api_token
測(cè)試用例里拿到的gen_token返回值:api_token
執(zhí)行測(cè)試用例test_case1...
測(cè)試用例test_case執(zhí)行完畢,清理測(cè)試數(shù)據(jù)
Processfinishedwithexitcode0
再看下gen_token不返回token的情況,改下傳參test_param=[(2,4)]。
test_case.py[100%]
=============================1skippedin0.08s==============================s
根目錄下gen_token()拿到的參數(shù):(2,4)
執(zhí)行子級(jí)setup_before,拿到的傳參:(2,4)
執(zhí)行子級(jí)setup_before
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 硅芯制備工安全宣貫測(cè)試考核試卷含答案
- 栲膠蒸發(fā)工崗前實(shí)操知識(shí)技能考核試卷含答案
- 油母頁(yè)巖供料工崗前創(chuàng)新思維考核試卷含答案
- 2022-2023學(xué)年吉林省白山市普通高校對(duì)口單招綜合素質(zhì)自考真題(含答案及部分解析)
- 2025年本地網(wǎng)傳輸系統(tǒng)合作協(xié)議書(shū)
- 2025年原油加工量合作協(xié)議書(shū)
- 2025年LED超大屏幕顯示器項(xiàng)目發(fā)展計(jì)劃
- 三級(jí)安全教育考試卷(附答案)
- 醫(yī)院檢驗(yàn)科年度工作總結(jié)及計(jì)劃
- 2026營(yíng)養(yǎng)師基礎(chǔ)知識(shí)試題及答案
- 特殊作業(yè)之-斷路作業(yè)安全教育培訓(xùn)
- 中華醫(yī)學(xué)會(huì)麻醉學(xué)分會(huì)困難氣道管理指南
- 醫(yī)務(wù)部會(huì)議管理制度范本
- 繪本制作培訓(xùn)課件
- 客戶(hù)分配管理辦法管理
- 燃?xì)馊霊?hù)安檢培訓(xùn)
- 高中地理思政融合課《全球氣候變暖》
- 《山東省市政工程消耗量定額》2016版交底培訓(xùn)資料
- 《中醫(yī)六經(jīng)辨證》課件
- 掛名合同協(xié)議書(shū)
- 蘇教版高中化學(xué)必修二知識(shí)點(diǎn)
評(píng)論
0/150
提交評(píng)論