Pytest-Bdd-Playwright 系列教程(14):Docstring 參數

Pytest-Bdd-Playwright 系列教程(14):Docstring 參數

  • 前言
  • 一、什么是docstring?
  • 二、基本語法
  • 三、主要特點
  • 四、實際例子
  • 五、注意事項
  • 六、使用建議
  • 總結

前言

  • 在自動化測試的過程中,我們經常需要處理復雜的測試數據或需要輸入多行文本。Pytest-Bdd
    提供了一種解決方案——Docstring 參數,它能夠有效地解決這些問題;
  • Docstring 參數允許在 Gherkin 語法的步驟中嵌入多行文本,這在多種測試場景下都非常有用,包括但不限于復雜業務規則的描述、長文本輸入的測試、詳細測試步驟的記錄、復雜預期結果與API 響應內容的驗證以及文本內容的比對等。

一、什么是docstring?

在 Python 中,Docstring 是指位于函數、模塊或類定義開頭的字符串,通常用于描述其用途和參數等信息。而在 Pytest-BDD 中,Docstring 被賦予了新的含義,它是指在 Gherkin 步驟中定義的多行文本,這些文本使用三重引號 (“”") 來包圍。這種特性使得測試編寫者能夠在測試步驟中直接嵌入大量文本數據,而無需通過外部文件加載或硬編碼的方式。

二、基本語法

在 Pytest-BDD 中使用 Docstring 的基本語法如下所示:

When 這是一個簡單的docstring:"""這是一個測試文本包含兩行內容"""

上述示例中,When 關鍵字后面的步驟定義了一個 Docstring,其中包含了兩行文本。這些文本將作為一個整體傳遞給相應的步驟函數。

三、主要特點

  • 單個字符串傳遞:無論 Docstring 包含多少行文本,它都會作為一個單個的字符串傳遞給步驟函數;
  • 多行支持:多行文本之間通過換行符 \n 分隔;
  • 自動處理縮進:Pytest-BDD 會自動移除 Docstring 內部的前導縮進,確保文本格式的一致性;
  • 專屬性質:只有在定義了 Docstring 的步驟中,才能使用 Docstring 參數。

四、實際例子

# features/docstring_demo.feature
Feature: 文檔字符串演示Scenario: 帶有docstring的場景Given 準備測試docstringWhen 這是一個簡單的docstring:"""這是一個測試文本包含兩行內容"""
# tests/test_docstring_demo.py
from functools import partial
from pytest_bdd import given, when, parsers, scenarioscenario = partial(scenario, 'docstring_demo.feature')@scenario('帶有docstring的場景')
def test_docstring_demo():pass@given('準備測試docstring')
def _():pass@when(parsers.parse('這是一個簡單的docstring:\n{docstring}'))
def step_with_docstring(docstring):# docstring參數將包含完整的文檔字符串內容assert docstring == "這是一個測試文本\n包含兩行內容"

運行命令:

pytest ./tests/test_docstring_demo.py

運行結果如下:

在這里插入圖片描述

五、注意事項

  • 如果步驟沒有定義docstring但在函數中使用了docstring參數,會拋出錯誤。
  • docstring的縮進會被自動處理,例如:
Then 步驟
"""即使有縮進也會被去除
"""

實際得到的字符串會是:“即使有縮進\n也會被去除”

六、使用建議

  • 長文本數據:當需要傳遞較長的測試數據時,使用 Docstring 可以使代碼更加簡潔和易讀;
  • 多行文本內容:適合用于測試多行文本內容,如日志文件、配置文件等;
  • 復雜輸出結果:可以用于驗證復雜的輸出結果,特別是當輸出結果包含多行文本或結構化數據時;
  • API 響應驗證:在測試 API 接口時,使用 Docstring 可以方便地定義和驗證復雜的 JSON 響應。

總結

通過合理使用 Docstring 參數,我們可以更好地組織和管理 BDD 測試用例,使測試代碼更加清晰和專業。在實際項目中,建議根據具體需求靈活運用這一功能,以提升自動化測試的效率和可維護性。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/62841.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/62841.shtml
英文地址,請注明出處:http://en.pswp.cn/web/62841.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

手機租賃系統開發指南一站式服務流程解析

內容概要 手機租賃系統的開發是一個復雜但有趣的過程,像搭建樂高一樣,只要找到合適的模塊,就能打造出一個賓至如歸的租賃平臺。在這部分,我們將對開發流程的整體結構進行簡要概述,并指出每個環節的重要性。 首先&…

OpenAI 正式賦予 ChatGPT 通過視頻實時與用戶互動的能力

每周跟蹤AI熱點新聞動向和震撼發展 想要探索生成式人工智能的前沿進展嗎?訂閱我們的簡報,深入解析最新的技術突破、實際應用案例和未來的趨勢。與全球數同行一同,從行業內部的深度分析和實用指南中受益。不要錯過這個機會,成為AI領…

深入了解C++中const的用法

文章目錄 一、C中的const如何理解?二、C中的const與C語言中的const有何區別?三、const與指針、引用的結合使用 一、C中的const如何理解? 在C中,const是一個關鍵字,用來表示常量性,意在告訴編譯器某些變量或…

EasyExcel設置表頭上面的那種大標題(前端傳遞來的大標題)

1、首先得先引用easyExcel的版本依賴&#xff0c;我那 <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>2.2.6</version> </dependency> 2、然后得弄直接的實體類&#xff0c;&…

純血鴻蒙崛起,原生Android挑戰?兩大操作系統巔峰對決,智能設備未來誰主沉浮?

鴻蒙HarmonyOS和原生Android系統雖然在一些方面相似&#xff0c;但在架構、設計理念、API、開發工具等方面存在一些差異。鴻蒙系統的目標是跨設備、分布式的操作系統&#xff0c;強調多設備協同和資源共享&#xff0c;而Android則主要集中在智能手機和移動設備領域。 下面將從…

計算機網絡:傳輸層、應用層、網絡安全、視頻/音頻/無線網絡、下一代因特網

目錄 &#xff08;五&#xff09;傳輸層 1&#xff0e;傳輸層尋址與端口 2&#xff0e;無連接服務與面向連接服務 3. 傳輸連接的建立與釋放 4. UDP 的優點 5. UDP 和 TCP 報文段報頭格式 6. TCP 的流量控制 7&#xff0e;TCP 的擁塞控制 8. TCP 傳送連接的管理 &#…

【前端開發】HTML+CSS網頁,可以拿來當作業(免費開源)

HTML代碼 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content_lizhongyu"widthdevice-width, initial-scale1.0"><title>小兔鮮兒-新鮮、惠民、快捷<…

CV(4)--邊緣提取和相機模型

前言 僅記錄學習過程&#xff0c;有問題歡迎討論 邊緣提取&#xff08;涉及語義分割&#xff09;&#xff1a; 圖象的邊緣是指圖象局部區域亮度變化顯著的部分,也有正負之分&#xff0c;暗到亮為正 求邊緣的幅度&#xff1a;sobel&#xff0c;Canny算子 圖像分高頻分量和低…

【信息系統項目管理師】高分論文:論信息系統項目的整合管理(陽光信訪工作平臺)

更多內容請見: 備考信息系統項目管理師-專欄介紹和目錄 文章目錄 正文一、明確目標,制定項目章程二、精心規劃,制定項目管理計劃三、細心嚴謹,指導和管理項目執行四、組織學習,管理項目知識五、多措并舉,對項目進行有效的監控六、規范流程,控制項目整體變更七、嚴謹高效…

智能技術引領未來:自動圖像標注的創新應用與發展

&#x1f351;個人主頁&#xff1a;Jupiter. &#x1f680; 所屬專欄&#xff1a;傳知代碼 歡迎大家點贊收藏評論&#x1f60a; 目錄 概述算法原理核心邏輯效果演示使用方式參考文獻 參考文獻&#xff1a;需要本文的詳細復現過程的項目源碼、數據和預訓練好的模型可從該地址處獲…

C語言-排序

常見的排序算法分為以下四種&#xff0c;插入排序&#xff0c;選擇排序&#xff0c;交換排序&#xff0c;歸并排序。 一、插入排序 (一)直接插入排序 直接插入排序&#xff0c;將一段數組看做被分成已排序序列和未排序序列&#xff0c;排序過程是從未排序序列的元素開始&…

【Java筆記】LinkedList 底層結構

一、LinkedList 的全面說明 LinkedList底層實現了雙向鏈表和雙端隊列特點可以添加任意元素(元素可以重復)&#xff0c;包括null線程不安全&#xff0c;沒有實現同步 二、LinkedList 的底層操作機制 三、LinkedList的增刪改查案例 public class LinkedListCRUD { public stati…

網管平臺(基礎篇):路由器的介紹與管理

路由器簡介 路由器&#xff08;Router&#xff09;是一種計算機網絡設備&#xff0c;它的主要作用是將數據通過打包&#xff0c;并按照一定的路徑選擇算法&#xff0c;將網絡傳送至目的地。路由器能夠連接兩個或更多個網絡&#xff0c;并根據信道的情況自動選擇和設定路由&…

排序算法(2):選擇排序

問題 排序 [30, 24, 5, 58, 18, 36, 12, 42, 39] 選擇排序 選擇排序每次從待排序序列中選出最小&#xff08;或最大&#xff09;的元素&#xff0c;將其放到序列的起始位置&#xff0c;然后&#xff0c;再從剩余未排序元素中繼續尋找最小&#xff08;或最大&#xff09;元素…

Tongweb8命令行使用收集(by lqw)

文章目錄 聲明對應版本修改thanos用戶密碼部署應用到默認實例節點相關操作新增節點(一般一個服務器ip只能裝一個節點)啟動節點(需確認節點沒有運行)停止節點刪除節點節點新增應用節點查看應用節點啟動應用節點停止應用節點卸載應用(謹慎操作,卸載后應用就沒有了,建議備份后…

Artec Leo3D掃描儀在重型機械設備定制中的應用【滬敖3D】

挑戰&#xff1a;一家加拿大制造商需要有效的方法&#xff0c;為富于變化且難度較高的逆向工程&#xff0c;快速、安全、準確地完成重型機械幾何采集。 解決方案&#xff1a;Artec Leo, Artec Studio, Geomagic for SOLIDWORKS 效果&#xff1a;Artec Leo三維掃描代替過去的手動…

Nginx 限制只能白名單 uri 請求的配置

實際生產項目中&#xff0c;大多數時候我們會將后端的 http 接口通過前置 nginx 進行反向代理&#xff0c;對互聯網用戶提供服務。往往我們后端服務所能提供的接口服務是大于互聯網用戶側的實際請求的接口地址數量的&#xff08;例如后端服務一共有100個api接口&#xff0c;經過…

題海拾貝:力扣 141.環形鏈表

Hello大家好&#xff01;很高興我們又見面啦&#xff01;給生活添點passion&#xff0c;開始今天的編程之路&#xff01; 我的博客&#xff1a;<但凡. 我的專欄&#xff1a;《編程之路》、《數據結構與算法之美》、《題海拾貝》 歡迎點贊&#xff0c;關注&#xff01; 1、題…

Vite快速構建Vue教程

步驟 1: 初始化項目目錄 創建一個名為 projects 的文件夾&#xff0c;作為存放所有 Vite 項目的根目錄。這個文件夾將容納多個獨立的 Vite 項目。 步驟 2: 創建 Vite 項目 右鍵點擊 projects 文件夾并選擇“在此處打開終端”或使用您偏好的代碼編輯器&#xff08;如 VSCode&…

深入理解 CSS 文本換行: overflow-wrap 和 word-break

前言 正常情況下&#xff0c;在固定寬度的盒子中的中文會自動換行。但是&#xff0c;當遇到非常長的英文單詞或者很長的 URL 時&#xff0c;文本可能就不會自動換行&#xff0c;而會溢出所在容器。幸運的是&#xff0c;CSS 為我們提供了一些和文本換行相關的屬性&#xff1b;今…