Pytest多環境切換實戰:測試框架配置的最佳實踐!

你是否也遇到過這種情況:本地測試通過,一到測試環境就翻車?環境變量錯亂、接口地址混亂、數據源配置丟失……這些「環境切換」問題簡直像定時炸彈,隨時引爆你的測試流程!

測試人員每天都跟不同的環境打交道,比如線上環境,測試環境,預上線環境等等,那么作為自動化測試人員寫的代碼,我們也要具備能自由切換環境的能力,那么今天小編就給大家聊一下,如何能讓我們python語言寫的測試用例可以自由切換到不同的環境下面去運行呢

Pytest 作為自動化測試的主力框架,如何實現本地、測試、預發、生產環境的靈活切換?有沒有一種通用、實用、可復用的方案?

“Pytest如何實現環境切換,讓測試適應不同場景?”這個問題曾讓我撓頭。配置文件怎么寫?參數怎么傳?能不能自動化切換而不用手動改代碼?帶著這些疑問,我開始摸索Pytest的環境管理功能。從簡單的命令行參數到復雜的配置文件,我發現它不僅靈活,還能無縫對接團隊協作。那么,具體該怎么操作呢?接下來,讓我們一起進入實戰,揭開Pytest環境切換的奧秘。

今天給他大家聊一下通過pytest框架實現自由環境切換的幾種方法。

1 pytest-base-url

pytest有一個插件叫pytest-base-url?,是管理base_url非常好的一款插件,文檔資料鏈接:https://pypi.org/project/pytest-base-url/

下載方式:

pip install pytest-base-url

圖片

案例如下:

import requestsdef test_demo(base_url):resp = requests.get(base_url)status_code = resp.status_codeassert status_code == 200

?

第1種使用方式是終端添加--base-url這個命令,如下所示:

圖片

第2種使用方式是在pytest.ini配置文件種去配置base_url,然后自動讀取url的數據,這樣就不用添加--base-url這個命令行參數了:

圖片

命令行直接運行pytest 即可。

2 hooks函數

pytest有個hooks函數,可以自定義命令行參數,一般在conftest.py中去引用。

Conftest.py中寫pytest_addoption這個hooks函數,可以自定義命令行參數,base_url只能對一個url地址進行傳遞,那么有的項目不僅需要多項目請求的url地址進行不同環境的切換,還需要對mysql的url地址進行不同的切換,這個時候就可以用自定義命令,定義不同的命令行參數,這樣我們在執行pytest的時候就可以自由進行傳遞。

代碼如下:

通過pytest_addoption這個hooks函數,設置了兩個命令行參數,一個是--mysql-url,另一個是--project-url,help后面是對這兩個命令行的解釋,解釋說明這兩個命令行代表什么含義

import pytestdef pytest_addoption(parser):parser.addoption("--mysql-url", action="store", help="這里可以傳遞mysql的url地址")parser.addoption("--project-url", action="store", help="這里可以傳遞項目的url地址")

通過fixture函數中的request參數去讀取命令行中傳遞的參數,賦值給一個變量,就可以在pytest中隨便使用。

@pytest.fixture(scope='class')
def get_url(request):mysql_url = request.config.getoption('--mysql-url')project_url = request.config.getoption('--project-url')return mysql_url, project_url

項目代碼如下:

fixture函數的調用,直接把fixture的名字當成參數傳遞到測試用例里面即可

import requestsdef test_demo(get_url):mysql_url = get_url[0]print('mysql_url的地址是{}'.format(mysql_url))project_url = get_url[1]resp = requests.get(project_url)status_code = resp.status_codeassert status_code == 200

運行測試的命令為:

pytest?-s --mysql -url?192.168.1.11--project-url http://www.example.com

如下圖所示:

圖片

3 yml和fixture

通過?yml文件?和?fixture?進行配合使用,首先在項目目錄下面創建一個conf.yml,然后里面去手動配置現在要運行的環境,截圖如下:

圖片

然后在創建一個conftest.py,里面定義兩個fixture函數,一個用來讀取conf.yml里面的內容,另一個用來配置具體的環境信息

比如qa環境,release環境,然后通過conf.yml里面配置的qa還是release,來讀取project_url?和?mysql_url,截圖如下:

import pytest
import yaml@pytest.fixture(scope="session")
def config():with open('./conf.yml', 'r', encoding='utf-8') as f:conf = yaml.load(f.read(), Loader=yaml.FullLoader)return conf@pytest.fixture(scope="session")
def env_vars(config):env = config["env"]mapping = {"qa": {"project_url": "http://121.42.15.146:9090","mysql_url": "192.168.1.1"},"release": {"project_url": "https://release.com","mysql_url": "127.0.0.1"}}project_url = mapping[env]["project_url"]mysql_url = mapping[env]["mysql_url"]return mysql_url, project_url

