測試學習之——Pytest Day3

引言

Pytest 作為 Python 中最受歡迎的測試框架之一,以其簡潔的語法、強大的功能和豐富的插件生態系統,極大地提升了自動化測試的效率和可維護性。在本文中,我們將深入探討 Pytest 的兩大核心特性:Fixture 和插件管理,幫助您更高效地編寫和管理您的測試用例。

一、夾具fixture

Fixture 是 Pytest 中一個非常強大的特性,它允許您定義在測試用例執行之前或之后自動運行的代碼。這對于設置測試環境(前置操作)和清理測試環境(后置操作)非常有用,例如:

?前置操作:加密參數、啟動瀏覽器、注冊并登錄賬號。

?后置操作:解密結果、關閉瀏覽器、刪除賬號。

1. 創建 Fixture

創建 Fixture 非常簡單,只需遵循以下步驟:

1.創建一個函數。

2.使用 @pytest.fixture 裝飾器裝飾該函數。

3.在函數中使用 yield 關鍵字來分隔前置操作和后置操作。yield 之前的代碼是前置操作,yield 之后的代碼是后置操作。

import pytest
from datetime import datetime@pytest.fixture
def f():print(datetime.now(), "用例開始執行")# 前置操作yield  # 開始執行測試用例# 后置操作print(datetime.now(), "用例執行結束")

2、使用fixture

1.在用例的參數列表中,添加fixture的名字即可

2.給用例加上一個標記usefixtures

示例:

from datetime import datetimeimport pytest@pytest.fixture
def f():print(datetime.now(),"用例開始執行")#前置操作yield#開始執行測試用例#后置操作print(datetime.now(),"用例執行結束")def test_1(f):pass@pytest.mark.usefixtures("f")
def test_2():

3、 Fixture 高級使用

3.1 自動使用 (autouse)

如果您希望某個 Fixture 自動應用于所有或特定范圍內的測試用例,而無需顯式地將其作為參數傳遞或使用 usefixtures 標記,可以使用 autouse=True 參數。

from datetime import datetimeimport pytest@pytest.fixture(autouse= True)
def f():print(datetime.now(),"用例開始執行")#前置操作yield#開始執行測試用例#后置操作print(datetime.now(),"用例執行結束")def test_1():passdef test_2():pass

3.2 依賴使用

Fixture 之間可以存在依賴關系。一個 Fixture 可以通過在其參數列表中聲明另一個 Fixture 來使用它。Pytest 會確保被依賴的 Fixture 在依賴它的 Fixture 之前運行。

from datetime import datetimeimport pytest@pytest.fixture
def ff():print("我也是一個fixture,但我被fixture使用")@pytest.fixture(autouse= True)
def f(ff):print(datetime.now(),"用例開始執行")#前置操作yield#開始執行測試用例#后置操作print(datetime.now(),"用例執行結束")def test_1():passdef test_2():pass
  • linux:使用Linux進行編譯
  • git:使用git進行版本控制
  • fixture:使用fixture進行前后置自動操作

3.3 返回內容:接口自動化封裝

Fixture 可以返回數據,這些數據可以被測試用例或其他 Fixture 接收。這在接口自動化測試中非常有用,例如,一個 Fixture 可以負責登錄并返回認證 token,其他測試用例可以直接使用這個 token。

# ... (接上文 f() fixture 定義,假設 yield 123)def test_1(f):print('收到fixture傳遞的數據', f) # f 將會是 123def test_2():passdef test_3(f, ff):pass

3.4 范圍共享 (Scope)

Fixture 默認的作用域是 function,這意味著每個測試函數都會執行一次 Fixture。Pytest 提供了多種作用域,以控制 Fixture 的生命周期:

?function (默認):每個測試函數執行一次。

?class:每個測試類執行一次。

?module:每個模塊執行一次。

?package:每個包執行一次。

?session:整個測試會話只執行一次。

使用 scope 參數來指定 Fixture 的作用域。例如,scope="session" 可以讓 Fixture 在整個測試會話中只運行一次,這對于啟動和關閉數據庫連接等耗時操作非常有用。

使用 conftest.py 文件:

conftest.py 文件是 Pytest 中一個特殊的本地插件文件,它可以用來存放 Fixture 和鉤子函數,使其在整個項目或特定目錄下自動被發現和使用,而無需導入。

