【Pytest】從配置到固件的使用指南

掌握高效測試的關鍵技巧,打造專業級自動化測試框架

一、Pytest框架的核心優勢

Pytest作為Python最強大的測試框架之一,以其簡潔靈活的語法和豐富的擴展能力深受開發者喜愛。相比unittest,Pytest提供了更直觀的測試編寫方式和更強大的功能集:

  • 零樣板代碼:無需繼承特定類,函數即測試用例
  • 豐富的斷言:自動展示斷言失敗時的差異信息
  • 插件生態系統:超過1000個插件擴展功能
  • 參數化測試:輕松實現數據驅動測試
  • 兼容性強:完美兼容unittest和nose測試套件

二、Pytest命令行參數化執行大全

1. 基礎執行參數

# 顯示詳細測試信息
pytest.main(["-v"])# 輸出print語句內容
pytest.main(["-s"])# 組合使用
pytest.main(["-vs"])

2. 測試篩選參數

# 指定標簽執行(冒煙測試)
pytest.main(["-m", "smoke"])# 按關鍵字篩選用例
pytest.main(["-k", "login"])# 僅執行上次失敗的用例
pytest.main(["--lf"])# 指定測試文件
pytest.main(["test_login.py"])

3. 測試控制參數

# 遇到第一個失敗用例時停止
pytest.main(["-x"])# 最多允許2個失敗
pytest.main(["--maxfail=2"])# 僅收集測試項不執行
pytest.main(["--collect-only"])

4. 報告生成參數

# 生成JUnit格式報告
pytest.main(["--junit-xml=report.xml"])# 生成HTML測試報告
pytest.main(["--html=report.html"])# 生成帶截圖的報告(需配合插件)
pytest.main(["--html=report.html", "--self-contained-html"])

三、pytest.ini全局配置詳解

1. 配置文件規范

[pytest]
# 默認命令行參數
addopts = -vs --tb=short# 自定義標記注冊
markers =
smoke: 冒煙測試用例
regression: 回歸測試用例
performance: 性能測試用例# 測試文件匹配規則
python_files = test_*.py# 測試目錄配置
testpaths = tests# 測試類命名規則
python_classes = Test*# 測試方法命名規則
python_functions = test_*

2. 配置效果說明表

配置項功能說明推薦值
addopts默認命令行參數-vs --tb=short
markers自定義標記注冊按團隊規范定義
python_files測試文件匹配模式test_*.py
testpaths測試目錄路徑tests
norecursedirs排除目錄.venv node_modules
junit_suite_nameJUnit報告名稱${project} Tests

四、測試用例跳過策略詳解

1. 無條件跳過

@pytest.mark.skip(reason="功能尚未實現")
def test_unimplemented_feature():
# 此測試暫不執行
assert False

2. 條件跳過

import sys# 根據Python版本跳過
@pytest.mark.skipif(
sys.version_info < (3, 8),
reason="需要Python 3.8+的特性支持"
)
def test_walrus_operator():
assert (result := complex_calculation()) > 0

3. 運行時動態跳過

def test_environment_specific():
# 僅當環境變量PROFILE=production時執行
if os.environ.get("PROFILE") != "production":
pytest.skip("僅在生產環境執行")# 生產環境專屬測試邏輯
assert production_only_feature() is True

4. 跳過模塊所有測試

import pytestif not config.ENABLE_MODULE_A:
pytest.skip("模塊A測試已禁用", allow_module_level=True)

五、測試固件(fixture)高級應用

1. 基礎fixture使用

import pytest@pytest.fixture
def database_connection():
# 前置操作:建立數據庫連接
conn = create_db_connection()
yield conn# 測試用例在此處執行
# 后置操作:關閉連接
conn.close()def test_query(database_connection):
result = database_connection.execute("SELECT 1")
assert result == 1

2. 作用域控制

@pytest.fixture(scope="module")
def shared_resource():
# 整個測試模塊共享的資源
print("\n初始化資源")
resource = Resource()
yield resource
print("\n釋放資源")
resource.release()

作用域選項對比:

作用域生命周期適用場景執行次數(100測試用例)
function每個測試函數默認值,獨立測試環境100次
class每個測試類類內多測試共享按類數量執行
module每個模塊模塊級資源共享按模塊數量執行
session整個測試會話全局資源共享1次

3. 參數化fixture

@pytest.fixture(params=["mysql", "postgres", "sqlite"])
def database(request):
db = Database(request.param)
db.connect()
yield db
db.disconnect()def test_db_compatibility(database):
assert database.version() >= "5.7"

4. 自動使用fixture

