最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Pytest框架之fixture詳解(三)

 更新時間:2022年06月30日 10:19:35   作者:小旭2021  
本文詳細講解了Pytest框架之fixture,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下

相關文章

Pytest框架之fixture詳解(一)

Pytest框架之fixture詳解(二)

Pytest框架之fixture詳解(三)

本文關于fixture的內容如下:

  • 1、參數化fixture
  • 2、fixture工廠
  • 3、request這個fixture

1、參數化fixture

fixture有個params參數,允許我們傳遞數據。

語法格式:

# conftest.py文件
?
# fixture的params參數
# 取value1時,會把依賴此fixture的用例執(zhí)行一遍。
# 取value2時,會把依賴此fixture的用例執(zhí)行一遍。
# 取value3時,會把依賴此fixture的用例執(zhí)行一遍。
# params有幾個參數,就會將依賴此fixture的用例執(zhí)行幾遍。
@pytest.fixture(params=[value1, value2, value3..])
def fix_name():
    # do something

當我們需要多次調用fixture時,則可以用到fixture的參數化功能。

但它并不是并發(fā)的,是串行執(zhí)行的。

比如,測試對象有多種配置方式,那么參數化可以幫我們在多種配置方式下執(zhí)行用例。

接下來,以網頁自動化為案例。

需求:要在google、firefox瀏覽器下執(zhí)行測試用例,用例為打開百度搜索pytest。

1)先在conftest.py當中,定義fixture,并設置params=["google", "firefox"]

# conftest.py
?
# params設置為google和firefox
@pytest.fixture(params=["google", "firefox"])
def browser_fix(request):
    if request.param == "google":
        driver = webdriver.Chrome()
    elif request.param == "firefox":
        driver = webdriver.Firefox()
    else:
        driver = None
    yield driver
    if driver:
        driver.quit()

2)在測試用例文件test_baidu_action.py中,編寫測試用例,并調用browser_fix

# test_baidu_action.py
?
@pytest.mark.usefixtures("browser_fix")
def test_baidu(browser_fix):
    driver = browser_fix
    driver.get("https://www.baidu.com/")
    driver.find_element(By.ID, "kw").send_keys("pytest", Keys.ENTER)
    loc = (By.XPATH, '//h3')
    WebDriverWait(driver,10).until(EC.visibility_of_element_located(loc))
    driver.find_element(*loc).click()

3)運行2)中的用例,會依次在google瀏覽器中執(zhí)行完成,然后在firefox瀏覽器中執(zhí)行完成。一共是2條測試用例。

2、fixture工廠

當我們在一個用例當中,需要多次調用fixture時,就可以使用fixture工廠

利用的是裝飾器的方式

在fixture內部,定義一個函數。fixture返回的是函數。

以下案例來自官網:

@pytest.fixture
def make_customer_record():
    def _make_customer_record(name):
        return {"name": name, "orders": []}
?
    return _make_customer_record
?
# 用例內部,多次調用了fixture.
def test_customer_records(make_customer_record):
    customer_1 = make_customer_record("Lisa")  # 第1次調用
    customer_2 = make_customer_record("Mike")  # 第2次調用
    customer_3 = make_customer_record("Meredith")  # 第3次調用

如果工廠創(chuàng)建的數據需要管理,那么fixtue可以如下處理:

@pytest.fixture
def make_customer_record():
     
    # 管理工廠的數據。在前置中創(chuàng)建。在后置中銷毀
    created_records = []
?
    def _make_customer_record(name):
        record = models.Customer(name=name, orders=[])
        # 前置中添加數據
        created_records.append(record)
        return record
?
    yield _make_customer_record  # 返回內部函數
     
    # 銷毀數據
    for record in created_records:
        record.destroy()
?
# 測試用例
def test_customer_records(make_customer_record):
    customer_1 = make_customer_record("Lisa")
    customer_2 = make_customer_record("Mike")
    customer_3 = make_customer_record("Meredith")

3、request這個fixture

pytest內置的名為requests的fixture,主要功能: 提供請求fixture的測試用例/測試類的信息的。

我們定義fixture之后,通常都是測試用例/測試類,來請求fixture。

而request fixture就會記錄 測試用例/測試類 相關信息。