項目代碼(還是之前的測試用例)如下:

import requestsdef test_demo(env_vars):mysql_url = env_vars[0]print('mysql_url的地址是{}'.format(mysql_url))project_url = env_vars[1]resp = requests.get(project_url)status_code = resp.status_codeassert status_code == 200

命令行運行方式,正常運行即可,截圖如下:

圖片

結論

隨著 CI/CD 流水線普及,多環境并存已成常態。測試人員面臨的環境復雜度越來越高,若不能實現配置統一、切換自如,將嚴重拖慢測試效率,甚至引發線上事故。

環境切換看似是小問題,實則影響自動化測試流程的穩定性與擴展性。掌握 Pytest 中的配置管理,就等于掌握了自動化測試的方向盤。

總的來說,Pytest的環境切換通過命令行參數、配置文件和插件支持,讓測試靈活適應各種場景。從單人開發到團隊協作,它都能大幅提升效率。這不僅是技術實踐,更是現代測試思維的體現。掌握環境切換,你的測試流程將更加順暢,代碼質量也能更上一層樓。

測試環境千萬條,配置管理第一條;配置不統一,Bug淚兩行。

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

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

相關文章

藍橋杯賽前題

開始每個人能量為3 答題了&#xff0c;答題者1 扣分最后算 #include<bits/stdc.h> using namespace std;const int N1e510; int a[N]; int main(){int n,k,q;cin>>n>>k>>q;for(int i1;i<n;i){a[i]k; }for(int i1;i<q;i){int x;cin>>x;a[…

VSCode優雅的使用debug

原始用法&#xff1a;(這里不使用) 配置launch.json&#xff0c;里面傳入參數然后debug&#xff0c;這里我們通常需要傳入的參數比較多&#xff0c;而且經常修改參數&#xff0c;直接去修改launch.json會比較麻煩&#xff0c;所以使用sh腳本比較方便。 {// Use IntelliSense to…

oracle常見問題處理集錦

oracle常見問題處理集錦 oracle常見問題處理集錦ORA-03001:未實施的功能ORA:28000 the count is locked oracle常見問題處理集錦 ORA-03001:未實施的功能 問題 ORA-03001:未實施的功能 在datagrip中修改表名稱&#xff0c;使用的語法是&#xff1a; rename old_name to new_n…

項目日志配置模板示例

1.新增application.properties配置 logging.configclasspath:logback-spring.xml spring.profiles.activedev 將項目部署到服務器時需要將dev修改為test后再進行打包部署 2.新增logback-spring.xml <?xml version"1.0" encoding"UTF-8"?> <…

2025年第十八屆“認證杯”數學中國數學建模網絡挑戰賽【BC題】完整版+代碼+結果

# 問題一&#xff1a;隨機森林回歸from sklearn.ensemble import RandomForestRegressormodel_rf RandomForestRegressor()model_rf.fit(X_train, y_train)# 問題二&#xff1a;LSTM時間序列預測from tensorflow.keras.models import Sequentialmodel_lstm Sequential()model…

C語言實現TcpDump

一、 在 C 語言中實現 TCP 抓包功能&#xff0c;通常可以使用 libpcap 庫。libpcap 是一個廣泛使用的網絡抓包庫&#xff0c;它提供了捕獲網絡數據包的接口。 libpcap 是一個廣泛使用的 C 語言庫&#xff0c;用于捕獲和過濾網絡數據包。它提供了一個通用接口&#xff0c;用于訪…

Spark-Core編程

sortByKey算子&#xff1a;對(K, V)型RDD按key排序&#xff0c;K需實現Ordered接口&#xff0c;可指定升序或降序及分區數。 join算子&#xff1a;連接兩個(K, V)和(K, W)型RDD&#xff0c;返回(K, (V, W))型RDD 。 leftOuterJoin算子&#xff1a;類似SQL左外連接&#xff0c;返…

閱讀MySQL實戰45講第9天

目錄 一、你的 SQL 語句為什么變“慢” 二、什么情況會引發數據庫的 flush 過程&#xff1f; 三、分析上面四種場景對性能的影響 四、InnoDB 刷臟頁的控制策略 五、原作者小結&#xff1a; 引言&#xff1a; 一條 SQL 語句&#xff0c;正常執行的時候特別快&#xff0c;但是有時…

cin,cin.get(),getchar(),getline(),cin.get line()異同點

