pytest自動化中關于使用fixture是否影響用例的獨立性

第一個問題:難道使用fixture 會影響用例獨立嗎?

? 簡單回答:
使用 fixture ≠ 不獨立。
只要你的 fixture 是每次測試都能自己運行、自己產生數據的,那么測試用例依然是“邏輯獨立”的。

? 怎么判斷 fixture 是否影響獨立性?

情況是否影響獨立性說明
fixture 中 硬編碼共享數據(如共享 token)? 是耦合的多個用例依賴同一數據,順序或狀態會影響結果
fixture 每次調用都能 重新生成獨立數據? 不影響比如每個測試都生成新 token、新用戶
fixture 被多個用例共享,且包含有狀態操作? 可能影響比如 fixture 中做了前置清理,多個測試共享它就有影響
fixture 被一個用例專用? 安全就像把準備步驟封裝起來,依然獨立

📌 示例一:? 獨立的 fixture(沒問題)

pythonimport pytest
import requests@pytest.fixture
def valid_token():# 每次都調用登錄接口,獲取新 tokenresponse = requests.post("http://example.com/api/login", json={"username": "testuser","password": "123456"})assert response.status_code == 200return response.json()["token"]def test_user_info(valid_token):headers = {"Authorization": f"Bearer {valid_token}"}resp = requests.get("http://example.com/api/user/info", headers=headers)assert resp.status_code == 200

?? 這個 valid_token fixture 每次都是“自給自足”的,不依賴其他測試狀態,所以仍然是獨立用例。

?? 示例二:? 有耦合風險的 fixture

python# 假設 login_fixture 中手動生成了 token 或寫死一個 token
@pytest.fixture(scope="session")
def shared_token():return "abc1234567"  # 固定寫死,或者由前置用例創建def test_user_info(shared_token):...

這個 shared_token fixture:

  • 不一定來自當前測試生成

  • 可能是別的用例產生或初始化時產生的

    🛑 這種就存在耦合風險。如果別的地方修改了 token 或狀態,可能影響這個用例。

? 最佳實踐建議:

做法推薦程度理由
每個用例內部寫登錄邏輯👍 簡單但冗余少量可接受? 保證測試完全獨立,無需依賴外部狀態或 fixture,適合初學或用例量較少時
用 fixture 封裝登錄,但每次自動重新登錄? 最推薦? 實現代碼復用 + 獨立性兼顧,每個用例拿到的 token 都是最新、唯一、干凈的
共享全局 token、session 作為 fixture?? 僅限于性能優化場景,否則不推薦?? 存在用例狀態耦合、測試順序依賴等風險,若 token 被修改或過期會影響所有用例

📌 總結一句話:

只要 fixture 是“每個用例都能獨立用”的工具,它就是幫助測試保持獨立的;只有當它變成“多個測試共用的狀態容器”,才會破壞獨立性。

第二個問題:那scope="session"這種級別的都是耦合的嗎?

? 簡短回答:
不是所有 scope=“session” 的 fixture 都導致耦合,關鍵在于你放了什么內容進去。

🧠 深入理解:fixture 的 scope 只是控制“生命周期”,不等于是否“耦合”。

scope 值生命周期舉例
“function”每個用例都執行一次(默認)最獨立、最干凈
“class”每個類只執行一次類內測試共享
“module”每個測試文件只執行一次跨函數共享
“session”整個測試執行過程只執行一次所有用例共享,最廣

? 所以:是否“耦合”,取決于 fixture 內部內容是否有狀態 / 會變化 / 受上下文影響

📌 下面通過具體例子來解釋:

? 安全的 session 級別 fixture(無耦合)

python# 這是一個靜態配置類 fixture,和用例無狀態相關
@pytest.fixture(scope="session")
def base_url():return "http://example.com/api"

?? 這個不會耦合,因為它只是一個靜態值,多個用例共享沒有問題。

?? 有耦合風險的 session 級別 fixture(含狀態)

python@pytest.fixture(scope="session")
def shared_token():# 登錄一次,所有用例共用resp = requests.post("http://example.com/api/login", json={"username": "testuser", "password": "123456"})return resp.json()["token"]

🛑 如果某個測試改變了用戶狀態(比如禁用賬號、修改密碼),其它測試就會失敗。這就是“隱性耦合”。

