Pytest鉤子函數,測試框架動態切換測試環境

在軟件測試中,測試環境的切換是個令人頭疼的問題。不同環境的配置不同,如何高效切換測試環境成為許多測試開發人員關注的重點。你是否希望在運行測試用例時,能夠動態選擇測試環境,而不是繁瑣地手動修改配置?

Pytest 測試框架的 hook 函數可以輕松實現這一需求! 本文將帶你詳細了解如何借助 pytest 的強大功能,實現測試環境的動態切換。

在自動化測試過程中,有時候我們需要切換不同的測試環境用于驗證功能是否正常(比如在測試環境中功能是正常的,但是到了預發布環境中就出現了問題)。往往我們需要手動修改測試腳本中的配置適配在不同的環境執行,十分不優雅!

如果能在執行測試腳本之前指定對應環境進行自動化配置那就不需要手動一個個修改配置了,比如像pytest執行時可以通過傳入豐富的內置命令行參數改變其測試行為。同樣pytest也能支持自定義命令行參數,通過對應的參數選取對應的環境配置進行執行,實現這一需求可以通過pytest的hook函數。

Pytest 是 Python 社區最受歡迎的測試框架之一,其靈活的插件機制和豐富的 hook 函數,讓開發者能夠根據需求自定義測試行為。在動態切換測試環境的場景中,以下思路和方法非常實用:

1. 使用 pytest 的 pytest_addoption 添加命令行參數

通過為 pytest 添加命令行參數,我們可以實現環境配置的動態傳遞。

實現步驟:

  • conftest.py 文件中,定義一個選項用于傳遞環境信息。
def pytest_addoption(parser):parser.addoption("--env", action="store", default="dev", help="Specify test environment: dev/staging/prod")

關于pytest hook函數

Hook函數(鉤子函數),它是pytest框架的開發者為了讓用戶更好的去擴展pytest的功能而預留的一些函數。而預留的這些函數在整個測試執行的生命周期中特定的階段會被pytest自動調用執行。

關于pytest中的預留鉤子,可以通過開發插件,和在conftest.py去實現這些鉤子。pytest中的鉤子函數按功能一共分為6類:引導鉤子,初始化鉤子、用例收集鉤子、用例執行鉤子、報告鉤子、調試鉤子,當然動態切換測試環境這個需求我們不需要熟悉所有的鉤子函數,這里我們只需要知道pytest_addoption這個初始化鉤子函數即可:

函數

pytest_addoption

參數
  • parser :參數解析器
  • pluginmanager :插件管理器
觸發時機:
  • conftest文件加載完之后執行, 在測試運行開始時調用一次。
作用:
  • 添加運行命令的命令行參數,pytest.ini的配置參數

實現步驟

1:新增conftest.py文件,添加pytest_addoption鉤子函數
def pytest_addoption(parser):"""注冊自定義參數命令行參數"""parser.addoption("--env", default="test", choices=['dev', 'test', 'pre'],help="命令行參數 '--env' 設置環境切換")

參數說明:

  • --env 代表需要傳入 --env 參數,后續通過pytest --env=test 或者 pytest --env test去運行
  • default 代表默認值,不傳--env參數的情況下默認使用test環境
  • choices 設置參數范圍,僅限于dev、test、pre這三個環境
  • help 代表命令行參數的幫助信息

需要注意:鉤子函數名字是固定的,不能隨意更改

2:定義fixture函數,用于獲取命令行參數
@pytest.fixture(scope='session')
def get_env(request):option = request.config.getoption("--env")if option == 'test':print("當前環境為測試環境")elif option == "dev":print("當前環境為開發環境")elif option == "pre":print("當前環境為預發布環境")

?

3:在測試函數上使用fixture

image20230731151028054.png

我們可以看到通過--env參數可以切換不同的環境執行,不加參數的情況下使用的是test環境。

4:fixture函數解析不同的配置

上述的步驟能夠完成基本的命令行參數解析,但是離動態切換環境還差一步:我們需要通過不同的參數讀取對應的配置文件,將配置文件信息解析出來傳遞給測試用例使用。

