課外活動:簡單了解原生測試框架Unittest前置后置的邏輯

簡單了解原生測試框架Unittest前置后置的邏輯

一、測試框架執行順序解析

1.1 基礎執行流程

import unittestclass A(unittest.TestCase):@classmethoddef setUpClass(cls):print(f"【CLASS START】{cls.__name__}")def setUp(self):print(f"【TEST START】{self._testMethodName}")def test_a(self):print("? 執行測試邏輯A")def test_b(self):print("? 執行測試邏輯B")def tearDown(self):print(f"【TEST END】{self._testMethodName}")@classmethoddef tearDownClass(cls):print(f"【CLASS END】{cls.__name__}")

1.2 執行順序可視化

TestClass TestCase setUpClass() 1 setUp() 2 test_method() 3 tearDown() 4 loop [每個測試方法] tearDownClass() 5 TestClass TestCase

二、核心方法功能解析

2.1 類級別方法

方法觸發時機執行次數典型應用場景
setUpClass()測試類初始化時1次數據庫連接建立
tearDownClass()測試類所有方法執行完成后1次資源釋放/日志歸檔

代碼實現特征:

@classmethod
def setUpClass(cls):# 必須使用classmethod裝飾器# 通過cls參數訪問類屬性# 不能直接調用實例方法

2.2 實例級別方法

方法觸發時機執行次數典型應用場景
setUp()每個測試方法執行前N次(N=測試方法數)測試數據初始化
tearDown()每個測試方法執行后N次環境清理/結果驗證

方法調用關系:

測試啟動
├── setUpClass()
│   ├── setUp() -> test_a() -> tearDown()
│   └── setUp() -> test_b() -> tearDown()
└── tearDownClass()

三、代碼執行過程深度分析

3.1 實際執行日志

【CLASS START】A
【TEST START】test_a
? 執行測試邏輯A
【TEST END】test_a
【TEST START】test_b
? 執行測試邏輯B
【TEST END】test_b
【CLASS END】A

3.2 關鍵執行節點說明

  1. 類初始化階段

    • 創建測試類實例前執行setUpClass()
    • 適用于全局配置加載
  2. 測試方法執行周期

    setUp
    test_method
    tearDown
  3. 類銷毀階段

    • 所有測試執行完畢后調用tearDownClass()
    • 必須使用@classmethod裝飾器

四、特殊場景處理機制

4.1 異常中斷處理

def setUp(self):try:# 初始化操作except Exception as e:self.skipTest(f"初始化失敗: {str(e)}")@classmethod
def tearDownClass(cls):if hasattr(cls, 'db_conn'):cls.db_conn.close()  # 確保資源釋放

4.2 多層級繼承場景

class BaseTest(unittest.TestCase):@classmethoddef setUpClass(cls):print("父類初始化")class ChildTest(BaseTest):@classmethoddef setUpClass(cls):super().setUpClass()  # 必須顯式調用父類方法print("子類初始化")

五、最佳實踐建議

  1. 資源管理原則

    • setUpClass中打開文件/數據庫連接
    • tearDownClass中關閉連接
    • setUp中初始化測試數據
    • tearDown中清理臨時數據
  2. 執行效率優化

    15% 10% 50% 25% 方法執行時間占比 setUpClass tearDownClass setUp/tearDown 測試邏輯
    "setUpClass" : 15
    "tearDownClass" : 10
    "setUp/tearDown" : 50
    "測試邏輯" : 25
    

六、完整代碼

"""
Python :3.13.3
Selenium: 4.31.0
"""import unittestclass A(unittest.TestCase):@classmethoddef setUpClass(cls):print(cls.setUpClass.__name__)def setUp(self):print(self.setUp.__name__)def test_a(self):print(self.test_a.__name__)def test_b(self):print(self.test_b.__name__)@classmethoddef tearDownClass(cls):print(cls.tearDownClass.__name__)def tearDown(self):print(self.tearDown.__name__)

「小貼士」:點擊頭像→【關注】按鈕,獲取更多軟件測試的晉升認知不迷路! 🚀

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

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

相關文章

學習設計模式《八》——原型模式

一、基礎概念 原型模式的本質是【克隆生成對象】; 原型模式的定義:用原型實例指定創建對象的種類,并通過拷貝這些原型創建新的對象 。 原型模式的功能: 1、通過克隆來創建新的對象實例; 2、為克隆出來的新對象實例復制…

olmOCR - PDF文檔處理工具包

文章目錄 一、關于 olmOCR相關資源包含內容團隊 二、安裝三、本地使用示例查看結果多節點/集群使用管道完整文檔 一、關于 olmOCR olmOCR 是用于訓練語言模型處理PDF文檔的工具包,支持大規模PDF文本解析和轉換。 相關資源 源碼:https://github.com/all…

Android開發補充內容

Android開發補充內容 fragment通信生命周期 Okhttp基本使用websocket Retrofit基本使用 RxJava基本使用定時任務 Hilt基本使用進階使用例子 組件庫Material ComponentsJetpack Compose fragment 通信 fragment于activity通信的一種原生方法是使用Bundle: Bundle …

隱私計算框架FATE二次開發心得整理(工業場景實踐)

文章目錄 版本介紹隱私計算介紹前言FATE架構總體架構FateBoard架構前端架構后端架構 FateClient架構創建DAG方式DAG生成任務管理python SDK方式 FateFlow架構Eggroll架構FATE算法架構Cpn層FATE ML層 組件新增流程新增組件流程新增算法流程 版本介紹 WeBank的FATE開源版本 2.2.…

AI驅動的制造工藝:系統化探索與創新

