国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

測(cè)試框架pytest教程(6)鉤子函數(shù)hook開(kāi)發(fā)pytest插件

這篇具有很好參考價(jià)值的文章主要介紹了測(cè)試框架pytest教程(6)鉤子函數(shù)hook開(kāi)發(fā)pytest插件。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

pytest hook 函數(shù)也叫鉤子函數(shù),pytest 提供了大量的鉤子函數(shù),可以在用例的不同生命周期自動(dòng)調(diào)用。 比如,在測(cè)試用例收集階段,可利用 hook 函數(shù)修改測(cè)試用例名稱的編碼。

pytest的hook是基于Python的插件系統(tǒng)實(shí)現(xiàn)的,使用特定的命名規(guī)范和裝飾器來(lái)定義鉤子函數(shù)。你可以在pytest插件或conftest文件中定義這些鉤子函數(shù)。

pytest 可以識(shí)別到三種插件

內(nèi)置插件:從 pytest 內(nèi)部 _pytest 目錄加載的插件

外部插件:通過(guò) pip 安裝的插件(比如: pip install pytest-ordering )。

conftest.py 插件:測(cè)試目錄中的 conftest.py 加載

常用的pytest鉤子函數(shù)

1. `pytest_configure(config)`: 在pytest啟動(dòng)時(shí)調(diào)用,可用于注冊(cè)自定義標(biāo)記、插件等。

2. `pytest_collection_modifyitems(config, items)`: 測(cè)試收集階段調(diào)用,可以修改、篩選或排序收集到的測(cè)試項(xiàng)。

3. `pytest_runtest_protocol(item, nextitem)`: 在運(yùn)行每個(gè)測(cè)試用例之前和之后調(diào)用,可以執(zhí)行初始化、清理或自定義測(cè)試流程等操作。

4. `pytest_report_teststatus(report)`: 在測(cè)試用例執(zhí)行后調(diào)用,可用于自定義測(cè)試結(jié)果報(bào)告。

5. `pytest_terminal_summary(terminalreporter)`: 在測(cè)試會(huì)話結(jié)束時(shí)調(diào)用,可用于生成自定義的測(cè)試總結(jié)報(bào)告。

通過(guò)使用這些鉤子函數(shù),你可以在pytest的不同階段添加自己的邏輯和行為。這使得您可以自定義測(cè)試收集、執(zhí)行、報(bào)告等方面,以滿足特定的需求。

有許多其他的pytest鉤子函數(shù)可以用于不同的目的和擴(kuò)展。你可以在pytest的官方文檔中查找完整的鉤子函數(shù)列表以及每個(gè)鉤子的詳細(xì)說(shuō)明和示例。

開(kāi)發(fā)插件

pytest 提供了大量的 hook 函數(shù),執(zhí)行過(guò)程中幾乎所有的行為都是可以定制的。那么,pytest 可以改寫(xiě)哪 些行為呢? 文字版 pytest hook 執(zhí)行順序:

root
└── pytest_cmdline_main
├── pytest_plugin_registered
├── pytest_configure
│ └── pytest_plugin_registered
├── pytest_sessionstart
│ ├── pytest_plugin_registered
│ └── pytest_report_header
├── pytest_collection
│ ├── pytest_collectstart
│ ├── pytest_make_collect_report
│ │ ├── pytest_collect_file
│ │ │ └── pytest_pycollect_makemodule
│ │ └── pytest_pycollect_makeitem
│ │ └── pytest_generate_tests
│ │ └── pytest_make_parametrize_id
│ ├── pytest_collectreport
│ ├── pytest_itemcollected
│ ├── pytest_collection_modifyitems
│ └── pytest_collection_finish
│ └── pytest_report_collectionfinish
├── pytest_runtestloop
│ └── pytest_runtest_protocol
│ ├── pytest_runtest_logstart
│ ├── pytest_runtest_setup
│ │ └── pytest_fixture_setup
│ ├── pytest_runtest_makereport
│ ├── pytest_runtest_logreport
│ │ └── pytest_report_teststatus
│ ├── pytest_runtest_call
│ │ └── pytest_pyfunc_call
│ ├── pytest_runtest_teardown
│ │ └── pytest_fixture_post_finalizer
│ └── pytest_runtest_logfinish
├── pytest_sessionfinish
│ └── pytest_terminal_summary
└── pytest_unconfigure

可以利用 pytest hook 強(qiáng)大的功能開(kāi)發(fā)出自己的插件。

hook和fixture的區(qū)別

