成人性生交大片免费看视频r_亚洲综合极品香蕉久久网_在线视频免费观看一区_亚洲精品亚洲人成人网在线播放_国产精品毛片av_久久久久国产精品www_亚洲国产一区二区三区在线播_日韩一区二区三区四区区区_亚洲精品国产无套在线观_国产免费www

主頁 > 知識庫 > pytest進階教程之fixture函數(shù)詳解

pytest進階教程之fixture函數(shù)詳解

熱門標(biāo)簽:西藏智能外呼系統(tǒng)五星服務(wù) 工廠智能電話機器人 江蘇客服外呼系統(tǒng)廠家 清遠360地圖標(biāo)注方法 在哪里辦理400電話號碼 千陽自動外呼系統(tǒng) 400電話申請服務(wù)商選什么 原裝電話機器人 平頂山外呼系統(tǒng)免費

fixture函數(shù)存在意義

  與python自帶的unitest測試框架中的setup、teardown類似,pytest提供了fixture函數(shù)用以在測試執(zhí)行前和執(zhí)行后進行必要的準(zhǔn)備和清理工作。但是相對來說又比setup、teardown好用。

firture相對于setup和teardown的優(yōu)勢

  1. 命名方式靈活,不局限于setup和teardown這幾個命名
  2. conftest.py 配置里可以實現(xiàn)數(shù)據(jù)共享,不需要import就能自動找到一些配置
  3. scope="module" 可以實現(xiàn)多個.py跨文件共享前置, 每一個.py文件調(diào)用一次
  4. scope="session" 以實現(xiàn)多個.py跨文件使用一個session來完成多個用例

fixture函數(shù)定義

  通過將fixture聲明為參數(shù)名,測試用例函數(shù)可以請求fixture。fixture修飾器來標(biāo)記固定的工廠函數(shù),在其他函數(shù),模塊,類或整個工程調(diào)用它時會被激活并優(yōu)先執(zhí)行,通常會被用于完成預(yù)置處理和重復(fù)操作。

# 定義的夾具函數(shù),使用裝飾器pytest.fixture
@pytest.fixture
def my_fruit():
 print("login:用戶執(zhí)行登錄操作")

# 使用夾具函數(shù)的測試用例
def test_my_fruit_in_basket(my_fruit):
 print("hello world")

if __name__ == '__main__':
 pytest.main(['test_login.py::test_my_fruit_in_basket', '-s'])

#執(zhí)行結(jié)果:
collected 1 item
test_login.py login:
用戶執(zhí)行登錄操作
hello world
.
============================== 1 passed in 0.02s ==========================

fixture作用

  • 做測試前后的初始化設(shè)置,如測試數(shù)據(jù)準(zhǔn)備,鏈接數(shù)據(jù)庫,打開瀏覽器等這些操作都可以使用fixture來實現(xiàn)。
  • 測試用例的前置條件可以使用fixture實現(xiàn) 。
  • 支持經(jīng)典的xunit fixture ,像unittest使用的setup和teardown。
  • fixture可以實現(xiàn)unittest不能實現(xiàn)的功能,比如unittest中的測試用例和測試用例之間是無法傳遞參數(shù)和數(shù)據(jù)的,但是fixture卻可以解決這個問題。

調(diào)用fixture有三種方式

Fixture名字作為測試用例的參數(shù)

  可以直接使用fixture名稱作為輸入?yún)?shù)(是個典型的高階函數(shù)),在這種情況下,fixture函數(shù)返回的fixture實例將被注入,最終在測試用例執(zhí)行前執(zhí)行這個裝飾過的函數(shù)。如下列代碼,①將返回值傳遞給測試用例,②通過函數(shù)入?yún)⒎绞剑梢詡魅攵鄠€fixture函數(shù)

import pytest

@pytest.fixture
def first_entry():
 return "a"
@pytest.fixture
def order(first_entry):
 return [first_entry]
def test_string(order):
 order.append("b")
 assert order == ["a", "b"], "斷言執(zhí)行失敗"

if __name__ == '__main__':
 pytest.main(['test_login.py::test_string', '-s'])

使用@pytest.mark.usefixtures('fixture')裝飾器

   每個函數(shù)或者類前使用@pytest.mark.usefixtures('fixture')裝飾器進行裝飾。

import pytest
@pytest.fixture
def my_fruit():
 print("login:用戶執(zhí)行登錄操作")

# 被夾具函數(shù)裝飾的測試用例
@pytest.mark.usefixtures("my_fruit")
def test_my_fruit_in_basket():
 print("hello world")


