pytest使用parametrize將參數(shù)化變量傳遞到fixture_第1頁(yè)
pytest使用parametrize將參數(shù)化變量傳遞到fixture_第2頁(yè)
pytest使用parametrize將參數(shù)化變量傳遞到fixture_第3頁(yè)
pytest使用parametrize將參數(shù)化變量傳遞到fixture_第4頁(yè)
pytest使用parametrize將參數(shù)化變量傳遞到fixture_第5頁(yè)
全文預(yù)覽已結(jié)束

下載本文檔

版權(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論