pytest自動化測試執行環境切換的兩種解決方案

🍅?點擊文末小卡片,免費獲取軟件測試全套資料,資料在手,漲薪更快????

一、痛點分析

在實際企業的項目中,自動化測試的代碼往往需要在不同的環境中進行切換,比如多套測試環境、預上線環境、UAT環境、線上環境等等,并且在DevOps理念中,往往自動化都會與Jenkins進行CI/CD,不論是定時執行策略還是迭代測試,那么問題來了,難道每次切換環境都需要提供一套測試代碼?或者每次切換都要需修改我們的自動化環境配置?答案當然不是,不然怎么能叫測試自動化呢!

在未使用pytest的Hook相關方法之前,切換環境我們一般會使用python的內置模塊sys,它有一個argv的方法,可以從我們的命令行接收參數,通過它也可以實現上面的需求,就像如下部分代碼這樣:

try:if sys.argv[1] == '-p':# 預上線環境conf_url.write_value(filename=CONFIGS_FILE_PATH_URL,data=p_api_address)modify_properties_url(filename=ENVIRONMENT_PROPERTIES_PATH,url=p_api_address["request"]["url"])elif sys.argv[1] in [f't{i}' for i in range(1, 8)]:# 測試環境conf_url.write_value(filename=CONFIGS_FILE_PATH_URL,data=test_api_address(sys.argv[1][1:]))modify_properties_url(filename=ENVIRONMENT_PROPERTIES_PATH,url=test_api_address(sys.argv[1][1:])["request"]["url"])else:case_logger.error("Please confirm the environmental information.")print("Please confirm the environmental information.")raise Exception
except IndexError:# 生產環境conf_url.write_value(filename=CONFIGS_FILE_PATH_URL,data=formal_api_address)modify_properties_url(filename=ENVIRONMENT_PROPERTIES_PATH,url=formal_api_address["request"]["url"])

這種方式我們需要使用 "python xxx.py -p" 這種方式進行環境切換,然后再執行pytest命令行去執行測試用例,但是這種方法能在pytest的命令行中使用嗎?能不能將環境切換的命令行也集成到pytest的命令行中,執行整個自動化項目只使用一條命令行呢?

方法一:Hook方法pytest_addoption注冊命令行參數

1、Hook方法注解

pytest_addoption:可以讓用戶注冊一個自定義的命令行參數,方便用戶將數據傳遞給 pytest
這個 Hook 方法一般和內置 fixture pytestconfig 配合使用
pytest_addoption 注冊命令行參數,pytestconfig 通過配置對象讀取參數的值
參考文檔:Writing plugins — pytest documentation

2、使用方法

1.一般編寫到conftest.py文件中

2.定義pytest_addoption方法注冊pytest命令行參數,函數名和參數保持一致

def pytest_addoption(parser):"""注冊自定義參數 env 到配置對象"""parser.addoption("--env", action="store",default="https://www.cnblogs.com/",help="將命令行參數 ’--env' 添加到 pytest 配置中")

parser.addoption參數說明:

  • name:自定義命令行參數的名字,可以是:"xx", "-xx" 或 "--xx"
  • action:在命令行中遇到此參數時要采取的基本操作類型
  • store:默認,只存儲參數的值,可以存儲任何類型的值,此時 default 也可以是任何類型的值,而且命令行參數多次使用也只能生效一個,最后一個值覆蓋之前的值
  • append:存儲一個列表,用 append 模式將可以同時多次使用自定義參數,并且 default ?默認值必須是一個列表,pytest 會把 default ?默認參數的值和多個自定義參數的值放在一個列表中
  • store_const:用 const 為命令行參數指定一個常量值,必須和 const 參數同時使用,使用這個模式后命令行參數不能賦值
  • append_const:存儲一個列表,使用 const 為命令行參數指定一個常量值,并將 default 默認值和 const ?常量值添加到列表中,這個模式可以同時多次使用自定義參數,但是還是不能賦值,只能使用常量
  • nargs:應該使用的命令行參數的數量
  • const:某些操作和nargs選擇所需的常量值
  • default:如果參數的值不在命令行中,則使用默認值
  • type:可以是 python 的基礎類型,比如:int,str,float,list 等類型,如果不指定類型的話,pytest會把接受到的參數值都默認為 str 類型,所以我們有時需要指定參數的類型,在使用 type 指定類型時,也需要把 default 的類型修改為同樣的類型!
  • choices:choices 可以指定幾個值,自定義參數必須在這幾個值中選擇一個,否則會報錯
  • required:命令行選項是否可以省略(僅可選)
  • help:對參數作用的簡要說明
  • metavar:用法消息中參數的名稱
  • dest:要添加到 parse_args() 返回的對象中的屬性的名稱