DeepSeek 技術全景 在當今 AI 技術蓬勃發展的時代,DeepSeek 已成為該領域中一顆耀眼的明星。自 2023 年 7 月 17 日成立以來,這家由知名私募巨頭幻方量化孕育而生的公司,迅速在 AI 領域嶄露頭角 。DeepSeek 的目標是開發頂尖的大語言模型(LLM),并利用數據蒸餾技術打造更精…

【嵌入式開發-LCD】

嵌入式開發-LCD ■ LCD簡介 ■ LCD簡介

java反射(2)

package 反射;import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.Method; import java.util.Arrays;public class demo {public static void main(String[] args) throws Exception {// 通過類的全限定名獲取對應的 Class 對象…

使用 Cesium 構建 3D 地圖應用的實踐

CesiumJS 是一個功能強大的開源 JavaScript 庫,能夠幫助開發者快速構建高性能、高精度的 3D 地球和地圖應用 。本文將介紹如何使用 Cesium 構建一個基本的 3D 地圖應用,并加載自定義的 3D Tiles 模型。 初始化 Cesium Viewer 首先,在 Vue 的…

結合Splash與Scrapy:高效爬取動態JavaScript網站

在當今的Web開發中,JavaScript的廣泛應用使得許多網站的內容無法通過傳統的請求-響應模式直接獲取。為了解決這個問題,Scrapy開發者經常需要集成像Splash這樣的JavaScript渲染引擎。本文將詳細介紹Splash JS引擎的工作原理,并探討如何將其與S…

企業級可觀測性實現:OpenObserve云原生平臺的本地化部署與遠程訪問解析

文章目錄 前言1. 安裝Docker2. 創建并啟動OpenObserve容器3. 本地訪問測試4. 公網訪問本地部署的OpenObserve4.1 內網穿透工具安裝4.2 創建公網地址 5. 配置固定公網地址 前言 嘿,各位小伙伴們,今天要給大家揭秘一個在云原生領域里橫掃千軍的秘密法寶—…

將本地項目提交到新建的git倉庫

方式一: # 登錄git,新建git倉庫和指定的分支,如master、dev# 下載代碼,默認下載master分支 git clone http://10.*.*.67/performance_library/pfme-*.git # 切換到想要提交代碼的dev分支 git checkout dev# 添加想要提交的文件 git add .#…

.NET平臺用C#在PDF中創建可交互的表單域(Form Field)

在日常辦公系統開發中,涉及 PDF 處理相關的開發時,生成可填寫的 PDF 表單是一種常見需求,例如員工信息登記表、用戶注冊表、問卷調查或協議確認頁等。與靜態 PDF 不同,帶有**表單域(Form Field)**的文檔支持…

在macOS上安裝windows系統

使用Boot Camp 1. 準備工作:確認Mac滿足Boot Camp系統要求,準備好Windows安裝光盤或ISO映像文件,以及一個至少8GB的空白USB閃存驅動器用于保存驅動程序。 2. 打開Boot Camp助理:在“應用程序”文件夾的“實用工具”中找到“Boot…

683SJBH基于J2EE的廣州旅游管理系統

第1章  緒論 課題背景 自互聯網internet成為一種革命性的大眾媒體以來,其發展速度之快令人驚嘆。而作為世界最大朝陽產業的旅游,當它與電子商務這一新興模式相結合時,其潛藏的商業價值表露無遺。根據CNN(美國有線電視新聞網&…

前端面試每日三題 - Day 27

這是我為準備前端/全棧開發工程師面試整理的第27天每日三題練習,涵蓋了: CSS選擇器的優先級與權重計算機制Angular中的依賴注入(Dependency Injection)機制設計一個支持實時協作編輯(如Google Docs)的前端…

PostgreSQL數據庫操作SQL

數據庫操作SQL 創建 創建數據庫 create database db_test;創建并指定相關參數 with owner : 所有者encoding : 編碼connection limit :連接限制 create database db_test1 with owner postgresencoding utf-8connection limit 100;修改 修改數據庫名稱 renam…

JSP HTTP 狀態碼詳解

JSP HTTP 狀態碼詳解 引言 HTTP 狀態碼是 HTTP 協議的一部分,用于表示客戶端與服務器之間請求與響應的狀態。在 JavaServer Pages (JSP) 技術中,HTTP 狀態碼同樣扮演著重要的角色。本文將詳細解析 JSP 中的 HTTP 狀態碼,幫助開發者更好地理解和應用這些狀態碼。 HTTP 狀態…

文件一鍵解密軟件工具(支持pdf、word、excel、ppt、rar、zip格式文件)

一鍵解密解鎖神器支持解密pdf、doc、docx、xls、xlsx、ppt、pptx、rar、zip格式文件,Excel表格、Word文檔、PPT演示、RAR、ZIP壓縮包、PDF文檔一鍵輕松解密!簡單/高效/安全。這款軟件由密碼帝官方提供,確保了其合法性和安全性,用戶…

Banana Pi BPI-CM6 是一款八核 RISC-V 模塊,兼容 Raspberry Pi CM 載板

Banana Pi BPI-CM6 是一款 SpacemIT K1 八核 RISC-V 系統級模塊,遵循 Raspberry Pi CM5 的設計,并提供高達 16GB LPDDR4 RAM、高達 128GB eMMC 閃存、千兆以太網控制器和 WiFi 6 藍牙 5.2 模塊。 BPI-CM6 雖然與 Raspberry Pi CM5 基本兼容&#xff0c…

【項目篇之統一硬盤操作】仿照RabbitMQ模擬實現消息隊列

統一硬盤操作 創建出實例封裝交換機的操作封裝隊列的操作封裝綁定的操作封裝消息的操作總的完整代碼: 我們之前已經使用了數據庫去管理交換機,綁定,隊列 還使用了數據文件去管理消息 此時我們就搞一個類去把上述兩個部分都整合在一起&#…