在項目的config目錄下保存項目的不同環境配置文件:dev-env.ini、test-env.ini、pre-env.ini。文件中存儲不同的環境參數值(比如URL、賬號信息、數據庫配置信息等),如下所示:

[host]
baseurl = http://192.168.3.200:8080[account]
username = admin
password = 123456abc[dbinfo]
url = http://db.192.168.3.100:8081
port = 3306
username = root
password = 123456abc

[host] baseurl = http://test.lemonban.com [account] username = lemon_auto password = lemon123456 [dbinfo] url = http://db.lemonban.com port = 3306 username = student password = 123456a

image20230731153018604.png

通過在測試函數中引用fixture函數get_env,即可獲取對應的配置參數值。

在敏捷開發和 DevOps 的背景下,動態切換測試環境已經成為軟件測試流程中不可或缺的一部分。傳統的手動切換環境方式效率低下,甚至可能導致配置錯誤,進而影響測試結果的準確性。 借助 Pytest 的靈活機制,動態切換測試環境不僅能提升測試效率,還能更好地適應多環境并行測試的需求。

Pytest 的 hook 函數為動態切換測試環境提供了強大的支持。通過簡單的配置和代碼調整,你可以輕松實現多環境測試的需求,讓測試流程更加高效和規范化。

“測試環境切換不再是難題,Pytest 帶你邁向自動化測試的新高度!”


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

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

相關文章

印象筆記07——試一試PDF標注

印象筆記07——試一試PDF標注 [!CAUTION] 根據第六期,我再次查詢了資料,印象筆記還是有一些可圈可點的功能的(當然部分有平替),針對會員作用,開發使用場景雖然是逆向的,但我堅信這是一部分人的現…

【Vue】分享一個快速入門的前端框架以及如何搭建

先上效果圖: 登錄 菜單: 下載地址: 鏈接:https://pan.baidu.com/s/1m-ZlBARWU6_2n8jZil_RAQ 提取碼:ui20 … 主要是可以自定義設置token,更改后端請求地址較為方便。 應用設置: 登錄與token設置: 在這里設置不用登錄,可以請求的接口: request.js i…

通過串口通信控制led燈的亮滅

初始化led燈的gpio接口控制燈的亮滅 初始化uart1串口 將gpio9和gpio10設置為復用模式進行串口通信 通過串口的輸入輸出函數實現串口通信控制led燈的亮滅

計算機xinput1_4.dll丟失怎么修復?

電腦運行時常見問題及修復指南 作為軟件開發從業者,深知電腦在日常使用中難免會遇到各種問題,如文件丟失、文件損壞和系統報錯等。這些問題不僅影響工作效率,還可能帶來數據丟失的風險。本文將詳細介紹一些常見問題及其解決辦法,…

DeepSeek V3“報錯家門”:我是ChatGPT

搜 :海訊無雙Ai 要說這兩天大模型圈的頂流話題,那絕對是非DeepSeek V3莫屬了。 不過在網友們紛紛測試之際,有個bug也成了熱議的焦點—— 只是少了一個問號,DeepSeek V3竟然稱自己是ChatGPT。 甚至讓它講個笑話,生成…

C++:范圍for

范圍for(range-based for)是C的一種循環結構, 是在 C11 這個標準中引入的,這種類型的for循環使得遍歷數組、容器中的元素更加簡便和直觀。 一、范圍for語法 for ( 類型 變量名 : 數組名 ) 語句 //多條語句需要加?括號 示例&#…

C++基礎概念復習

前言 本篇文章作基礎復習用,主要是在C學習中遇到的概念總結,后續會繼續補充。如有不足,請前輩指出,萬分感謝。 1、什么是封裝,有何優點,在C中如何體現封裝這一特性? 封裝是面向對象編程&…

前端工程化之手搓webpack5 --【elpis全棧項目】

前端工程化之手搓webpack5 --【elpis全棧項目】 導讀 基本流程:輸入 – 編譯 – 輸出 #mermaid-svg-V8Gi7RFNikCuEhax {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-V8Gi7RFNikCuEhax .error-icon{fil…

vue3使用setup語法糖組件基礎傳值

(1):defineProps:傳入要使用的props定義自定義屬性,傳遞過來的值具有響應式,和props一樣; (2):defineEimts:傳入要自定義的事件,emit實例去傳入自定義事件的值,和$emit或…