def test_1(f):print('收到fixture傳遞的數據',f)def test_2():pass
def test_3(f,ff):pass
from datetime import datetimeimport pytest@pytest.fixture(scope = "session")
def ff():print("我也是一個fixture,但我被fixture使用")@pytest.fixture(autouse = True,scope = "session")
def f(ff):print(datetime.now(),"用例開始執行")#前置操作yield 123#開始執行測試用例#后置操作print(datetime.now(),"用例執行結束")#python語法允許函數中有多個 yield

運行結果:

當 f 和 ff 都設置為 session 作用域時,它們只會在整個測試會話開始時執行一次前置操作,并在會話結束時執行一次后置操作。

二、Pytest插件管理

Pytest 強大的插件生態系統是其核心優勢之一,它極大地擴展了框架的功能。Pytest 插件可以分為兩類:

?內置插件:Pytest 框架自帶,無需額外安裝即可使用。

?第三方插件:由社區開發,需要通過 pip 等工具進行安裝。

插件的啟動與管理

Pytest 提供了靈活的方式來啟用或禁用插件:

?啟用插件:使用 -p <plugin_name> 參數。例如,pytest -p no:cache 可以禁用內置的緩存插件。

?禁用插件:使用 -p no:<plugin_name> 參數。例如,pytest -p no:html 可以禁用 pytest-html 插件。

插件使用方式

插件通常通過以下幾種方式與 Pytest 集成和交互:

1.命令行參數:許多插件提供額外的命令行參數來控制其行為。

2.配置文件:通過 pytest.ini、pyproject.toml 或 setup.cfg 等配置文件來配置插件。

3.Fixture:插件可以提供自定義的 Fixture,供測試用例使用。

4.Mark:插件可以注冊自定義的 mark,用于標記和過濾測試用例。

三、常用第三方插件

Pytest 社區提供了大量實用的第三方插件,以下是一些在實際項目中常用的插件:

1. pytest-html:生成美觀的 HTML 測試報告

?用途:將 Pytest 的測試結果生成美觀、易讀的 HTML 格式報告,方便查看測試概覽、詳細信息和失敗原因。

?安裝:

pip install pytest-html

?使用:

?命令行:

pytest --html=report.html --self-contained-html

?配置文件 (pytest.ini):

addopts = --html=report.html --self-contained-html

2. pytest-xdist:分布式并行執行測試

?用途:允許 Pytest 在多個 CPU 核心或遠程主機上并行執行測試用例,顯著縮短大型測試套件的執行時間。

?安裝:

pip install pytest-xdist

?使用:

-n N (N為需要用多少進程)

只有在任務本身耗時較長,超出調用成本很多的時候,才有意義。

分布式執行,有并發問題,資源競爭、亂序。

3. pytest-rerunfailures:失敗用例重跑

?用途:在測試用例失敗后,自動重新執行失敗的用例。這對于處理不穩定測試(例如,由于網絡波動或 UI 渲染問題導致的偶發性失敗)非常有用。

?安裝:

pip install pytest-rerunfailures

?使用:

?--reruns N:指定失敗后重跑的次數。

?--reruns-delay N:指定每次重跑之間的等待時間(秒)。

4. pytest-result-log:記錄測試結果到日志文件

?用途:將 Pytest 的測試執行結果詳細記錄到指定的日志文件中,方便后續分析和追蹤。

?安裝:

pip install pytest-result-log

?使用:主要通過 pytest.ini 配置文件進行設置。

log_file= ./logs/pytest.log
log_file_level= info
log_file_format= %(levelname)-8s %(asctime)s [%(name)s:%(lineno)s] : %(message)s
log_file_date_format= %Y-%m-%d %H:%M:%S;記錄用例執行結果
result_log_enable= 1
;記錄用例分割線
result_log_separator=1
;分割線等級
result_log_level_separator= warning
;異常信息等級
result_log_level_verbose= info

結論

通過本文的深入學習,您應該對 Pytest 的 Fixture 機制和豐富的插件生態系統有了更全面的理解。Fixture 能夠幫助我們更好地管理測試的前置和后置操作,提高測試代碼的復用性和可維護性;而各種強大的第三方插件則極大地擴展了 Pytest 的功能,使其能夠滿足各種復雜的測試需求。

掌握這些 Pytest 的核心特性,將使您在自動化測試的道路上更加得心應手,編寫出更高效、更健壯的測試代碼。希望本文能對您的 Pytest 學習之旅有所幫助!

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

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

相關文章

控制Vue對話框顯示隱藏

