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

詳解pytest中runtestprotocol方法的實現(xiàn)

 更新時間:2023年10月20日 09:24:56   作者:郝同學(xué)的測開筆記  
runtestprotocol 是 pytest 執(zhí)行測試流程中的一個核心函數(shù),它主要負(fù)責(zé)調(diào)用測試函數(shù)的“setup”、“call”和“teardown”鉤子函數(shù),并生成對應(yīng)的測試報告,本文將深入探究pytest中runtestprotocol方法的實現(xiàn),需要的朋友可以參考下

前言

pytest-rerunfailures:優(yōu)化測試穩(wěn)定性的失敗重試工具這篇文章中,我們查看源碼時,看到了這樣一行代碼reports = runtestprotocol(item, nextitem=nextitem, log=False),runtestprotocol這個函數(shù)是干嘛用的呢?我們帶著疑問一起探索。

runtestprotocol 函數(shù)

runtestprotocol 是 pytest 執(zhí)行測試流程中的一個核心函數(shù),它主要負(fù)責(zé)調(diào)用測試函數(shù)的“setup”、“call”和“teardown”鉤子函數(shù),并生成對應(yīng)的測試報告。

runtestprotocol 函數(shù)的基本信息

runtestprotocol 函數(shù)是 pytest 測試框架中用于執(zhí)行測試用例的核心函數(shù)之一,它位于 pytest 的 runner.py 模塊中,定義如下:

def runtestprotocol(
 ? ?item: Item, log: bool = True, nextitem: Optional[Item] = None
) -> List[TestReport]:
 ? ?hasrequest = hasattr(item, "_request")

其中,該函數(shù)的參數(shù)包括:

  • item: 表示待執(zhí)行的測試用例對象;
  • log: 控制是否打印日志,在默認(rèn)情況下為 True,即打印日志;
  • nextitem: 表示下一個待執(zhí)行的測試用例對象,用于實現(xiàn)測試順序的控制。

函數(shù)返回一個包含 pytest.TestReport 對象的列表,每個對象表示執(zhí)行一個鉤子函數(shù)的測試結(jié)果。

參數(shù)解析

在上述參數(shù)中,item 是必選參數(shù),表示待執(zhí)行的測試用例對象。該參數(shù)通常由 pytest 測試框架提供,我們無需手動傳入該參數(shù)。

log 參數(shù)是一個布爾值,用于控制是否打印日志。在默認(rèn)情況下,該參數(shù)為 True,即會打印日志。如果你希望在測試過程中關(guān)閉日志,可以將該參數(shù)設(shè)置為 False。

nextitem 參數(shù)則表示下一個待執(zhí)行的測試用例對象,用于實現(xiàn)測試順序的控制。當(dāng) runtestprotocol 函數(shù)執(zhí)行完當(dāng)前測試用例之后,它會自動執(zhí)行下一個測試用例。如果希望手動控制下一個待執(zhí)行的測試用例,可以使用該參數(shù)。

源碼解讀

下面是對代碼的解釋:

def runtestprotocol(
 ? ?item: Item, log: bool = True, nextitem: Optional[Item] = None
) -> List[TestReport]:
 ? ?hasrequest = hasattr(item, "_request")
 ? ?if hasrequest and not item._request: ?# type: ignore[attr-defined]
 ? ? ? ?# This only happens if the item is re-run, as is done by
 ? ? ? ?# pytest-rerunfailures.
 ? ? ? ?item._initrequest() ?# type: ignore[attr-defined]

首先,我們聲明了 runtestprotocol 函數(shù),并接受三個參數(shù):itemlognextitem。其中,item 是一個測試項對象,log 是一個布爾值,表示是否將測試結(jié)果記錄到日志中,nextitem 表示下一個將要被執(zhí)行的測試項(可選)。

然后,我們使用 hasattr(item, "_request") 判斷 item 對象是否包含 _request 屬性。如果包含,則我們檢查該屬性的值是否為 False,如果是,則執(zhí)行 item._initrequest() 方法。這段代碼主要是為了處理一種特殊情況:當(dāng)測試項重新運行(例如通過 pytest-rerunfailures 插件),可能需要重新初始化 _request 屬性。

接下來,我們調(diào)用 call_and_report 函數(shù)執(zhí)行 setup 鉤子函數(shù),并將其結(jié)果存儲在 rep 變量中:

 ? ?rep = call_and_report(item, "setup", log)

call_and_report 函數(shù)是一個輔助函數(shù),用于執(zhí)行鉤子函數(shù)并生成測試報告(TestReport 對象)。在這里,我們調(diào)用該函數(shù)來執(zhí)行 setup 鉤子函數(shù),并將結(jié)果存儲在 rep 變量中。

然后,我們將 rep 添加到 reports 列表中:

 ? ?reports = [rep]

reports 列表用于存儲測試過程中生成的所有測試報告。

接下來,我們判斷上一個鉤子函數(shù)是否執(zhí)行成功。如果成功,則繼續(xù)執(zhí)行下一個鉤子函數(shù);否則,直接跳過:

 ? ?if rep.passed:
 ? ? ? ?if item.config.getoption("setupshow", False):
 ? ? ? ? ? ?show_test_item(item)
 ? ? ? ?if not item.config.getoption("setuponly", False):
 ? ? ? ? ? ?reports.append(call_and_report(item, "call", log))

首先,我們使用 rep.passed 來判斷上一個鉤子函數(shù)是否執(zhí)行成功。如果成功,則判斷是否需要在控制臺顯示該測試項的詳細(xì)信息,如果需要,則調(diào)用 show_test_item 函數(shù)顯示詳細(xì)信息。然后,我們再次使用 call_and_report 來執(zhí)行測試函數(shù)并生成測試報告,并將其添加到 reports 列表中。