3.使用request.config.getoption("--命令行")獲取命令行參數的值

@pytest.fixture(scope="session")
def get_env(request):"""從配置對象中讀取自定義參數的值"""return request.config.getoption("--env")

4.fixture繼承,進行環境切換

@pytest.fixture(autouse=True)
def set_env(get_env):"""將自定義參數的值寫入全局配置文件"""with open(ENV_TXT_FILE, 'w', encoding='utf-8') as f:f.write(get_env)

5.通過pytest命令行傳參一鍵化實現環境切換和測試用例執行

方法二:使用插件pytest-base-url進行命令行傳參

1.安裝pytest-base-url

pip install pytest-base-url -i https://pypi.douban.com/simple

2.將base_url參數傳入到fixture函數中

@pytest.fixture
def driver_setup(base_url):try:URL = base_urlstart_chrome(URL, options=browser_options(), headless=False)driver = get_driver()except Exception as e:log.error(e)else:yield driver

3.pytest命令行傳參

使用 --base-url https://www.xxx.com/ 形式傳參

pytest --base-url https://www.cnblogs.com/
第一種不局限于環境切換,任何想通過pytest命令行傳入自定義的參數都可以通過方法一實現,因此殺雞焉用牛刀,環境切換優先推薦方法二!

二、總結

最后感謝每一個認真閱讀我文章的人,禮尚往來總是要有的,雖然不是什么很值錢的東西,如果你用得到的話可以直接拿走:

這些資料,對于做【軟件測試】的朋友來說應該是最全面最完整的備戰倉庫,這個倉庫也陪伴我走過了最艱難的路程,希望也能幫助到你!凡事要趁早,特別是技術行業,一定要提升技術功底。

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

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

相關文章

visual studio 2015 安裝閃退問題

參考鏈接: VS2012安裝時啟動界面一閃而過問題解決辦法 visual studio 2015 安裝閃退問題

RocketMQ Kafka區別

架構 ZooKeeper:管理 Broker 注冊、分區 Leader 選舉及消費者組狀態。Broker:存儲 Partition數據,每個 Partition 為獨立日志文件。Producer/Consumer:通過 ZooKeeper獲取路由信息,實現消息分發與消費。 NameServer&am…

MySQL進階篇2_SQL優化、鎖

文章目錄 1 SQL優化1.1插入數據優化1.2主鍵優化頁分裂頁合并主鍵設計原則 1.3order by設計優化1.4group by設計優化小理解 1.5limit設計優化順序IO和隨機IO小疑惑 1.6count設計優化1.7update優化關于隱式事務事務的DML操作 鎖全局鎖表級鎖表鎖元數據鎖意向鎖 行級鎖鎖的釋放條件…

如何測試 esp-webrtc-solution_solutions_doorbell_demo 例程?

軟件準備 esp-webrtc-solution/solutions/doorbell_demo 例程 此例程集成了 WebSocket 傳輸視頻流的應用 硬件準備 ESP32P4-Function-Ev-Board 環境搭建 推薦基于 esp-idf v5.4.1 版本的環境來編譯此例程 若編譯時出現依賴的組件報錯,可進行如下修改&#xff…

TransmittableThreadLocal:穿透線程邊界的上下文傳遞藝術

文章目錄 前言一、如何線程上下文傳遞1.1 ThreadLocal單線程1.2 InheritableThreadLocal的繼承困境1.3 TTL的時空折疊術 二、TTL核心設計解析2.1 時空快照機制2.2 裝飾器模式2.3 采用自動清理機制 三、設計思想啟示四、實踐啟示錄結語 前言 在并發編程領域,線程上下…

【數據結構】——棧