正確做法 — 使用 Vue 數據驅動控制顯隱你不需要手動設置 display: block&#xff0c;因為 Element Plus 的 <el-dialog> 是基于 v-model 或 :visible.sync 控制的。&#x1f527; 修改模板部分&#xff1a;將原來的&#xff1a;<el-dialog title"報文詳情"…

直播帶貨與開源AI智能名片鏈動2+1模式S2B2C商城小程序:重塑電商營銷新格局

摘要&#xff1a;本文聚焦于直播帶貨對互聯網供需關系的深刻影響&#xff0c;分析其如何改變傳統電商營銷模式&#xff0c;實現從“人找貨”到“貨找人”的轉變。同時&#xff0c;引入開源AI智能名片鏈動21模式S2B2C商城小程序這一創新概念&#xff0c;探討其在直播帶貨背景下的…

Jmeter 性能測試響應時間過長怎么辦?

當 JMeter 性能測試中出現 響應時間過長 的問題時&#xff0c;需要從 測試腳本、服務器、網絡、JMeter配置 等多方面排查和優化。以下是詳細的解決步驟和思路&#xff1a; B站最新性能進階&#xff0c;學會這些jmeter性能測試技能&#xff0c;更助于正確設計、執行和分析性能測…

COZE官方文檔基礎知識解讀第三期 —— prompt(提示詞)

COZE官方文檔基礎知識解讀第三期 —— prompt&#xff08;提示詞&#xff09; 對于初步接觸PE&#xff08;prompt engineering&#xff09; 的小伙伴們&#xff0c;你們可以去火山方舟提供的prompt工具&#xff0c;用工具&#xff08;其余的prompt網站https://www.promptinggu…

代碼隨想錄算法訓練營第三十二天|動態規劃理論基礎、LeetCode 509. 斐波那契數、70. 爬樓梯、746. 使用最小花費爬樓梯

目錄 LeetCode 509. 斐波那契數 70. 爬樓梯 746. 使用最小花費爬樓梯 感想 文檔講解&#xff1a;代碼隨想錄 動態規劃&#xff0c;英文&#xff1a;Dynamic Programming&#xff0c;簡稱DP&#xff0c;如果某一問題有很多重疊子問題&#xff0c;使用動態規劃是最有效的。 …

SpringMVC3

一、JSON 與參數傳遞1.1JSON 是什么- JSON 是字符串&#xff1a;比如 {"name":"zhangsan","password":"123456","age":15} 就是一個 JSON 字符串&#xff0c;它用來在前后端、服務間傳遞數據。- JSON 庫&#xff1a;Fastj…

查看.bin二進制文件的方式(HxD十六進制編輯器的安裝)

文章目錄Windows 系統上安裝 HxD 十六進制編輯器的步驟。**HxD 是一款免費、輕量級的工具&#xff0c;適合查看和編輯 .bin 等二進制文件。****PS:實際安裝過程中會發現找不到Windows11的版本&#xff0c;安裝windows10的即可&#xff0c;并且沒有區別setup版和portable版**安裝…

Linux系統性能優化與監控

系統性能優化與監控是保障 Linux 服務器穩定運行的核心技術&#xff0c;涉及 ??CPU、內存、磁盤 I/O、網絡、進程?? 等多維度的指標分析、問題定位與優化策略。以下從??監控工具與指標??、??常見問題診斷??、??優化方法??三個層面詳細講解&#xff0c;并結合?…

如何在 React + TypeScript 中實現 JSON 格式化功能

如何在 React TypeScript 中實現 JSON 格式化功能 作為前端開發者&#xff0c;我們經常需要處理 JSON 數據。無論是 API 調試、配置文件編輯還是數據轉換&#xff0c;能夠格式化 JSON 是一項基本但非常有用的技能。本文將詳細介紹如何在 React 和 TypeScript 環境中實現 JSON…

Mac連接服務器Docker容器全攻略

蘋果電腦( macOS 系統 )連接服務器、配置容器,整體思路和 Linux 終端操作更貼近,以下結合 macOS 特點,詳細分步說明,以 Docker 容器 + 常見 Linux 服務器( 如 CentOS、Ubuntu )為例: 一、連接服務器(SSH 方式, macOS 終端原生支持 ) 1. 準備信息 找運維或云平臺…

【字節跳動】數據挖掘面試題0019:帶貨直播間推薦:現在有一個帶貨的直播間,怎么把它精準地推送給有需要的用戶