? 推薦做法(平衡獨立性 & 性能):

? 方案一:默認使用 function scope,保持測試獨立性

python@pytest.fixture
def fresh_token():# 每個用例登錄一次,獨立、干凈...

? 方案二:使用 session,但只放“無狀態的共享配置”

python@pytest.fixture(scope="session")
def env_config():return {"base_url": "http://example.com/api","headers": {"Content-Type": "application/json"}}

🔚 總結一句話:

scope=“session” 本身不是壞事,但如果 fixture 中包含用戶態、系統態、會變的內容,就可能導致耦合問題。配置類 OK,狀態類要謹慎。

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

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

相關文章

C++計算 n! 中末尾零的數量

* 詳細說明* 給定一個整數作為輸入。目標是找出該數的階乘結果中末尾零的數量。 一個數 N 的階乘是范圍 [1, N] 內所有數的乘積。* * 我們知道,只有當一個數是 10 的倍數或者有因數對 (2, 5) 時,才會產生末尾零。 在任何大于 5 的數的階乘中,…

推薦系統/業務,相關知識/概念2

一、漫畫庫更新大量新作品,如何融入推薦系統? 參考答案: 快速提取新作品特征:除基礎屬性外,利用自然語言處理技術提取漫畫簡介關鍵詞等豐富特征向量,分析情節、角色設定等深層次特征結合物品畫像體系分類…

# 手寫數字識別:使用PyTorch構建MNIST分類器

手寫數字識別:使用PyTorch構建MNIST分類器 在這篇文章中,我將引導你通過使用PyTorch框架構建一個簡單的神經網絡模型,用于識別MNIST數據集中的手寫數字。MNIST數據集是一個經典的機器學習數據集,包含了60,000張訓練圖像和10,000張…

強化學習筆記(三)——表格型方法(蒙特卡洛、時序差分)

強化學習筆記(三)——表格型方法(蒙特卡洛、時序差分) 一、馬爾可夫決策過程二、Q表格三、免模型預測1. 蒙特卡洛策略評估1) 動態規劃方法和蒙特卡洛方法的差異 2. 時序差分2.1 時序差分誤差2.2 時序差分方法的推廣 3. 自舉與采樣…

c++_csp-j算法 (4)

迪克斯特拉() 介紹 迪克斯特拉算法(Dijkstra算法)是一種用于解決單源最短路徑問題的經典算法,由荷蘭計算機科學家艾茲赫爾迪克斯特拉(Edsger W. Dijkstra)于1956年提出。迪克斯特拉算法的基本思想是通過逐步擴展已經找到的最短路徑集合,逐步更新節點到源節點的最短路…

(13)VTK C++開發示例 --- 透視變換

文章目錄 1. 概述2. CMake鏈接VTK3. main.cpp文件4. 演示效果 更多精彩內容👉內容導航 👈👉VTK開發 👈 1. 概述 在VTK(Visualization Toolkit)中,vtkPerspectiveTransform 和 vtkTransform 都是…

深入探索Qt異步編程--從信號槽到Future

概述 在現代軟件開發中,應用程序的響應速度和用戶體驗是至關重要的。尤其是在圖形用戶界面(GUI)應用中,長時間運行的任務如果直接在主線程執行會導致界面凍結,嚴重影響用戶體驗。 Qt提供了一系列工具和技術來幫助開發者實現異步編程,從而避免這些問題。本文將深入探討Qt…

基于Python的圖片/簽名轉CAD小工具開發方案

基于Python的圖片/簽名轉CAD工具開發方案 一、項目背景 傳統設計流程中,設計師常常需要將手寫簽名或掃描圖紙轉換為CAD格式。本文介紹如何利用Python快速開發圖像矢量化工具,實現: 📷 圖像自動預處理?? 輪廓精確提取?? 參數…

【倉頡 + 鴻蒙 + AI Agent】CangjieMagic框架(17):PlanReactExecutor

CangjieMagic框架:使用華為倉頡編程語言編寫,專門用于開發AI Agent,支持鴻蒙、Windows、macOS、Linux等系統。 這篇文章剖析一下 CangjieMagic 框架中的 PlanReactExecutor。 1 PlanReactExecutor的工作原理 #mermaid-svg-OqJUCSoxZkzylbDY…

一文了解相位陣列天線中的真時延

