亚洲综合原千岁中文字幕_国产精品99久久久久久久vr_无码人妻aⅴ一区二区三区浪潮_成人h动漫精品一区二区三

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

pytest進階教程之fixture函數詳解

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

fixture函數存在意義

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

firture相對于setup和teardown的優勢

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

fixture函數定義

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

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

# 使用夾具函數的測試用例
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'])

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

fixture作用

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

調用fixture有三種方式

Fixture名字作為測試用例的參數

  可以直接使用fixture名稱作為輸入參數(是個典型的高階函數),在這種情況下,fixture函數返回的fixture實例將被注入,最終在測試用例執行前執行這個裝飾過的函數。如下列代碼,①將返回值傳遞給測試用例,②通過函數入參方式,可以傳入多個fixture函數

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"], "斷言執行失敗"

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

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

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

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

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


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

使用autouse參數

  指定fixture的參數autouse=True這樣模塊內的每個測試用例會自動調用fixture。

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

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


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

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

指定Fixture函數的作用范圍

Fixture中的scope的參數,控制Fixture函數的作用范圍

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

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

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

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

fixture函數的返回值:return 和 yield 和 addfinalizer終結函數

return:

  通過下面的代碼,我們已經發現可以通過測試用例函數傳入參數的形式,直接使用fixture函數的返回值,這個相對來說比較簡單。

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"], "斷言執行失敗"
 
if __name__ == '__main__':
 pytest.main(['test_login.py::test_string', '-s'])

yield:

  yeild也是一種函數的返回值類型,是函數上下文管理器,使用yield被調fixture函數執行遇到yield會停止執行,接著執行調用的函數,調用的函數執行完后會繼續執行fixture函數yield關鍵后面的代碼。因此利用fixture函數,我們可以說pytest集合了setup、teardown,既做了初始化,又做了后置的清理工作。

import pytest
from emaillib import Email, MailAdminClient

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

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

# 配置收件人的fixture函數
@pytest.fixture
def receiving_user(mail_admin):
 user = mail_admin.create_user() #setup:創建收件人
 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

項目中的實際使用

  翻譯下面代碼,在調用Entry_into_index前,啟動APP,遇到yield關鍵字,中止fixture函數調用,執行調用函數Entry_into_index內容,在Entry_into_index函數調用后,執行yield函數后的driver.close_app(),關閉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()
  # 創建首頁
  index_page = indexPage(driver)
  yield index_page, driver
  # 后置條件
  time.sleep(3)
  driver.close_app()
  
# 調用fixture函數
@pytest.fixture(scope='session')
def Entry_into_index(startApp_fixture)
 index_page = startApp_fixture()[0]
 driver = startApp_fixture()[1]

fixture函數需要傳遞參數

工廠作為固定裝置:可以使用閉包,通過外部去調用函數里面函數。

工廠固定裝置原因:

上面已經說過,調用fixture函數A可以通過用fixture名稱作為調用函數B參數,在這種情況下,fixture函數返回的fixture實例將被注入,最終在測試用例B執行前執行這個裝飾過的函數def B(A):pass。但是有個問題在給測試用例添加裝飾函數時,傳入的參數是fixture函數的函數名,如果需要給fixture函數添加參數時,是不可以用下面形式,代碼會直接報錯。原因是測試用例傳入參數為fixture函數名,如果fixture函數名添加(參數)后,表現形式為add(params)實際為函數調用。可參考高階函數與裝飾器,并無此用法。

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

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

 return _make_customer_record #注意此處不加(),非函數調用

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

總結

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

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

標簽:天水 日照 西安 安慶 隨州 錦州 股票 白城