if __name__ == '__main__':
 pytest.main(['test_login.py', '-s', '-q'])
 
# 執(zhí)行結(jié)果
login:用戶執(zhí)行登錄操作 
hello world 
. 
1 passed in 0.01s

使用autouse參數(shù)

  指定fixture的參數(shù)autouse=True這樣模塊內(nèi)的每個測試用例會自動調(diào)用fixture。

import pytest
@pytest.fixture(autouse=True)
def my_fruit():
 print("login:用戶執(zhí)行登錄操作")

# 被夾具函數(shù)裝飾的測試用例
def test_my_fruit_in_basket():
 print("hello world")


if __name__ == '__main__':
 pytest.main(['test_login.py', '-s', '-q'])

備注: 如果fixture有返回值,那么usefixture以及autouse就無法獲取到返回值,這個是裝飾器usefixture與用例直接傳fixture參數(shù)的區(qū)別。 因此最常用的是通過參數(shù)傳遞的方法。

指定Fixture函數(shù)的作用范圍

Fixture中的scope的參數(shù),控制Fixture函數(shù)的作用范圍

scope = ‘function' 測試函數(shù)維度,默認范圍,則在測試結(jié)束時銷毀fixture。

scope = ‘class' 測試類維度,在class中最后一次測試的拆卸過程中,夾具被破壞。

scope = ‘module' 測試文件維度,在模塊中最后一次測試的拆卸過程中,夾具被破壞。

scope = ‘session' 測試會話維度,夾具在測試會話結(jié)束時被銷毀。

fixture函數(shù)的返回值:return 和 yield 和 addfinalizer終結(jié)函數(shù)

return:

  通過下面的代碼,我們已經(jīng)發(fā)現(xiàn)可以通過測試用例函數(shù)傳入?yún)?shù)的形式,直接使用fixture函數(shù)的返回值,這個相對來說比較簡單。

import pytest

@pytest.fixture
def first_entry():
 return "a"
@pytest.fixture
def order(first_entry):
 return [first_entry]
def test_string(order):
 order.append("b")
 assert order == ["a", "b"], "斷言執(zhí)行失敗"
 
if __name__ == '__main__':
 pytest.main(['test_login.py::test_string', '-s'])

yield:

  yeild也是一種函數(shù)的返回值類型,是函數(shù)上下文管理器,使用yield被調(diào)fixture函數(shù)執(zhí)行遇到y(tǒng)ield會停止執(zhí)行,接著執(zhí)行調(diào)用的函數(shù),調(diào)用的函數(shù)執(zhí)行完后會繼續(xù)執(zhí)行fixture函數(shù)yield關(guān)鍵后面的代碼。因此利用fixture函數(shù),我們可以說pytest集合了setup、teardown,既做了初始化,又做了后置的清理工作。

import pytest
from emaillib import Email, MailAdminClient

@pytest.fixture
def mail_admin():
 return MailAdminClient()

# 配置發(fā)送者的fixture函數(shù)
@pytest.fixture
def sending_user(mail_admin):
 user = mail_admin.create_user() #setup:創(chuàng)建發(fā)件人
 yield user      # 返回發(fā)件人
 admin_client.delete_user(user) #teardown:刪除發(fā)件人

# 配置收件人的fixture函數(shù)
@pytest.fixture
def receiving_user(mail_admin):
 user = mail_admin.create_user() #setup:創(chuàng)建收件人
 yield user      #返回收件人
 admin_client.delete_user(user) #teardown:刪除收件人

def test_email_received(sending_user, receiving_user, email):
 email = Email(subject="Hey!", body="How's it going?")
 sending_user.send_email(email, receiving_user)
 assert email in receiving_user.inbox

項目中的實際使用

  翻譯下面代碼,在調(diào)用Entry_into_index前,啟動APP,遇到y(tǒng)ield關(guān)鍵字,中止fixture函數(shù)調(diào)用,執(zhí)行調(diào)用函數(shù)Entry_into_index內(nèi)容,在Entry_into_index函數(shù)調(diào)用后,執(zhí)行yield函數(shù)后的driver.close_app(),關(guān)閉APP。

@pytest.fixture(scope='session')
def startApp_fixture(start_app):
 driver = start_app
 res = lp(driver).get_agree_info()
 try:
  assert res == "同意"
 except Exception as e:
  log.error("啟動APP失敗")
  log.exception(e)
  raise e
 else:
  lp(driver).click_agree()
  lp(driver).click_next_step()
  lp(driver).click_alert()
  lp(driver).click_pass()
  # 創(chuàng)建首頁
  index_page = indexPage(driver)
  yield index_page, driver
  # 后置條件
  time.sleep(3)
  driver.close_app()
  