文章目錄 1.cin2.cin.get()3.getchar()4.cin.getline()5.getline() 1.cin &#xff08;1&#xff09;cin>>等價于cin.operator>>()&#xff0c;即調用成員函數operator>>()進行讀取數據。 &#xff08;2&#xff09;當cin>>從緩沖區中讀取數據時&…

VMware虛擬機Ubuntu磁盤擴容

VMware中操作&#xff1a; 選擇要擴容的虛擬機&#xff0c;點擊編輯虛擬機設置 打開后點擊磁盤——>點擊擴展&#xff08;注意&#xff1a;如果想要擴容的話需要刪除快照&#xff09; 調整到你想要的容量 點擊上圖的擴展——>確定 然后我們進到虛擬機里面 首先&#…

卷積神經網絡(CNN)可視化網站匯總

深度學習 文章目錄 深度學習前言CNN ExplainerDeep Learning PlaygroundConvNetJSUnderstanding CNN with Interactive Visualizations3Blue1Brown Neural Networks YouTube PlaylistDistill.pubTensorFlow CNN Visualization (TensorBoard)NN-SVGOpenAI Microscope 前言 匯總…

實習技能記錄【3】-----Git操作

1. Git是什么 Git 是一個分布式版本控制系統 (Distributed Version Control System, DVCS)。 它的核心目標是跟蹤文件的變化&#xff0c;讓你能夠隨時記錄、回溯、協作和管理你的項目。 2. 介紹 2.1 Git 工作區、暫存區、本地倉庫介紹 區域名稱英文名說明相關命令工作區Wor…

藍橋杯單片機刷題——按鍵設置當前采集距離為距離參數

設計要求 驅動超聲波傳感器&#xff0c;啟動距離測量功能,并將其結果顯示到數碼管上。 按鍵“S5”定義為參數按鍵&#xff0c;按下S5按鍵&#xff0c;設備自動將當前采集的距離數據作為距離參數&#xff1b; 若測量的距離數據超過距離參數&#xff0c;指示燈L1點亮&#xff…

KV Cache大模型推理加速功能

KV Cache KV Cache是大模型標配的推理加速功能&#xff0c;也是推理過程中&#xff0c;顯存資源巨大開銷的元兇之一。在模型推理時&#xff0c;KV Cache在顯存占用量可達30%以上。 目前大部分針對KV Cache的優化工作&#xff0c;主要集中在工程上。比如著名的VLLM&#xff0c…

Windows 圖形顯示驅動開發-WDDM 2.0功能_上下文監視

功能概述 上下文監視機制是GPU與CPU協同計算的核心同步技術&#xff0c;通過受監視圍欄&#xff08;Monitored Fence&#xff09;實現跨硬件單元的高效協調。其核心目標是解決以下場景的同步需求&#xff1a; GPU引擎間同步&#xff1a;例如在多渲染管線中&#xff0c;后處理…

基于YOLOv8的機場跑道異物檢測識別系統:提升航空安全的新一代解決方案(主頁有源碼)

?個人主頁歡迎您的訪問 ?期待您的三連 ? ?個人主頁歡迎您的訪問 ?期待您的三連 ? ?個人主頁歡迎您的訪問 ?期待您的三連? ??? ????????? ?? 1. 機場跑道異物檢測領域概述 機場跑道異物(Foreign Object Debris, FOD)是指存在于機場跑道、滑行道等關…

網絡協議學習

最近在適配ESP32的網絡驅動&#xff0c;借此機會先學習一下網絡通信協議。 以太網幀、IP包及TCP與UDP的報文格式一文讀懂網絡報問中的檢驗和&#xff08;checksum&#xff09;—— 原理舉例代碼 提問騰訊元寶提示詞&#xff1a; TCP窗口是干什么的擁塞窗口是什么的

fit 轉 gpx

新增 fit 轉 gpx 功能 https://fittools.cc/home/fit2gpx

C++ I/O 性能優化指南

在高性能計算和大規模數據處理中&#xff0c;I/O 性能優化是提升系統整體效率的關鍵環節。C 作為一種高性能編程語言&#xff0c;提供了豐富的工具和機制來優化 I/O 操作。本文將詳細介紹在 Linux 環境下&#xff0c;如何通過代碼層面的優化、系統調用的選擇以及多線程技術等手…

Python中內置的數據結構類型詳析(內置數據容器)

目錄 1. 元組&#xff08;Tuple&#xff09;??2. 列表&#xff08;List&#xff09;?3. 字典&#xff08;Dict&#xff09;4. 集合&#xff08;Set&#xff09;??5. 字符串&#xff08;Str&#xff09;6. 隊列&#xff08;Queue&#xff09;與棧&#xff08;Stack&#xf…