婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁(yè) > 知識(shí)庫(kù) > pytest進(jìn)階教程之fixture函數(shù)詳解

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

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

fixture函數(shù)存在意義

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

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

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

fixture函數(shù)定義

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

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

# 使用夾具函數(shù)的測(cè)試用例
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作用

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

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

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

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

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

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

# 被夾具函數(shù)裝飾的測(cè)試用例
@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)的每個(gè)測(cè)試用例會(huì)自動(dòng)調(diào)用fixture。

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

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


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

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

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

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

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

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

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

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

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

return:

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

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會(huì)停止執(zhí)行,接著執(zhí)行調(diào)用的函數(shù),調(diào)用的函數(shù)執(zhí)行完后會(huì)繼續(xù)執(zhí)行fixture函數(shù)yield關(guān)鍵后面的代碼。因此利用fixture函數(shù),我們可以說(shuō)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

項(xiàng)目中的實(shí)際使用

  翻譯下面代碼,在調(diào)用Entry_into_index前,啟動(dòng)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("啟動(dòng)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)建首頁(yè)
  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ù)

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

工廠固定裝置原因:

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

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

@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進(jìn)階教程之fixture函數(shù)的文章就介紹到這了,更多相關(guān)pytest fixture函數(shù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • pytest框架之fixture詳細(xì)使用詳解
  • python pytest進(jìn)階之fixture詳解
  • Python 測(cè)試框架unittest和pytest的優(yōu)劣
  • Python自動(dòng)化測(cè)試pytest中fixtureAPI簡(jiǎn)單說(shuō)明

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

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《pytest進(jìn)階教程之fixture函數(shù)詳解》,本文關(guān)鍵詞  pytest,進(jìn)階,教程,之,fixture,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《pytest進(jìn)階教程之fixture函數(shù)詳解》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于pytest進(jìn)階教程之fixture函數(shù)詳解的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    26uuu久久天堂性欧美| 午夜久久久久久| 日韩欧美在线综合网| 国产精品天天摸av网| 久久精品国产**网站演员| 欧美日韩在线三级| 国产精品成人在线观看| 亚洲精品日韩一| 国产在线精品不卡| 久久综合九色综合欧美就去吻| 午夜日韩在线电影| 欧美老女人第四色| 亚洲高清不卡在线| 欧美乱妇一区二区三区不卡视频| 日本午夜一区二区| 亚洲另类在线视频| 欧美精品成人一区二区三区四区| 免费看欧美女人艹b| 久久―日本道色综合久久| 国产69精品一区二区亚洲孕妇| 欧美国产日韩亚洲一区| 色综合久久久久| 日本不卡一区二区三区高清视频| 精品久久国产字幕高潮| 9i在线看片成人免费| 亚洲成人免费在线观看| 久久久久久亚洲综合影院红桃| 成人av网址在线| 亚洲香蕉伊在人在线观| 精品欧美黑人一区二区三区| 成人福利视频网站| 人禽交欧美网站| 亚洲色图欧洲色图婷婷| 欧美一区二区三区性视频| 成人av在线播放网址| 91电影在线观看| 欧美日韩二区三区| 麻豆一区二区三| 国产精品网站在线播放| 色丁香久综合在线久综合在线观看 | 国产成人精品综合在线观看| 成人免费在线视频观看| 国产精品久久久久久久久果冻传媒 | 午夜激情一区二区| 国产日韩精品一区二区三区| 欧美日韩中文另类| 成人高清伦理免费影院在线观看| 久久91精品久久久久久秒播| 日韩精品资源二区在线| 成人美女在线视频| 免费在线观看成人| 成人欧美一区二区三区黑人麻豆 | 午夜欧美2019年伦理| 亚洲国产精品99久久久久久久久| 日韩欧美国产一区在线观看| 日本精品一级二级| 97久久精品人人做人人爽| 国产呦萝稀缺另类资源| 美女任你摸久久 | 国产乱码精品一区二区三区忘忧草| 日韩精品一二三四| 亚洲国产三级在线| 夜色激情一区二区| 亚洲一区二区三区视频在线播放 | 波多野结衣亚洲一区| 国产伦精一区二区三区| 国内精品第一页| 精品一二三四区| 国产一区日韩二区欧美三区| 精品在线免费观看| 国产一区二区三区免费观看| 韩日av一区二区| 老司机精品视频导航| 狂野欧美性猛交blacked| 精品一区二区免费看| 国产精品中文字幕日韩精品| 国产xxx精品视频大全| 成人激情午夜影院| 色综合久久中文字幕| 日本韩国一区二区三区视频| 欧美性高清videossexo| 91麻豆精品久久久久蜜臀| 日韩一级完整毛片| 久久久久国产精品麻豆ai换脸| 欧美精品一区二区三区四区| 国产女主播视频一区二区| 中文字幕中文在线不卡住| 亚洲欧洲成人av每日更新| 亚洲一区二区三区在线播放| 久久精品国产77777蜜臀| 国产一区二区网址| 91免费精品国自产拍在线不卡| 在线免费观看日本一区| 8x福利精品第一导航| 国产人伦精品一区二区| 一区二区三区高清在线| 香蕉影视欧美成人| 国产伦精品一区二区三区免费迷| 大尺度一区二区| 欧美日韩电影一区| 欧美经典一区二区三区| 亚洲国产精品综合小说图片区| 极品美女销魂一区二区三区| 色综合欧美在线| wwwwww.欧美系列| 亚洲综合色丁香婷婷六月图片| 国内外精品视频| 欧美视频一区在线| 国产精品日产欧美久久久久| 日韩精品国产精品| 91啪亚洲精品| 国产拍揄自揄精品视频麻豆| 亚洲1区2区3区4区| 不卡一区二区三区四区| 337p粉嫩大胆色噜噜噜噜亚洲| 亚洲欧美一区二区三区国产精品| 黄页网站大全一区二区| 欧美日韩国产中文| 亚洲人成精品久久久久久| 国内精品伊人久久久久av一坑| 欧美日韩免费在线视频| 亚洲人被黑人高潮完整版| 国产99久久久精品| 欧美va日韩va| 免费看日韩a级影片| 欧美最猛性xxxxx直播| 中文字幕日韩一区二区| 成人丝袜视频网| 久久久不卡影院| 国产中文一区二区三区| 日韩一级片在线观看| 免费成人在线网站| 91精品国产一区二区人妖| 日韩精品成人一区二区三区| 欧美三级韩国三级日本三斤| 亚洲精品va在线观看| 色综合久久久网| 亚洲一区二区三区自拍| 欧洲日韩一区二区三区| 日韩一区二区免费高清| 精品国产乱码久久久久久夜甘婷婷 | 欧美一级片在线看| 一级精品视频在线观看宜春院| 成人黄色片在线观看| 国产精品素人视频| 国产99久久精品| 国产女人18毛片水真多成人如厕 | 日韩女优制服丝袜电影| 日韩激情av在线| 色av综合在线| 亚洲免费在线视频一区 二区| 9i看片成人免费高清| 亚洲成在人线在线播放| 欧美人妖巨大在线| 丝袜亚洲另类欧美| 日韩精品中文字幕在线一区| 看电视剧不卡顿的网站| 日韩视频免费观看高清完整版 | 亚洲成av人影院| 粉嫩aⅴ一区二区三区四区| 欧美视频自拍偷拍| 亚洲与欧洲av电影| 91香蕉视频黄| 亚洲免费观看视频| 91亚洲精品久久久蜜桃| 亚洲欧美国产毛片在线| 成人短视频下载| 国产精品婷婷午夜在线观看| va亚洲va日韩不卡在线观看| 亚洲天堂网中文字| 欧美高清性hdvideosex| 国产成人免费视频| 亚洲精品一卡二卡| 欧美精品一区二区三区在线播放| jiyouzz国产精品久久| 石原莉奈在线亚洲三区| 亚洲国产成人一区二区三区| 在线精品视频一区二区三四| 蜜桃91丨九色丨蝌蚪91桃色| 国产精品久久久久久久蜜臀 | 久久精品国产999大香线蕉| 在线观看视频一区二区欧美日韩| 亚洲h在线观看| 精品国产凹凸成av人导航| 色综合久久久久综合体| 国产黄色精品视频| 日韩不卡在线观看日韩不卡视频| 国产欧美日韩不卡免费| 在线一区二区视频| 国产剧情一区在线| 日韩精品91亚洲二区在线观看| 亚洲视频一区二区在线| 精品国产乱码久久久久久图片 | 国产精品久久久久久一区二区三区| 欧美日韩免费观看一区二区三区| 国产成人精品免费一区二区| 美脚の诱脚舐め脚责91 | 性久久久久久久| 亚洲精品综合在线| 国产精品欧美经典|