@pytest.fixture(autouse=True)
def global_setup_teardown():
# 1. 所有測試前執行
print("\n=== 全局測試開始 ===")# 2. 測試執行
yield# 3. 所有測試后執行
print("\n=== 全局測試結束 ===")

5. fixture重寫機制

# conftest.py
@pytest.fixture(scope="session")
def config():
return load_config("default.json")# test_prod.py
@pytest.fixture(scope="session")
def config():
return load_config("production.json")

Pytest最佳實踐總結

配置集中化:通過pytest.ini統一管理配置
用例原子化:每個測試只驗證一個功能點
命名規范化:test_前綴+描述性名稱
固件輕量化:避免在fixture中放業務邏輯
報告可視化:結合Allure生成專業報告

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

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

相關文章

[matlab]matlab上安裝xgboost安裝教程簡單版

【前言】 網上基于MATLAB的xgboost安裝教程太少了&#xff0c;以至于幾乎搜不到&#xff0c;為此做了一個簡單安裝教程【安裝前提】 有matlab軟件&#xff0c;版本越高越好&#xff0c;我用的是2023a。理論支持matlab2018a及其以上&#xff0c;因此需要自己提前安裝好matlab【安…

基于多種機器學習的成都市二手房房價分析與價格預測【城市可換、算法模型多種對比】

文章目錄有需要本項目的代碼或文檔以及全部資源&#xff0c;或者部署調試可以私信博主項目背景數據來源與采集方式數據預處理與清洗流程探索性數據分析&#xff08;EDA&#xff09;模型構建與預測方法項目意義與應用前景相關可視化展示總結每文一語有需要本項目的代碼或文檔以及…

PostgreSQL 事務ID環繞問題

事務ID&#xff08;XID&#xff09;基本概念 從Transactions and Identifiers可知&#xff1a; 事務 ID&#xff0c;例如 278394&#xff0c;會根據 PostgreSQL 集群內所有數據庫使用的全局計數器按順序分配給事務。此分配會在事務首次寫入數據庫時進行。這意味著編號較低的 x…

高等數學-矩陣知識

好的&#xff0c;我們來詳細講解高等數學&#xff08;主要是線性代數部分&#xff09;中的核心矩陣知識。矩陣是線性代數的基石&#xff0c;廣泛應用于數學、物理、工程、計算機科學、經濟學等眾多領域。 一、矩陣的基本概念定義&#xff1a; 一個 m n 矩陣 (Matrix) 是一個由…

React 項目性能優化概要

應用級性能優化&#xff0c;需要結合實際需求展開分析&#xff0c;通常我們需要從以下幾個方面來考慮&#xff1a; 1. 識別性能瓶頸 識別性能瓶頸是優化的第一步&#xff0c;通過各種工具和方法找到影響性能的主要原因&#xff1a; React Profiler&#xff1a;使用 React Dev…

【web自動化】-5- fixture集中管理和項目重構

一、投標用例設計 # 定義讓前臺頁面保持自動登錄的fixture pytest.fixture() def user_driver():driver webdriver.Chrome()driver.get("http://47.107.116.139/fangwei/")driver.maximize_window()# 創建頁面類對象page ReceptionLoginPage(driver)# 通過頁面類對…

Dify工作流:爬蟲文章到AI知識庫

部署Dify 代碼拉取 git clone https://github.com/langgenius/dify.git cd dify/docker啟動容器 docker-compose up -d啟動成功準備知識庫 創建知識庫 創建一個空的知識庫要先從網址中&#xff0c;找到這個知識庫的id&#xff0c;記下后面需要用到。新建API密鑰 創建密鑰&#…

支付鑒權方案介紹

前后端交互中的鑒權是確保請求來源合法、身份可信、權限合適的關鍵手段。不同系統架構和業務類型下,使用的鑒權方式略有不同,但主要可分為以下幾類: ? 一、前后端交互常見的鑒權方式概覽 鑒權方式 優點 缺點 適用場景 Cookie + Session 簡單、成熟,服務端易控制 不適合跨域…

halcon處理灰度能量圖

使用halcon處理射線圖像&#xff0c;對高能區域和低能區域分割處理感興趣區域&#xff0c;篩選區域下的灰度值區間范圍。圖像灰度值為16位深度圖。* 讀取灰度圖像 read_image (Image, /123.tif)** 獲取圖像尺寸 get_image_size (Image, Width, Height)* 分割圖像為左右兩部分&a…

Oracle From查看彈性域設置