在pytest中,Hooks(鉤子)和Fixtures(裝置)是兩個(gè)不同的概念。

Hooks(鉤子)是pytest提供的一組鉤子函數(shù),用于自定義和擴(kuò)展測(cè)試流程。鉤子函數(shù)在特定的時(shí)間點(diǎn)被調(diào)用,并允許你插入自定義的代碼來(lái)修改、補(bǔ)充或攔截測(cè)試操作,比如定制報(bào)告、自定義收集規(guī)則、執(zhí)行前/后的初始化和清理等。Hooks通常由插件或conftest文件定義,并使用特定的命名規(guī)范和裝飾器進(jìn)行標(biāo)記。使用hooks可以靈活地定制和擴(kuò)展pytest的行為。

Fixtures(裝置)是pytest的一項(xiàng)功能,用于管理測(cè)試用例的前置和后置操作。Fixture可以被看作為測(cè)試用例的準(zhǔn)備和清理工作,并且可以在多個(gè)測(cè)試用例之間共享數(shù)據(jù)和資源。Fixture函數(shù)使用`@pytest.fixture`裝飾器進(jìn)行標(biāo)記,并在測(cè)試函數(shù)的參數(shù)中使用。當(dāng)測(cè)試函數(shù)需要使用該裝置時(shí),fixture函數(shù)將被自動(dòng)執(zhí)行并提供必要的數(shù)據(jù)和資源。Fixture可以執(zhí)行一些初始化操作,為測(cè)試用例提供必要的數(shù)據(jù),以及在測(cè)試結(jié)束后進(jìn)行清理工作。使用fixture可以提高代碼的復(fù)用性和可維護(hù)性,并減少測(cè)試用例之間的重復(fù)工作。

總結(jié)起來(lái),Hooks允許你定制和擴(kuò)展測(cè)試流程,而Fixtures則用于管理測(cè)試用例的前置和后置操作,并提供必要的數(shù)據(jù)和資源。Hooks是用于自定義pytest的整體行為,而Fixtures是用于測(cè)試用例級(jí)別的準(zhǔn)備和清理工作。兩者可以一起使用,以實(shí)現(xiàn)更高級(jí)別的自定義和測(cè)試管理。

pytest_collection_modifyitems

def pytest_collection_modifyitems(
    session: "Session", config: "Config", items: List["Item"]
) -> None:
    """Called after collection has been performed. May filter or re-order
    the items in-place.

    :param pytest.Session session: The pytest session object.
    :param pytest.Config config: The pytest config object.
    :param List[pytest.Item] items: List of item objects.
    """

可以看到該方法在用例收集后執(zhí)行,可以篩選或者對(duì)用例執(zhí)行順序進(jìn)行修改。?

插件開(kāi)發(fā)-篩選收集到的用例

當(dāng)你想要自定義收集階段中的測(cè)試項(xiàng)時(shí),可以使用`pytest_collection_modifyitems`鉤子函數(shù)。這個(gè)鉤子函數(shù)在pytest的測(cè)試收集過(guò)程中被調(diào)用,允許你對(duì)收集到的測(cè)試項(xiàng)進(jìn)行修改、篩選或排序。

下面是一個(gè)使用`pytest_collection_modifyitems`的例子,假設(shè)你希望在測(cè)試收集階段中只運(yùn)行有特定標(biāo)記的測(cè)試用例(比如`smoke`標(biāo)記),在根目錄的conftest.py中添加如下方法:

def pytest_collection_modifyitems(config, items):
? ? marked_items = []
? ? unmarked_items = []

? ? # 將有"smoke"標(biāo)記的測(cè)試項(xiàng)放入marked_items列表,其他放入unmarked_items列表
? ? for item in items:
? ? ? ? if 'smoke' in item.keywords:
? ? ? ? ? ? marked_items.append(item)
? ? ? ? else:
? ? ? ? ? ? unmarked_items.append(item)

? ? # 只保留有"smoke"標(biāo)記的測(cè)試項(xiàng)
? ? items[:] = marked_items

? ? # 打印被移除的未標(biāo)記項(xiàng)的名稱
? ? for item in unmarked_items:
? ? ? ? print(f"Skipping unmarked test: {item.nodeid}")