文章大綱 帶貨直播間推薦系統:原理、算法與實踐 一、推薦系統在帶貨直播中的重要性 二、數據收集與處理 1. 用戶數據 2. 直播間數據 3. 用戶行為數據 4. 數據處理與特征工程 三、推薦算法實現 1. 基于內容的推薦 2. 基于協同過濾的推薦 3. 基于知識圖譜的推薦 4. 混合推薦算法…

Windows10筆記本電腦開啟BIOS

文章目錄什么是BIOS一、方案一&#xff1a;快捷鍵進入二、方案二&#xff08;推薦&#xff09;各品牌快捷鍵大全什么是BIOS BIOS 全拼為 BasicInputOutputSystem, 即基本輸入/輸出系統,是計算機中非常基礎而且重要的程序。把這一段程序存放在一個不需要電源的記憶體(芯片)中,就…

NFS、iSCSI 和lnmp部署操作

目錄 &#xff08;一&#xff09;基礎配置 1.NFS服務安裝 2.修改配置文件 3.重載配置文件 4.查看共享目錄 5.客戶端掛載 6.更換共享目錄 7.基礎實驗 &#xff08;二&#xff09;布置lnmp平臺 1.php 安裝軟件 檢測 2.連接MySQL 測試 3.軟件實施 軟件安裝配置 &…

Redis深度解析:從緩存原理到高并發實戰

第一部分&#xff1a;Redis核心概念與架構設計1.1 Redis本質解析Redis&#xff08;Remote Dictionary Server&#xff09;作為開源的內存數據結構存儲系統&#xff0c;其核心價值在于&#xff1a;內存優先架構&#xff1a;數據主要存儲在內存中&#xff0c;讀寫性能達到10萬 QP…

【NLP輿情分析】基于python微博輿情分析可視化系統(flask+pandas+echarts) 視頻教程 - 微博類別信息爬取

大家好&#xff0c;我是java1234_小鋒老師&#xff0c;最近寫了一套【NLP輿情分析】基于python微博輿情分析可視化系統(flaskpandasecharts)視頻教程&#xff0c;持續更新中&#xff0c;計劃月底更新完&#xff0c;感謝支持。今天講解架構搭建 視頻在線地址&#xff1a; 2026…

GD32/STM32嵌入CMSIS-DSP的庫(基于Keil)

當你要用到三角函數、開方、矩陣運算等復雜的數學運算時&#xff0c;可以選擇用C庫的math.h里面的函數&#xff0c;如果要求速度快的話就得用CMSIS-DSP庫里面的函數了&#xff0c;因為CMSIS-DSP庫充分運用了CM4內核的浮點運算單元&#xff08;若有&#xff09;和DSP相關的指令&…

頁面登錄阻止瀏覽器提醒是否保存密碼

一、原因 使用input的type"password"類型&#xff0c;瀏覽器會提醒是否記住密碼。 二、解決 取消type"password" 三、實現輸入密碼*代替 通過input輸入框&#xff0c;監聽輸入值&#xff0c;進行替換成*符號&#xff0c;避免使用input的type"password…

【iOS】dyld加載流程——應用程序的加載

目錄 前言 編譯過程與動靜態庫 編譯過程 動靜態庫 dyld &#x1f4cc; 什么是 dyld&#xff1f; dyld_shared_cache: dyld加載流程 _dyld_start dyldbootstrap::start dyld::main() 配置環境變量 共享緩存 主程序的初始化 插入動態庫 link主程序 link動態庫 弱…

從零開始,手把手教你本地部署Stable Diffusion AI繪畫(Win最新版)

本號之前有發過一篇win平臺的教程&#xff0c;由于是去年10月發布的&#xff0c;而Al繪畫技術發展很快&#xff0c;那篇教程已經有些不適用了&#xff0c;有些同學執行到第二步就出錯了。 應廣大同學的期望&#xff0c;我更新一版新版詳細教程。 一、前言 1.為什么要本地部署…

day21 力扣669. 修剪二叉搜索樹 力扣108.將有序數組轉換為二叉搜索樹 力扣538.把二叉搜索樹轉換為累加樹

修剪二叉搜索樹 給你二叉搜索樹的根節點 root &#xff0c;同時給定最小邊界low 和最大邊界 high。通過修剪二叉搜索樹&#xff0c;使得所有節點的值在[low, high]中。修剪樹 不應該 改變保留在樹中的元素的相對結構 (即&#xff0c;如果沒有被移除&#xff0c;原有的父代子代關…