# 調(diào)用fixture函數(shù)
@pytest.fixture(scope='session')
def Entry_into_index(startApp_fixture)
 index_page = startApp_fixture()[0]
 driver = startApp_fixture()[1]

fixture函數(shù)需要傳遞參數(shù)

工廠作為固定裝置:可以使用閉包,通過外部去調(diào)用函數(shù)里面函數(shù)。

工廠固定裝置原因:

上面已經(jīng)說過,調(diào)用fixture函數(shù)A可以通過用fixture名稱作為調(diào)用函數(shù)B參數(shù),在這種情況下,fixture函數(shù)返回的fixture實例將被注入,最終在測試用例B執(zhí)行前執(zhí)行這個裝飾過的函數(shù)def B(A):pass。但是有個問題在給測試用例添加裝飾函數(shù)時,傳入的參數(shù)是fixture函數(shù)的函數(shù)名,如果需要給fixture函數(shù)添加參數(shù)時,是不可以用下面形式,代碼會直接報錯。原因是測試用例傳入?yún)?shù)為fixture函數(shù)名,如果fixture函數(shù)名添加(參數(shù))后,表現(xiàn)形式為add(params)實際為函數(shù)調(diào)用??蓞⒖几唠A函數(shù)與裝飾器,并無此用法。

解決方式使用閉包,如下圖代碼:make_customer_record函數(shù)返回的是內(nèi)部函數(shù)_make_customer_record(夾具不直接返回數(shù)據(jù),而是返回一個生成數(shù)據(jù)的函數(shù)),注意此處未加(),非函數(shù)調(diào)用,因此在測試用例中customer_1 = make_customer_record("Lisa")此處可拆解為兩部分,customer_1 = make_customer_record的結(jié)果為_make_customer_record對象 ,加上("Lisa") 實際是對調(diào)_make_customer_record函數(shù)進行調(diào)用:函數(shù)名+(參數(shù)),以達到可以傳參的目的。

@pytest.fixture
def make_customer_record():
 def _make_customer_record(name):
  return {"name": name, "orders": []}

 return _make_customer_record #注意此處不加(),非函數(shù)調(diào)用

def test_customer_records(make_customer_record):
 customer_1 = make_customer_record("Lisa")

總結(jié)