巨人網絡通訊聲明:本文標題《pytest進階教程之fixture函數詳解》,本文關鍵詞  pytest,進階,教程,之,fixture,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《pytest進階教程之fixture函數詳解》相關的同類信息!
  • 本頁收集關于pytest進階教程之fixture函數詳解的相關信息資訊供網民參考!
  • 推薦文章
    日韩中文字幕一区二区不卡| 国产网站在线| 日韩免费片| 欧美一级视频免费| 精品毛片视频| 精品国产一区二区三区久久久蜜臀 | 夜夜操网| 日韩avdvd| 亚洲精品久久久中文字| 青青久久精品| 夜夜操网| 国产成人精品影视| 国产麻豆精品视频| 久草免费资源| 国产高清在线精品一区a| 日本在线不卡视频| 九九久久99综合一区二区| 麻豆系列国产剧在线观看| 亚洲精品影院久久久久久| 天天色色网| 欧美激情一区二区三区在线| 日韩免费在线视频| 国产成人精品综合| 青青久久精品国产免费看| 精品国产一区二区三区久久久蜜臀 | 日韩一级黄色大片| 国产美女在线一区二区三区| 台湾毛片| 色综合久久久久综合体桃花网| 九九热精品免费观看| 99热精品在线| 99久久精品国产高清一区二区 | 青青青草影院| 国产高清在线精品一区二区| 精品国产香蕉在线播出| 韩国三级香港三级日本三级la| 国产极品白嫩美女在线观看看 | 成人在激情在线视频| 久久精品成人一区二区三区| 日韩欧美一及在线播放| 欧美电影免费看大全| 久久精品成人一区二区三区| 久久久久久久免费视频| 久久国产影院| a级毛片免费全部播放| 国产一区免费观看| 美女免费精品视频在线观看| 你懂的在线观看视频| 亚欧成人毛片一区二区三区四区| 日本伦理网站| 国产一区二区精品| 欧美国产日韩一区二区三区| 久久国产一久久高清| 亚欧成人乱码一区二区| 九九精品在线播放| 麻豆系列国产剧在线观看| 精品国产一区二区三区免费| 午夜久久网| 人人干人人草| 亚洲精品永久一区| 韩国毛片免费| 欧美一级视| 欧美夜夜骑 青草视频在线观看完整版 久久精品99无色码中文字幕 欧美日韩一区二区在线观看视频 欧美中文字幕在线视频 www.99精品 香蕉视频久久 | 欧美日本免费| 日日夜夜婷婷| 亚欧成人毛片一区二区三区四区| 色综合久久天天综合| 国产伦久视频免费观看 视频| 日本久久久久久久 97久久精品一区二区三区 狠狠色噜噜狠狠狠狠97 日日干综合 五月天婷婷在线观看高清 九色福利视频 | 青青久久精品| 亚洲女人国产香蕉久久精品| 可以免费看污视频的网站| 国产成人女人在线视频观看 | 久久国产精品自由自在| 天天做日日爱| 亚洲精品中文字幕久久久久久| 日韩专区第一页| 国产视频一区二区在线观看| 欧美1区| 91麻豆精品国产综合久久久| 日韩在线观看视频黄| 91麻豆精品国产综合久久久| 精品国产一区二区三区精东影业 | 午夜在线亚洲| 午夜欧美成人久久久久久| a级黄色毛片免费播放视频| 天堂网中文在线| 成人高清免费| 九九精品在线| 欧美大片毛片aaa免费看| 韩国三级视频网站| 欧美一级视频高清片| 一级毛片视频播放| 日本在线不卡免费视频一区| 青青青草视频在线观看| 91麻豆高清国产在线播放| 麻豆网站在线看| 欧美18性精品| 黄色免费三级| 四虎影视库国产精品一区| 天堂网中文在线| 欧美国产日韩在线| 国产麻豆精品hdvideoss| 国产一区二区精品尤物| 美女免费精品高清毛片在线视 | 国产综合成人观看在线| 国产精品自拍一区| 欧美国产日韩精品| 国产综合成人观看在线| 精品久久久久久中文| 成人免费高清视频| 天天色成人| 日韩在线观看视频网站| 精品国产香蕉伊思人在线又爽又黄| 欧美激情一区二区三区中文字幕| 成人免费观看男女羞羞视频| 精品视频免费在线| 精品国产一区二区三区久| 国产伦精品一区三区视频| 九九免费精品视频| 国产a毛片| 日韩免费在线| 青青青草视频在线观看| 国产91精品系列在线观看| 欧美a级大片| 日本在线播放一区| 青青久久精品| 高清一级毛片一本到免费观看| 午夜久久网| 免费一级片在线| 国产成人精品综合| 午夜欧美成人久久久久久| 成人a大片高清在线观看| 成人免费网站视频ww| 国产一区二区精品在线观看| 久久99中文字幕| 成人免费高清视频| 欧美激情一区二区三区在线 | 久久成人亚洲| 成人a级高清视频在线观看| 日韩专区亚洲综合久久| 精品久久久久久中文| 麻豆网站在线看| 亚洲精品中文一区不卡| 九九久久99| 黄视频网站免费观看| 午夜久久网| 好男人天堂网 久久精品国产这里是免费 国产精品成人一区二区 男人天堂网2021 男人的天堂在线观看 丁香六月综合激情 | 深夜做爰性大片中文| 国产成人啪精品| 青青久久国产成人免费网站| 九九久久国产精品大片| 毛片电影网| 国产激情一区二区三区| 日韩一级黄色大片| 午夜在线亚洲| 久久国产精品自由自在| 成人免费观看男女羞羞视频| 亚洲女人国产香蕉久久精品| 可以免费看污视频的网站| 欧美大片毛片aaa免费看| 一本高清在线| 久久精品免视看国产成人2021| 黄视频网站免费| 黄视频网站免费观看| 欧美激情影院| 国产精品自拍在线观看| 欧美一级视频免费观看| 一 级 黄 中国色 片| 国产a视频| 午夜欧美成人香蕉剧场| 天天做日日干| 日韩免费在线视频| 久久国产影视免费精品| 欧美18性精品| 青草国产在线| 高清一级做a爱过程不卡视频| 国产成人精品综合| 欧美另类videosbestsex | 欧美夜夜骑 青草视频在线观看完整版 久久精品99无色码中文字幕 欧美日韩一区二区在线观看视频 欧美中文字幕在线视频 www.99精品 香蕉视频久久 | 成人a级高清视频在线观看| 国产一区二区精品久久| 日本特黄特色aa大片免费| 欧美国产日韩精品| 日韩av片免费播放| 日韩中文字幕在线观看视频| 亚洲精品久久久中文字| 精品视频在线观看免费| 亚欧成人毛片一区二区三区四区 | 欧美一区二区三区在线观看| 欧美大片毛片aaa免费看| 四虎影视精品永久免费网站 | 午夜激情视频在线观看 | 天堂网中文在线| 国产91丝袜高跟系列| 你懂的日韩| 国产精品1024永久免费视频| 日韩专区第一页| 欧美激情一区二区三区中文字幕| 精品视频在线观看视频免费视频|