在上述代碼中,`pytest_collection_modifyitems`鉤子函數(shù)接收兩個(gè)參數(shù):`config`表示pytest的配置對(duì)象,`items`是測(cè)試收集階段收集到的所有測(cè)試項(xiàng)(測(cè)試用例)的列表。我們首先遍歷每個(gè)測(cè)試項(xiàng),將有"smoke"標(biāo)記的項(xiàng)放入`marked_items`列表,其他項(xiàng)放入`unmarked_items`列表。然后,我們通過(guò)將`items`列表替換為`marked_items`列表,實(shí)現(xiàn)只保留有"smoke"標(biāo)記的測(cè)試項(xiàng)。最后,我們遍歷`unmarked_items`列表,打印被移除的未標(biāo)記項(xiàng)的名稱作為提示信息。

測(cè)試框架pytest教程(6)鉤子函數(shù)hook開(kāi)發(fā)pytest插件,pytest,pytest,自動(dòng)化,測(cè)試

可以看到test_b被跳過(guò)?

插件開(kāi)發(fā)-改寫(xiě)用例名稱編碼

測(cè)試用例如下


@pytest.mark.parametrize("name",["哈利","赫敏"])
def test_encode(name):
    print(name)

測(cè)試框架pytest教程(6)鉤子函數(shù)hook開(kāi)發(fā)pytest插件,pytest,pytest,自動(dòng)化,測(cè)試

運(yùn)行時(shí)會(huì)出現(xiàn)亂碼

在conftest.py中添加如下方法

def pytest_collection_modifyitems(config, items):
    for item in items:
        item._nodeid = item.nodeid.encode('utf-8').decode('unicode-escape')

再次運(yùn)行可以看到節(jié)點(diǎn)id顯示為中文了。

測(cè)試框架pytest教程(6)鉤子函數(shù)hook開(kāi)發(fā)pytest插件,pytest,pytest,自動(dòng)化,測(cè)試

?插件打包

軟件測(cè)試 | Pytest測(cè)試框架之插件開(kāi)發(fā)_pytest_hook_函數(shù)文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-664093.html