S7-200可用的modbus RTU完成位輪詢

網上的信息比較散,官方說明也不充分,尤其是涉及主站按需寫入的部分沒有見到現成案例。 以下記錄完成位輪詢讀取,同時按需寫入的程序。 初始化主站,初始化塊的完成位M9.3通過上升沿觸發一個M9.4,用于后面啟動輪詢。 第…

特征點檢測與匹配——MATLAB R2022b

特征點檢測與匹配在計算機視覺中的作用至關重要,它為圖像處理、物體識別、增強現實等領域提供了堅實的基礎。 目錄 Harris角點檢測 SIFT(尺度不變特征變換) SURF(加速穩健特征) ORB(Oriented FAST and Rotated BRIEF) 總結 特征點檢測與匹配是計算機視覺中的一項基…

Vue3實現PDF在線預覽功能

?🌈個人主頁:前端青山 🔥系列專欄:Vue篇 🔖人終將被年少不可得之物困其一生 依舊青山,本期給大家帶來Vue篇專欄內容:Vue3現PDF在線預覽功能 前言 在開發中,PDF預覽和交互功能是一個常見的需求。無論是管理…

常用的EDA 工具

1) 邏輯設計: Cadence 的Verilog XL ? 模擬電路設計: Mentor 的Viewdraw ? 電路合成: Synopsys 的Design Compiler ? 電路仿真: Synopsys 的Hsim 和Hspice ? 人工布局: Cadence 的Virtuso ? 自動布局…

基于ESP32的桌面小屏幕實戰[5]:PCB下單

1. 焊接調試前準備 PCB下單 點擊“PCB下單” 檢查一下DRC 確認無錯誤之后,確認下單 然后就會跳轉到下面的網頁 基本上保持默認選項即可。可以看到“焊盤噴鍍”有3個選項。 在選擇表面處理工藝時,應綜合考慮產品的具體需求、環保法規以及成本等因素。例…

云原生架構的演變與實踐

云原生架構的演變與實踐 在現代軟件開發的時代背景下,云原生架構日益成為推動業務轉型的關鍵。它以云為中心的應用架構和開發思維,不僅包括了容器化的基本形式,更涉及全方位的應用管理及優化。本文將圍繞云原生的特征、遷移步驟以及模式展開…

探索現代 Web 開發中的流行技術:深入學習 Vite 的使用

在前端開發的世界中,構建工具扮演著越來越重要的角色。從 Webpack 到 Parcel,再到 Rollup,每個工具都有自己的獨特定位和目標。而今天,我們要討論的是一款近年來迅速崛起并受到廣泛歡迎的構建工具— Vite。 本文將從基本原理到實…

如何通過 6 種方式將照片從 iPhone 傳輸到戴爾 PC?

“你知道如何將iPhone上的照片轉移到電腦上嗎?我的iPhone上有很多照片,所以我想將這些照片從iPhone轉移到電腦上。請給我一些建議,謝謝!” - Nirenling 在戴爾社區中發布 您的iPhone是否被各種精彩的照片和視頻占滿而存儲空間不…

『SQLite』表達式操作

摘要:表達式是一個或多個值、運算符和計算值的 SQL 函數的組合。SQL 表達式與公式類似,都寫在查詢語言中。 基本語法 SELECT column1, column2, columnN FROM table_name WHERE [CONTION | EXPRESSION];布爾表達式 SQLite 的布爾表達式在匹配單個值的…

升級 Spring Boot 3 配置講解 —— 支持斷點傳輸的文件上傳和下載功能

學會這款 🔥全新設計的 Java 腳手架 ,從此面試不再怕! 在現代 Web 應用中,文件上傳和下載是非常常見的需求。然而,當文件較大時,傳統的上傳下載方式可能會遇到網絡不穩定或傳輸中斷的問題。為了解決這些問題…

框架Tensorflow2

深度學習框架之Tensorflow2 Tensorflow2版本的介紹 Tensorflow(簡稱tf)是深度學習框架,大大簡化了建模的方法和步驟,把Keras Api當作核心,使用非常簡單,跨平臺,集成各種現成模型,eager mode使得調試起來不…