到此這篇關(guān)于pytest進階教程之fixture函數(shù)的文章就介紹到這了,更多相關(guān)pytest fixture函數(shù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • pytest框架之fixture詳細使用詳解
  • python pytest進階之fixture詳解
  • Python 測試框架unittest和pytest的優(yōu)劣
  • Python自動化測試pytest中fixtureAPI簡單說明

標(biāo)簽:天水 日照 西安 安慶 隨州 錦州 股票 白城

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《pytest進階教程之fixture函數(shù)詳解》,本文關(guān)鍵詞  pytest,進階,教程,之,fixture,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《pytest進階教程之fixture函數(shù)詳解》相關(guān)的同類信息!
  • 本頁收集關(guān)于pytest進階教程之fixture函數(shù)詳解的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    久久国产波多野结衣| 91精品国产成人www| 女仆av观看一区| 欧美7777| 在线视频1区2区| 亚洲激情图片小说视频| 日本熟妇色xxxxx日本免费看| 樱花草国产18久久久久| 一区二区在线观看免费视频| 奇米色在线视频| 日本在线观看一区| 亚洲国产成人私人影院tom| www.91av| 日韩中文字幕1| 无码无遮挡又大又爽又黄的视频| 国产视频在线观看一区二区三区| 四虎影视av| 日韩一区自拍| 中文字幕+乱码+中文字幕| 免费看污片的网站| 成年女人18级毛片毛片免费| 国产成人免费高清视频| 美女写真理伦片在线看| 妞干网在线观看视频| 视频一区国产精品| 男人的天堂亚洲一区| 永久免费观看精品视频| 老湿机69福利| 瑟瑟视频在线| 国产综合内射日韩久| 国产欧美日韩精品一区二区免费| 我家有个日本女人| 瑟瑟视频在线观看| 鲁大师影院一区二区三区| 日韩成人a**站| av电影在线观看完整版一区二区| 国内外成人激情视频| 中文字幕亚洲激情| 怡红院av亚洲一区二区三区h| 欧美日韩一区二区三区四区在线观看| 激情久久久久久久| 亚洲国产另类久久精品| 日韩一区二区三区中文字幕| 国内精品卡一卡二卡三新区| 免费观看成人av| 久久久久久久波多野高潮日日| 欧美色图亚洲| 一级女性全黄久久生活片免费| 2021国产精品久久精品| 18一19gay欧美视频网站| 国产91久久婷婷一区二区| 精品裸体舞一区二区三区| 高清视频国产| 欧美精品成人久久| 国产精品久久久久久久久久久久久久| 黑人久久a级毛片免费观看| 日韩三级一区| 噜噜噜噜噜在线视频| 88久久精品无码一区二区毛片| 欧美无遮挡国产欧美另类| 欧美mv日韩| 一道本视频在线观看| 国产午夜精品久久久久久久久| 久久出品必属精品| 大黑人xxx| 91中文字幕永久在线| 久久一区二区三区超碰国产精品| 国产91精品一区二区| 涩涩视频网站在线观看| 蜜桃视频在线观看91| 色老头一区二区三区| 日本伊人午夜精品| av网站无病毒在线| 国产农村妇女毛片精品久久莱园子| 久热爱精品视频线路一| 九七影院97影院理论片免费| 黄网站在线观| 亚洲精品国产第一综合99久久| 欧美精品久久久久久久久老牛影院| 国产亚洲高清在线观看| 伪装者免费全集在线观看| 日韩一级黄色片| 91插插视频| 午夜一区二区三区在线观看| 一本到在线视频| 欧美××××黑人××性爽| 先锋影音av321| 国产一区二区三区免费视频| 成人性生交视频免费观看| 97精品国产97久久久久久春色| 亚洲精品国产精品国自产观看| 国产成人va亚洲电影| 亚洲第一精品夜夜躁人人躁| 精品久久久久久久久久中文字幕| 在线免费观看黄色av| 午夜国产精品视频免费体验区| 久久精品国产亚洲777| 亚洲一区二区三区四区av| 在线观看成人免费视频| 久久久综合激的五月天| 日韩国产成人在线| xxxx性欧美黑人| 首播影院在线观看免费观看电视| 激情亚洲综合在线| 久久99精品久久久久久久久久| 国产精品毛片一区二区| 国产精品久久久久久久久毛片| 精品国产一区二区三区四区在线观看| 日韩久久一区二区| www视频在线观看com| 97人摸人人澡人人人超一碰| 久久一级电影| 国产综合亚洲精品一区二| 久久综合亚洲社区| 女人黄色一级片| 亚洲成人网在线观看| 不卡的电视剧免费网站有什么| 热久久久久久久久| 男人的天堂狠狠干| 亚洲欧美韩国综合色| 男人看的污网站| 都市激情一区| 黄色大片中文字幕| 三级影片在线观看| 日韩欧美高清dvd碟片| 国产成人欧美在线观看| 欧美一区二区三区四区视频| 中文字字幕在线中文乱码| 99久久99精品| 强开小嫩苞一区二区三区视频| 丁香激情综合国产| 午夜久久久久久久久久| 欧美女v视频| 精品久久ai| 日韩美女视频免费在线观看| 少妇精品放荡导航| 免费在线观看的av网站| 成人免费乱码大片a毛片软件| 一区二区三区在线视频播放| 欧美精品电影在线| 中文字幕高清一区| 麻豆精品在线看| 国产真实生活伦对白| 免费观看a视频| 中文字字幕在线中文乱码电影| 国产一级片黄色| 尤物在线免费视频| 俄罗斯女人裸体性做爰| 岛国av一区二区在线在线观看| 国产精品呻吟| 欧美一级免费大片| 欧美精品自拍| 98精品久久久久久久| 成年网站在线在免费播放| 中文字幕码精品视频网站| 麻豆av在线免费观看| 在线中文一区| 天堂网2014av| ㊣最新国产の精品bt伙计久久| 91性感美女视频| 在线观看国产视频| 粉嫩av一区二区三区四区五区| 91精品国产欧美一区二区成人| 国产91热爆ts人妖在线| 亚洲综合自拍| 色噜噜偷拍精品综合在线| 欧美久久综合性欧美| www.色天使| 日本全棵写真视频在线观看| 亚洲精品久久久久久久蜜桃臀| 青青久久av北条麻妃海外网| 亚洲丰满少妇videoshd| 禁断一区二区三区在线| 99热国产在线观看| www.com久久久| 日韩国产小视频| 国产精品yjizz| 亚洲国产91精品在线观看| 亚洲精品第一国产综合精品| av官网在线播放| 久久久国产视频91| 亚洲国产精品va在线看黑人动漫| www.国产精品一区| 久久久久久久香蕉网| 亚洲综合欧美色图| 亚洲大奶少妇| 日本不卡视频一区二区| 美女扒开腿免费视频| 欧美电影在线观看免费| 中文字幕+乱码+中文字幕一区| 91精品国产综合久久久久久豆腐| 欧美一区二区视频在线观看| 久久精品理论片| 国产精品无码专区av在线播放| 亚洲免费999| 精品免费日韩av| 国产美女永久无遮挡| 香蕉久久精品日日躁夜夜躁| 欧美三级黄美女| 影视一区二区| 菠萝蜜一区二区| 亚洲国产成人精品一区二区三区| 女人在下体塞跳蛋在线观看| 亚洲视频久久久| 成人精品久久av网站| avtt综合网| 菠萝蜜视频在线观看一区| 国产精品系列在线播放| 波多野结衣在线观看| 一区二区三区四区日本视频| 最近中文字幕在线mv视频在线| 中文在线免费一区三区| 26uuu久久噜噜噜噜| 亚洲一二在线观看| 亚洲精选国产| 欧美性久久久| 久久精品一区二区三区资源网| 99视频超级精品| 亚洲电影一二三区| 久久久另类综合| 99热国产精品| 久久久综合香蕉尹人综合网| 五月天丁香在线| 高清在线观看免费| 日韩视频免费观看高清在线视频| 亚洲一区二区三区四区五区xx| 丝袜亚洲另类欧美综合| 91av国产精品| 嫩草影院一区二区| 久久精品国产99精品国产亚洲性色| 尤物视频网站在线观看| 5g影院5g天天爽永久免费影院| 性中国古装videossex| 青青草影院在线观看| 亚洲欧美日韩中文在线| 亚洲精品久久嫩草网站秘色| 男人本色网站| 99免费精品| 久久久久久久人妻无码中文字幕爆| 91传媒理伦片在线观看| 精品肉辣文txt下载| 免费人成在线观看视频播放| 国产视频97| 欧洲成人免费aa| 伊人色综合久久天天五月婷| 免费观看日韩毛片| 朝桐光av一区二区三区| 亚洲人成高清| 欧洲一区精品| 欧美风情第一页| 中文日本高清免费| 日韩va亚洲va欧美va清高| 青草成人免费视频| 一区二区三区在线视频播放| 成人免费毛片糖心| eeuss影院eeuss最新直达| 欧美高跟鞋交xxxxhd| 国产成人精品亚洲线观看| 亚洲国产精品va在线观看黑人| 粉嫩av一区二区三区天美传媒| 99视频国产精品免费观看a| 天天操天天操天天操| 乱人伦xxxx国语对白| 久久影院资源网| 亚洲精品久久嫩草网站秘色| 国产精品美女黄网| 精品久久国产一区| 希岛爱理av一区二区三区| 欧洲美一区二区三区亚洲| 日本一区二区在线不卡| 久久久久网址| 成年人在线免费观看视频网站| 男女下面一进一出无遮挡| 精品亚洲一区二区三区在线播放| 日韩中文av| 欧美日韩国产在线播放| 麻豆久久久久| 高潮一区二区| 国产精品333| 日本成在线观看| xxxxwwww欧美| 三级欧美韩日大片在线看| 日本成人福利| 精品盗摄女厕tp美女嘘嘘| 永久免费毛片在线观看| 亚洲精品视频自拍| 精品国产高清自在线一区二区三区| 91久久国语露脸精品国产高跟| 中文字幕资源网在线观看免费| 精品一二三四在线| 国产欧美日韩伦理| 欧美一区永久视频免费观看| 鲁大师精品99久久久| 欧美日韩国产丝袜另类| 黄色三级小视频| 久久久亚洲精华液精华液精华液| 国产成人无遮挡在线视频| 国产麻豆免费观看| 视频一区二区精品的福利| 国产精品毛片aⅴ一区二区三区| 午夜免费播放观看在线视频| 成人一区视频| 精品无人国产偷自产在线| 亚洲乱码精品一二三四区日韩在线| 91久久中文字幕| 欧美日韩有码| 色系列之999| 国产免费视频一区二区三区| 黄视频网站在线| 国产视频二区| 亚洲精品日韩激情在线电影| 精品无人区乱码1区2区3区在线| 国产www视频在线观看| av软件在线观看| 中文字幕区一区二区三| 欧美成人国产一区二区| 国产精品推荐精品| 久久久加勒比| 亚洲欧洲一区二区福利| 欧美色图第二页| 欧美午夜精彩| 美国毛片一区二区| 欧美一级免费片| 国产麻豆一精品一av一免费| 老司机午夜av| 不卡一区二区三区视频| 精品视频一区二区观看| 午夜天堂在线视频|