request fixture是通過FixtureRequest來實現的,有以下屬性(列舉部分)可以使用:

  • request.param:獲取fixture的params參數值
  • request.scope:獲取fixture的作用域
  • request.function:獲取調用fixture的用例函數名稱。如果fixture是函數級別的作用域。
  • request.cls:獲取測試用例是從哪個測試類里收集的。
  • request.module:獲取測試用例/測試類從哪個python模塊里收集的。
  • request.config:從pytest的config文件當中,獲取與當前請求有關的配置信息

更多的請查閱官網:https://docs.pytest.org/en/stable/reference.html

既然requests是fixture,那么我們定義的fixture,就可以直接把requests作為函數參數來用。

下面,以簡單案例來演示。

定義一個fixture,將requests作為參數。

import pytest
?
@pytest.fixture(params=[1,2])
def init(request):
    print("用例名稱:", request.function)
    print("fix參數 ", request.param)
    print("fix的作用域 ", request.scope)
    print("用例所在的類 ", request.cls)

定義一個測試類,直接請求名為init的fixture:

@pytest.mark.usefixtures("init")
class TestABC:
?
    def test_hello(self):
        print("-------------------------")

執(zhí)行結果如下:

到此這篇關于Pytest框架之fixture的文章就介紹到這了。希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • Python?pip超詳細教程之pip的安裝與使用

    Python?pip超詳細教程之pip的安裝與使用

    python中有許多有用的庫,要使用這些第三方庫,需要安裝pip。這篇文章主要為大家介紹了pip的安裝與使用,解決pip下載速度慢的問題,需要的可以參考一下
    2022-07-07
  • python 申請內存空間,用于創(chuàng)建多維數組的實例

    python 申請內存空間,用于創(chuàng)建多維數組的實例

    今天小編就為大家分享一篇python 申請內存空間,用于創(chuàng)建多維數組的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • Python松散正則表達式用法分析

    Python松散正則表達式用法分析

    這篇文章主要介紹了Python松散正則表達式用法,較為詳細的分析了松散正則表達式的概念、功能與相關使用技巧,需要的朋友可以參考下
    2016-04-04
  • 詳解Python中的分組函數groupby和itertools)

    詳解Python中的分組函數groupby和itertools)

    這篇文章主要介紹了Python中的分組函數groupby和itertools)的實例代碼,非常不錯,具有一定的參考借鑒價值,需要的朋友參考下吧
    2018-07-07
  • Python django框架 web端視頻加密的實例詳解

    Python django框架 web端視頻加密的實例詳解

    這篇文章主要介紹了Python django框架 web端視頻加密,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-11-11
  • Python 分享10個PyCharm技巧

    Python 分享10個PyCharm技巧

    這篇文章主要介紹了Python 分享10個PyCharm技巧,今天要跟大家分享幾個PyCharm小技巧,幫助大家提升工作效率!,需要的朋友可以參考下
    2019-07-07
  • python openpyxl 帶格式復制表格的實現

    python openpyxl 帶格式復制表格的實現

    這篇文章主要介紹了python openpyxl 帶格式復制表格的實現操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03
  • Python實現截圖生成符合markdown的鏈接

    Python實現截圖生成符合markdown的鏈接

    之前是用的是typora來寫的文章,最近typora最近開始收費了,所以就不想用了,于是找到了一個替代品MarkText。本文將介紹如何通過Python實現截圖自動生成符合markdown的鏈接,感興趣的可以了解一下
    2022-01-01
  • Python中字典和集合學習小結

    Python中字典和集合學習小結

    本文通過實例給大家介紹了python中字典和集合的知識小結,非常不錯,具有參考借鑒價值,需要的的朋友參考下吧
    2017-07-07
  • python 文件和路徑操作函數小結

    python 文件和路徑操作函數小結

    python 文件和路徑操作函數小結,需要開發(fā)的朋友可以參考下。
    2009-11-11

最新評論

老河口市| 巴彦淖尔市| 昌黎县| 屯留县| 宜宾县| 永春县| 五寨县| 长宁县| 鄂温| 峨边| 长乐市| 兴海县| 兴城市| 蒙自县| 横峰县| 眉山市| 买车| 平顺县| 元氏县| 宁安市| 肇庆市| 鄂尔多斯市| 历史| 怀化市| 麻栗坡县| 平泉县| 信丰县| 田林县| 马龙县| 桃源县| 蒙自县| 开封市| 剑阁县| 静安区| 蓬安县| 华容县| 阜新| 旺苍县| 双鸭山市| 张家口市| 长顺县|