打開彈性與設置&#xff1a;【應用開發員->彈性域->說明性->段】打開后界面如下&#xff1a; 把光標定位到標題&#xff0c;然后點擊“手電筒”搜索名稱&#xff08;名稱就是你要查詢的那個彈性域的名稱&#xff09;我這里就是搜索“附加題頭信息”&#xff0…

git初始流程

對于一個新項目&#xff0c;從 Git 倉庫拉取 test_tool 分支并進行后續修改提交的完整流程如下&#xff1a; 一、首次拉取項目&#xff08;克隆倉庫并切換分支&#xff09;克隆遠程倉庫到本地 打開終端&#xff08;或 PyCharm 的 Terminal&#xff09;&#xff0c;進入你想存放…

emuelec模擬器 ,s905盒子樹莓派街機游戲

EmuELEC支持的盒子類型相當廣泛&#xff0c;主要包括使用以下芯片方案的機頂盒等設備&#xff1a; S905系列及其變體&#xff1a;如S905、S905D、S905L、S905M、S905X、S905X2、S905X3、S905X4、S905W、S905Y等。 S912&#xff1a;這也是EmuELEC支持的一個常見芯片方案。 S922x…

Ansible部署

Ansible部署 一、部署環境及前置操作 1、測試環境 注:主機復用原測試環境&#xff0c;主機hostname根據需求調整 硬件環境&#xff1a;N100 x86主機 Proxmox系統 軟件環境&#xff1a;Ubuntu 22.04.3 LTS 軟件版本&#xff1a;redis-7.4.0.tar.gz 主機環境&#xff1a;主機IP …

智慧教室:科技賦能,奏響個性化學習新樂章

在傳統教育模式中&#xff0c;課堂互動的局限性猶如一道無形的枷鎖&#xff0c;束縛著學生主動學習的熱情與能力。課堂上&#xff0c;往往是教師單向的知識輸出&#xff0c;僅有少數學生能獲得發言機會&#xff0c;大部分學生只能被動聆聽&#xff0c;逐漸在枯燥的學習氛圍中喪…

Android埋點實現方案深度分析

埋碼是數據驅動業務決策、產品優化、用戶行為分析的核心基礎&#xff0c;其實現方案的優劣直接影響數據的準確性、完整性、實時性、可維護性以及開發效率。 以下從多個維度對主流方案進行剖析&#xff1a; 一、核心目標與挑戰目標&#xff1a; 精準采集&#xff1a; 在用戶觸發…

萬界星空科技銅線/漆包線行業智能化MES系統解決方案

萬界星空科技針對銅線及漆包線行業開發的智能化MES系統&#xff0c;專門解決該行業原材料管理復雜、工藝控制嚴、質量追溯困難等核心痛點。該系統通過數字化手段實現生產全流程的可視化與精準控制&#xff0c;助力企業提升生產效率、降低運營成本并增強市場競爭力。一、行業專屬…

Git 完全手冊:從入門到團隊協作實戰(3)

Hello大家好&#xff01;很高興我們又見面啦&#xff01;給生活添點passion&#xff0c;開始今天的編程之路&#xff01; 我的博客&#xff1a;<但凡. 我的專欄&#xff1a;《編程之路》、《數據結構與算法之美》、《C修煉之路》、《Linux修煉&#xff1a;終端之內 洞悉真理…

使用Docker搭建SearXNG搜索引擎

1、安裝Docker# 安裝Docker https://docs.docker.com/get-docker/# 安裝Docker Compose https://docs.docker.com/compose/install/# CentOS安裝Docker https://mp.weixin.qq.com/s/nHNPbCmdQs3E5x1QBP-ueA2、安裝SearXNG詳見&#xff1a; https://docs.searxng.org/admin/inst…

基于pi/4-QPSK擴頻解擴和gardner環定時同步的通信系統matlab性能仿真

目錄 1.引言 2.算法仿真效果演示 3.數據集格式或算法參數簡介 4.算法涉及理論知識概要 4.1 π/4-QPSK 4.2 直接序列擴頻與解擴 4.3 Gardner環定時同步 5.參考文獻 6.完整算法代碼文件獲得 1.引言 π/4-QPSK是一種特殊的QPSK調制方式&#xff0c;其相鄰符號間的相位跳變…

CGA老年人能力評估師:提升老年生活質量

一、CGA老年人能力評估師是提升老年生活質量的“導航者” 老年生活質量的提升&#xff0c;始于對老年人真實需求的精準把握。CGA老年人能力評估師正是這樣一群“導航者”&#xff0c;他們運用CGA老年綜合評估系統&#xff0c;深入了解老年人在生理、心理、社會參與等方面的狀況…