本文要點 真時延是寬帶帶相位陣列天線的關鍵元素之一。 真時延透過在整個信號頻譜上應用可變相移來消除波束斜視現象。 在相位陣列中使用時延單元或電路板,以提供波束控制和相移。 市場越來越需要更快、更可靠的通訊網絡,而寬帶通信系統正在努力滿…

Java中 關于編譯(Compilation)、類加載(Class Loading) 和 運行(Execution)的詳細區別解析

以下是Java中 編譯(Compilation)、類加載(Class Loading) 和 運行(Execution) 的詳細區別解析: 1. 編譯(Compilation) 定義 將Java源代碼(.java文件&#x…

【KWDB 創作者計劃】_深度學習篇---松科AI加速棒

文章目錄 前言一、簡介二、安裝與配置硬件連接驅動安裝軟件環境配置三、使用步驟初始化設備調用SDK接口檢測設備狀態:集成到AI項目四、注意事項兼容性散熱固件更新安全移除五、硬件架構與技術規格核心芯片專用AI處理器內存配置接口類型物理接口虛擬接口能效比散熱設計六、軟件…

如何清理Windows系統中已失效或已刪除應用的默認打開方式設置

在使用Windows系統的過程中,我們可能會遇到一些問題:某些已卸載或失效的應用程序仍然出現在默認打開方式的列表中,這不僅顯得雜亂,還可能影響我們快速找到正確的程序來打開文件。 如圖,顯示應用已經被geek強制刪除&am…

NFC碰一碰發視頻推廣工具開發注意事項丨支持OEM搭建

隨著線下門店短視頻推廣需求的爆發,基于NFC技術的“碰一碰發視頻”推廣工具成為商業熱點。集星引擎在開發同類系統時,總結出六大核心開發注意事項,幫助技術團隊與品牌方少走彎路,打造真正貼合商戶需求的實用型工具: 一…

pgsql中使用jsonb的mybatis-plus和Spring Data JPA的配置

在pgsql中使用jsonb類型的數據時,實體對象要對其進行一些相關的配置,而mybatis和jpa中使用各不相同。 在項目中經常會結合 MyBatis-Plus 和 JPA 進行開發,MyBatis_plus對于操作數據更靈活,jpa可以自動建表,兩者各取其…

kotlin + spirngboot3 + spring security6 配置登錄與JWT

1. 導包 implementation("com.auth0:java-jwt:3.14.0") implementation("org.springframework.boot:spring-boot-starter-security")配置用戶實體類 Entity Table(name "users") data class User(IdGeneratedValue(strategy GenerationType.I…

【JavaWeb后端開發03】MySQL入門

文章目錄 1. 前言1.1 引言1.2 相關概念 2. MySQL概述2.1 安裝2.2 連接2.2.1 介紹2.2.2 企業使用方式(了解) 2.3 數據模型2.3.1 **關系型數據庫(RDBMS)**2.3.2 數據模型 3. SQL語句3.1 DDL語句3.1.1 數據庫操作3.1.1.1 查詢數據庫3.1.1.2 創建數據庫3.1.1…

人工智能在智能家居中的應用與發展

隨著人工智能(AI)技術的飛速發展,智能家居逐漸成為現代生活的重要組成部分。從智能語音助手到智能家電,AI正在改變我們與家居環境的互動方式,讓生活更加便捷、舒適和高效。本文將探討人工智能在智能家居中的應用現狀、…

【EasyPan】項目常見問題解答(自用持續更新中…)

EasyPan 網盤項目介紹 一、項目概述 EasyPan 是一個基于 Vue3 SpringBoot 的網盤系統,支持文件存儲、在線預覽、分享協作及后臺管理,技術棧涵蓋主流前后端框架及中間件(MySQL、Redis、FFmpeg)。 二、核心功能模塊 用戶認證 注冊…

4.1騰訊校招簡歷優化與自我介紹攻略:公式化表達+結構化呈現

騰訊校招簡歷優化與自我介紹攻略:公式化表達結構化呈現 在騰訊校招中,簡歷是敲開面試大門的第一塊磚,自我介紹則是展現個人魅力的黃金30秒。本文結合騰訊面試官偏好,拆解簡歷撰寫公式、自我介紹黃金結構及分崗位避坑指南&#xf…