到了這里,關(guān)于測(cè)試框架pytest教程(6)鉤子函數(shù)hook開(kāi)發(fā)pytest插件的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 測(cè)試框架pytest教程(11)-pytestAPI

    測(cè)試框架pytest教程(11)-pytestAPI

    常量 ? ? ? ? `pytest.approx` 是一個(gè)用于進(jìn)行數(shù)值近似比較的 pytest 斷言工具。 在測(cè)試中,有時(shí)候需要對(duì)浮點(diǎn)數(shù)或其他具有小數(shù)部分的數(shù)值進(jìn)行比較。然而,由于浮點(diǎn)數(shù)精度限制,直接使用相等判斷可能會(huì)導(dǎo)致測(cè)試不穩(wěn)定或失敗。這時(shí),就可以使用 `pytest.approx` 工具來(lái)進(jìn)行近似比

    2024年02月11日
    瀏覽(27)
  • 【自動(dòng)化測(cè)試教程】 —— pytest 框架詳解 ~

    【自動(dòng)化測(cè)試教程】 —— pytest 框架詳解 ~

    特點(diǎn): 容易上手, 入門(mén)簡(jiǎn)單, 文檔豐富, 文檔中有很多參考案例 支持簡(jiǎn)單的單元測(cè)試和復(fù)雜的功能測(cè)試 支持參數(shù)化 執(zhí)行測(cè)試用例過(guò)程中, 支持跳過(guò)操作 支持重復(fù)失敗的case 支持運(yùn)行Nose, unittest編寫(xiě)測(cè)試用例 pytest支持很多第三方插件 方便和持續(xù)集成工具集成 斷言方法: assert res

    2024年02月12日
    瀏覽(104)
  • 測(cè)試框架pytest教程(10)自定義命令行-pytest_addoption

    測(cè)試框架pytest教程(10)自定義命令行-pytest_addoption

    `pytest_addoption`是pytest插件系統(tǒng)中的一個(gè)鉤子函數(shù),用于向pytest添加自定義命令行選項(xiàng)。 在pytest中,可以使用命令行選項(xiàng)來(lái)控制測(cè)試的行為和配置。`pytest_addoption`鉤子函數(shù)允許您在運(yùn)行pytest時(shí)添加自定義的命令行選項(xiàng),以擴(kuò)展pytest的功能。 下面是一個(gè)使用`pytest_addoption`鉤子函

    2024年02月11日
    瀏覽(19)
  • 測(cè)試框架pytest教程(2)-用例依賴庫(kù)-pytest-dependency

    測(cè)試框架pytest教程(2)-用例依賴庫(kù)-pytest-dependency

    對(duì)于 pytest 的用例依賴管理,可以使用? pytest-dependency ?插件。該插件提供了更多的依賴管理功能,使你能夠更靈活地定義和控制測(cè)試用例之間的依賴關(guān)系。 Using pytest-dependency — pytest-dependency 0.5.1 documentation 安裝 pytest-dependency 插件: 依賴方法和被依賴方法都需要使用裝飾器

    2024年02月11日
    瀏覽(40)
  • 自動(dòng)化測(cè)試框架pytest系列之8個(gè)常用的裝飾器函數(shù)

    自動(dòng)化測(cè)試框架pytest系列之8個(gè)常用的裝飾器函數(shù)

    自動(dòng)化測(cè)試框架pytest系列之基礎(chǔ)概念介紹(一)-CSDN博客?? 自動(dòng)化測(cè)試框架pytest系列之21個(gè)命令行參數(shù)介紹(二)-CSDN博客 自動(dòng)化測(cè)試框架pytest系列之強(qiáng)大的fixture功能,為什么fixture強(qiáng)大?一文拆解它的功能參數(shù)。(三)-CSDN博客 接上文? 3.5 pytest的8個(gè)裝飾器 在之前的文章可以看到,

    2024年02月02日
    瀏覽(26)
  • 測(cè)試框架pytest教程(9)跳過(guò)測(cè)試skip和xfail

    測(cè)試框架pytest教程(9)跳過(guò)測(cè)試skip和xfail

    滿足條件時(shí)跳過(guò) ?

    2024年02月11日
    瀏覽(45)
  • pytest 自定義HOOK函數(shù)

    pytest 自定義HOOK函數(shù)

    除了系統(tǒng)提過(guò)的HOOK函數(shù)外,也可以通過(guò)自定義HOOK的方式實(shí)現(xiàn)想要的功能。 首先創(chuàng)建一個(gè)py文件,里面定義自己的HOOK函數(shù),主要pytest里面的hook函數(shù)必須以pytest開(kāi)頭。 其次創(chuàng)建自己的插件類,user類的重寫(xiě)__init__方法,注冊(cè)鉤子的時(shí)候帶入pytest的config配置。在該方法中設(shè)置鉤子

    2024年02月16日
    瀏覽(15)
  • 測(cè)試框架pytest教程(7)實(shí)現(xiàn) xunit 風(fēng)格的setup

    pytest支持setup和teardown,對(duì)于使用unittest和nose框架的用戶來(lái)說(shuō)對(duì)這些很熟悉,但是在pytest可以使用功能更強(qiáng)大的fixture來(lái)實(shí)現(xiàn)固定裝置。 如果單個(gè)模塊中有多個(gè)測(cè)試函數(shù)和測(cè)試類,您可以選擇實(shí)現(xiàn)以下固定方法,這些方法通常會(huì)為所有函數(shù)調(diào)用一次: 在調(diào)用類的所有測(cè)試方法之

    2024年02月11日
    瀏覽(17)
  • Angular 17+ 高級(jí)教程 – Component 組件 の 生命周期鉤子 (Lifecycle Hooks)

    Angular 17+ 高級(jí)教程 – Component 組件 の 生命周期鉤子 (Lifecycle Hooks)

    之前在 Component 組件 の Angular Component vs Custom Elements?文章中,我們有學(xué)習(xí)過(guò)幾個(gè)基礎(chǔ)的 Lifecycle Hooks。 比如?OnChanges、OnInit、AfterViewInit、OnDestroy,但那篇只是微微帶過(guò)而已。 這篇讓我們來(lái)深入理解 Angular 的?Lifecycle Hooks。 ? 在?Component 組件 の Dependency Injection NodeInjector?文章中

    2024年03月09日
    瀏覽(38)
  • 測(cè)試框架pytest教程(5)運(yùn)行失敗用例-rerun failed tests

    測(cè)試框架pytest教程(5)運(yùn)行失敗用例-rerun failed tests

    運(yùn)行這個(gè)文件,2個(gè)失敗,48個(gè)通過(guò)。 要運(yùn)行上次失敗的測(cè)試用例,可以使用 --lf (或 --last-failed )選項(xiàng)來(lái)告訴pytest只運(yùn)行上次運(yùn)行時(shí)失敗的測(cè)試。 命令行示例: 或者在pytest配置文件(比如pytest.ini)中設(shè)置: 這樣,pytest會(huì)檢測(cè)上次運(yùn)行時(shí)失敗的測(cè)試用例,并只運(yùn)行這些失敗

    2024年02月11日
    瀏覽(23)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包