一、棧的概念和結構 棧其實就是一種特殊的順序表,其只允許在一端進出,就是棧的數據的插入和刪除只能在一端進行,進行數據的插入和刪除操作的一端稱為棧頂,另一端稱為棧底。棧中的元素遵循先進后出LIFO(Last InFirst O…

大數據技術全景解析:Spark、Hadoop、Hive與SQL的協作與實戰

引言:當數據成為新時代的“石油” 在數字經濟時代,數據量以每年50%的速度爆發式增長。如何高效存儲、處理和分析PB級數據,成為企業競爭力的核心命題。本文將通過通俗類比場景化拆解,帶你深入理解四大關鍵技術:Hadoop、…

Android13 權限管理機制整理

一、概述 權限機制作為Android 系統安全的保證,很重要,這里整理一下 權限機制中framework 部分,selinux等其他的Android權限機制不在本次討論范圍內 二、個版本差異分類 Android13 Android12 Android11 及以下 拋開版本差異權限機制分為兩大類 一類是之前apk在Android6.0…

MySQL的Order by與Group by優化詳解!

目錄 前言核心思想:讓索引幫你“排好序”或“分好組”Part 1: ORDER BY 優化詳解1.1 什么是 Filesort?為什么它慢?1.2 如何避免 Filesort?—— 利用索引的有序性1.3 EXPLAIN 示例 (ORDER BY) Part 2: GROUP BY 優化詳解2.1 什么是…

awesome-digital-human本地部署及配置:打造高情緒價值互動指南

在數字化交互的浪潮中,awesome-digital-human-live2d項目為我們打開了本地數字人互動的大門。結合 dify 聊天 api,并借鑒 coze 夸夸機器人的設計思路,能為用戶帶來充滿情緒價值的交互體驗。本文將詳細介紹其本地部署步驟、dify 配置方法及情緒…

[ctfshow web入門] web68

信息收集 highlight_file被禁用了,使用cinclude("php://filter/convert.base64-encode/resourceindex.php");讀取index.php,使用cinclude("php://filter/convert.iconv.utf8.utf16/resourceindex.php");可能有些亂碼,不…

計算機網絡:深度解析基于鏈路狀態的內部網關協議IS-IS

IS-IS(Intermediate System to Intermediate System)路由協議詳解 IS-IS(Intermediate System to Intermediate System)是一種基于鏈路狀態的內部網關協議(IGP),最初由ISO為OSI(開放系統互連)模型設計,后經擴展支持IP路由。它廣泛應用于大型運營商網絡、數據中心及復…

SEGGER項目

SystemView 查看版本, 查看SEGGER官網,release時間是2019-12-18日, 而3.12.0的版本日期是2020-05-04 #define SEGGER_SYSVIEW_MAJOR 3 #define SEGGER_SYSVIEW_MINOR 10 #define SEGGER_SYSVIEW_REV 0SEGGER EMBEDDED Studio 根據S…

Linux——Mysql索引和事務

目錄 一,Mysql索引介紹 1,索引概述 1,索引的優點 2,索引的缺點 2,索引作用 3,索引分類 普通索引 唯一索引 主鍵索引 組合索引 全文索引 4,查看索引 5,刪除索引 6&…

【Web】LACTF 2025 wp

目錄 arclbroth lucky-flag whack-a-mole arclbroth 看到username為admin能拿到flag 但不能重復注冊存在的用戶 這題是secure-sqlite這個庫的問題,底層用的是C,沒處理好\0字符截斷的問題 (在 Node.js 中,由于其字符串表示方式…

訪問者模式(Visitor Pattern)詳解

文章目錄 1. 訪問者模式概述1.1 定義1.2 基本思想 2. 訪問者模式的結構3. 訪問者模式的UML類圖4. 訪問者模式的工作原理5. Java實現示例5.1 基本實現示例5.2 訪問者模式處理復雜對象層次結構5.3 訪問者模式在文件系統中的應用 6. 訪問者模式的優缺點6.1 優點6.2 缺點 7. 訪問者…

matlab介紹while函數

MATLAB 中的 while 語句介紹 在 MATLAB 中,while 語句是一種循環結構,用于在滿足特定條件時反復執行一段代碼塊。與 for 循環不同,while 循環的執行次數是動態的,取決于循環條件是否為真。 語法 while condition% 循環體代碼 e…

數字信號處理|| 快速傅里葉變換(FFT)

一、實驗目的 (1)加深對快速傅里葉變換(FFT)基本理論的理解。 (2)了解使用快速傅里葉變換(FFT)計算有限長序列和無限長序列信號頻譜的方法。 (3)掌握用MATLA…

.Net Mqtt協議-MQTTNet(一)簡介

一、MQTTNet 簡介 MQTTnet 是一個高性能的MQTT類庫,支持.NET Core和.NET Framework。 二、MQTTNet 原理 MQTTnet 是一個用于.NET的高性能MQTT類庫,實現了MQTT協議的各個層級,包括連接、會話、發布/訂閱、QoS(服務質量&#xff0…

時鐘晶振鎖相環pll方向技術要點和大廠題目解析

本專欄預計更新60期左右。當前第9期。 本專欄不僅適用于硬件的筆試面試,同樣也適用于梳理硬件核心的知識點。 通過本文能得到什么? 首先,根據實戰經驗總結時鐘晶振,鎖相環的主要知識點,技術要點,面試考點; 然后,列出時鐘晶振,鎖相環的筆試面試的主要題型真題和模擬題,…