最后,我們再次使用 call_and_report 函數(shù)執(zhí)行 teardown 鉤子函數(shù),并將其結(jié)果存儲在 rep 變量中:

 ? ?reports.append(call_and_report(item, "teardown", log, nextitem=nextitem))

然后,我們將 rep 添加到 reports 列表中,并返回該列表作為測試結(jié)果。

 ? ?return reports

當(dāng)所有測試項執(zhí)行完成后,pytest 會將測試結(jié)果打印到控制臺,并將其寫入日志文件。這樣,我們就可以輕松地進(jìn)行測試并獲取測試報告。

最后

總之,runtestprotocol 函數(shù)是 pytest 測試框架中非常重要的一個函數(shù),它用于執(zhí)行測試用例并觸發(fā) pytest 鉤子函數(shù)。當(dāng)然我們實際場景中通常不會直接調(diào)用該函數(shù),這里主要做一個了解,方便查看插件的源碼時遇到不知道是干啥的。

以上就是詳解pytest中runtestprotocol方法的實現(xiàn)的詳細(xì)內(nèi)容,更多關(guān)于pytest runtestprotocol方法的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • python 繪制場景熱力圖的示例

    python 繪制場景熱力圖的示例

    這篇文章主要介紹了python 繪制場景熱力圖的示例,幫助大家更好的利用python繪制圖像,感興趣的朋友可以了解下
    2020-09-09
  • 基于Python開發(fā)一個小說圖片PDF生成器

    基于Python開發(fā)一個小說圖片PDF生成器

    本項目是一個基于 wxPython 開發(fā)的桌面應(yīng)用程序,用于將圖片和文字描述組合生成精美的 PDF 小說,它解決了創(chuàng)作者需要將圖文內(nèi)容快速整理成電子書的需求,特別適合繪本、圖文小說、攝影作品集等場景,需要的朋友可以參考下
    2025-10-10
  • Python字典dict常用內(nèi)置函數(shù)詳解

    Python字典dict常用內(nèi)置函數(shù)詳解

    這篇文章主要介紹了Python字典dict常用內(nèi)置函數(shù)詳解,dict是Python中的一種內(nèi)置數(shù)據(jù)類型,它是一種鍵值對的集合,類似于Java中的Map或其他語言中的字典,需要的朋友可以參考下
    2023-07-07
  • 淺談Python3中datetime不同時區(qū)轉(zhuǎn)換介紹與踩坑

    淺談Python3中datetime不同時區(qū)轉(zhuǎn)換介紹與踩坑

    最近的項目需要根據(jù)用戶所屬時區(qū)制定一些特定策略,學(xué)習(xí)、應(yīng)用了若干python3的時區(qū)轉(zhuǎn)換相關(guān)知識,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • Python實現(xiàn)Word文檔自動化排版的完整流程

    Python實現(xiàn)Word文檔自動化排版的完整流程

    這篇文章主要為大家詳細(xì)介紹了Python實現(xiàn)Word文檔自動化排版的完整流程,文中的示例代碼講解詳細(xì),具有一定的借鑒價值,感興趣的小伙伴可以了解下
    2026-01-01
  • Django框架實現(xiàn)的簡單分頁功能示例

    Django框架實現(xiàn)的簡單分頁功能示例

    這篇文章主要介紹了Django框架實現(xiàn)的簡單分頁功能,在之前一篇留言板之上增加了簡單分頁功能,涉及Paginator模塊的簡單使用技巧,需要的朋友可以參考下
    2018-12-12
  • 淺談python浮點數(shù)比較的三種方法

    淺談python浮點數(shù)比較的三種方法

    在 Python 中,由于浮點數(shù)在計算機(jī)內(nèi)部的表示方式是二進(jìn)制的,因此進(jìn)行浮點數(shù)比較時可能會出現(xiàn)精度問題,本文就介紹了三種解決方法,具有一定的參考價值,感興趣的可以了解一下
    2023-09-09
  • Python輕松讀取TOML文件告別手動編輯配置文件

    Python輕松讀取TOML文件告別手動編輯配置文件

    這篇文章主要為大家介紹了Python輕松讀取TOML文件告別手動編輯配置文件,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-11-11
  • python實現(xiàn)在函數(shù)圖像上添加文字和標(biāo)注的方法

    python實現(xiàn)在函數(shù)圖像上添加文字和標(biāo)注的方法

    今天小編就為大家分享一篇python實現(xiàn)在函數(shù)圖像上添加文字和標(biāo)注的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-07-07
  • python 合并列表的八種方法

    python 合并列表的八種方法

    這篇文章主要介紹了python 連接列表的八種方法,幫助大家更好的理解和學(xué)習(xí)使用python,感興趣的朋友可以了解下
    2021-03-03

最新評論

辽宁省| 崇礼县| 建宁县| 连州市| 德州市| 武汉市| 长宁县| 昌黎县| 南汇区| 昌邑市| 墨玉县| 达尔| 壶关县| 枣庄市| 泊头市| 和静县| 紫阳县| 陇川县| 沁源县| 东宁县| 连南| 沐川县| 邹平县| 墨玉县| 永春县| 双辽市| 连州市| 三台县| 漠河县| 密云县| 南澳县| 尚志市| 宁蒗| 榆社县| 肥东县| 隆子县| 门源| 庆元县| 高雄市| 万宁市| 宜阳县|