unittest 案例執行順序詳解

unittest 案例執行順序詳解

unittest?框架中,測試用例的執行順序有默認規則,也可通過自定義方式調整。以下是具體說明:

一、默認執行順序規則

unittest?對測試用例的執行順序遵循 “按測試方法名的 ASCII 碼排序”?原則,具體邏輯如下:

  1. 測試類內部:所有以 test?開頭的方法(如 test_logintest_register)會按方法名的字母 / 數字順序執行。
  2. 多個測試類:若一個模塊中有多個測試類(如 TestLoginTestPay),類名會先按 ASCII 碼排序,再執行類內部的測試方法。

示例

import unittest

class TestOrder(unittest.TestCase):

????def test_3(self):

????????print("執行 test_3")

????def test_1(self):

????????print("執行 test_1")

????def test_2(self):

????????print("執行 test_2")

if __name__ == "__main__":

????unittest.main()

執行結果(按方法名排序):

執行 test_1

執行 test_2

執行 test_3

二、影響執行順序的因素

  1. 方法名命名規范

若方法名未遵循有序命名(如 test_atest_b?或 test_01test_02),可能導致執行順序混亂。例如:

def test_login(self): ... ???# 可能在 test_register 之后執行(因 'l' 在 'r' 之后)

def test_register(self): ...

  1. 測試類加載順序

模塊中多個測試類的執行順序由類名的 ASCII 碼決定。例如:

class TestB(unittest.TestCase): ?# 類名 'TestB' 會在 'TestA' 之后執行

????def test_b1(self): ...

class TestA(unittest.TestCase): ?# 先執行

????def test_a1(self): ...

  1. 繼承或混入類

若測試類繼承了其他類,父類中的測試方法會優先于子類方法執行(同樣按方法名排序)。

三、自定義執行順序的方法

若需按業務邏輯指定執行順序(如先登錄后下單),可通過以下方式實現:

方法 1:按命名規則手動排序

通過命名規范控制順序,推薦用 數字前綴?明確順序:

class TestOrder(unittest.TestCase):

????def test_01_login(self): ???# 第 1 執行

????????print("登錄")

????def test_02_add_cart(self): # 第 2 執行

????????print("加入購物車")

????def test_03_pay(self): ?????# 第 3 執行

????????print("支付")

方法 2:使用 unittest.TestSuite?手動添加用例

通過 TestSuite?按指定順序逐個添加測試用例,完全掌控執行流程:

import unittest

class TestShop(unittest.TestCase):

????def test_login(self):

????????print("登錄")

????def test_add_cart(self):

????????print("加入購物車")

????def test_pay(self):

????????print("支付")

if __name__ == "__main__":

????# 創建測試套件

????suite = unittest.TestSuite()

????# 按順序添加測試方法(注意:方法名需用字符串傳入)

????suite.addTest(TestShop("test_login"))

????suite.addTest(TestShop("test_add_cart"))

????suite.addTest(TestShop("test_pay"))

????# 執行套件

????unittest.TextTestRunner().run(suite)

執行結果(嚴格按添加順序):

登錄

加入購物車

支付

方法 3:使用第三方庫(如 unittest-ordering

通過裝飾器指定順序,需先安裝庫:

pip install unittest-ordering

使用示例:

from unittest import TestCase

from unittest_ordering import ordered

class TestOrder(TestCase):

????@ordered(-1) ?# 數字越小越先執行

????def test_login(self):

????????print("登錄")

????@ordered(0)

????def test_add_cart(self):

????????print("加入購物車")

????@ordered(1)

????def test_pay(self):

????????print("支付")

四、注意事項

  1. 避免依賴執行順序

單元測試的最佳實踐是 “用例獨立無依賴”,即每個測試用例應能單獨運行,不依賴其他用例的執行結果(例如:每個用例開始前通過 setUp()?初始化環境,結束后用 tearDown()?清理)。

  1. setUp()?和 tearDown()?的執行時機
    • setUp():每個測試方法執行前都會調用(如每個用例前初始化瀏覽器)。
    • tearDown():每個測試方法執行后都會調用(如每個用例后關閉瀏覽器)。

它們的執行順序不受測試方法順序影響,只與所屬方法綁定。

  1. 批量執行多個模塊

若通過 discover?批量加載多個模塊的用例,模塊文件名將先按 ASCII 碼排序,再執行模塊內的用例。

五、總結

  • 默認順序:按測試方法名 / 類名的 ASCII 碼排序。
  • 自定義順序:通過命名規范、TestSuite?手動添加或第三方庫實現。
  • 最佳實踐:保持用例獨立性,如需依賴順序,優先用 TestSuite?明確控制。

通過以上方式,可根據項目需求靈活控制 unittest?測試用例的執行順序。如果需要結合具體業務場景優化執行流程,可以補充細節進一步分析~

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

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

相關文章

【web大前端】001_前端開發入門:創建你的第一個網頁

前端開發入門:創建你的第一個網頁 在當今數字化時代,網頁已經成為人們獲取信息和交流的重要平臺。對于想要學習編程的人來說,前端開發往往是一個不錯的起點。本文將帶你通過簡單的兩步,創建屬于你的第一個網頁程序。 點擊這里去…

HTTP性能優化終極指南:從協議原理到企業級實踐

前言:為什么性能優化是Web開發的生命線?根據Google研究數據,當頁面加載時間從1秒增加到3秒時,跳出率提升32%;當達到5秒時,轉化率下降90%。本文將通過七層優化體系,帶您掌握HTTP性能優化的核心技…

Python 數據分析(二):Matplotlib 繪圖

目錄 1. 簡介2. 繪圖 2.1 折線圖 2.1.1 單線2.1.2 多線2.1.3 子圖 2.2 散點圖2.3 直方圖2.4 條形圖 2.4.1 縱置2.4.2 橫置2.4.3 多條 2.5 餅圖 1. 簡介 Matplotlib 是 Python 提供的一個繪圖庫,通過該庫我們可以很容易的繪制出折線圖、直方圖、散點圖、餅圖等豐…

Scrapy分布式爬蟲數據統計全棧方案:構建企業級監控分析系統

引言:數據統計在分布式爬蟲中的戰略價值在分布式爬蟲系統中,??數據統計與分析??是系統優化的核心驅動力。根據2023年爬蟲工程調查報告:實施專業統計方案的爬蟲系統性能提升??40%以上??數據驅動的優化策略可減少??70%??的資源浪費…

計劃任務(at和cron命令介紹及操作)

簡介計劃任務主要做一些周期性的任務,目前最主要的是定期備份數據分類at:一次性調度執行cron:循環調度執行at簡介at 是一個用于安排一次性任務的命令行工具,適合在指定時間點執行單次任務語法at 時間 選項若要提交,通過…

[2025CVPR:圖象合成、生成方向]WF-VAE:通過小波驅動的能量流增強視頻 VAE 的潛在視頻擴散模型

論文概述? 這篇論文提出了一種名為WF-VAE(Wavelet Flow VAE)?的新型視頻變分自編碼器(Video VAE),旨在解決潛在視頻擴散模型(LVDM)中的關鍵瓶頸問題,包括高計算成本和潛在空間不連續性。WF-VAE利用小波變換(Wavelet Transform)來分解視頻信號,并通過能量流路徑優…

Map接口-實現類HashMap

目錄 一、什么是Map? 二、實現類HashMap 1.關鍵特點 無序、key唯一、value允許重復、key和value允許為null。 2.數據結構 2.1 JDK 1.7 2.2 JDK 1.8 2.3 關鍵參數 2.4 關鍵計算 3.擴容方式 3.1 初始化 3.2 擴容 4.常見方法 4.1 根據key存入value 4.2 …

深入解析Hadoop如何實現數據可靠性:三副本策略、校驗和驗證與Pipeline復制

Hadoop數據可靠性的重要性在大數據時代,數據可靠性已成為企業數字化轉型的生命線。根據IDC預測,到2025年全球數據總量將增長至175ZB,其中企業數據占比超過60%。面對如此龐大的數據規模,任何數據丟失或損壞都可能造成數百萬美元的經…

15.6 DeepSpeed+Transformers實戰:LLaMA-7B訓練效率提升210%,顯存直降73%

DeepSpeedTransformers實戰:LLaMA-7B訓練效率提升210%的底層邏輯與實操指南 當LLaMA-7B的訓練顯存需求達到78GB時,單卡A100(80GB)幾乎瀕臨溢出,更不用說普通GPU集群。而DeepSpeed與Hugging Face Transformers的深度集成,通過"ZeRO三階段優化+混合精度+梯度檢查點&q…

Nginx + PM2 實現Express API + React 前端 本地測試服務器搭建

一、工具準備 openSSL:需要針對https請求頭 生成對應的 自簽名證書。 Nginx:服務器搭建工具 nodeJS: Express API運行環境 PM2: node進程管理器。用于替代npm命令管理 啟動命令。 二、openSSL 本地自簽名證書生成。 創建服務器空文件夾&#xff08…

OTG原理講解

文章目錄一、什么是 OTG(USB On-The-Go)?? OTG 的定義:二、傳統 USB 與 OTG 的區別三、OTG 的核心機制:**通過 ID 引腳判斷角色**1. 對于 Micro-USB OTG:2. 電路如何感知 ID 引腳?四、OTG 電路…

數據結構系列之紅黑樹

前言 紅黑樹是比較重要的一顆樹了,map和set的底層就是紅黑樹,一定要牢牢記住。 一、什么是紅黑樹 首先:紅黑樹仍然是一顆搜索二叉樹,但他引入了顏色這一概念,每個結點多一個存儲位來存儲顏色,它通過維護下…

在OpenMP中,#pragma omp的使用

在OpenMP中,#pragma omp for 和 #pragma omp parallel for(或 #pragma omp parallel num_threads(N))有本質區別,主要體現在 并行區域的創建 和 工作分配方式 上。以下是詳細對比:1. #pragma omp for 作用 僅分配循環迭…

停止“玩具式”試探:深入拆解ChatGPT Agent的技術棧與實戰避坑指南

摘要: 當許多人還在用ChatGPT寫周報、生成樣板代碼時,其底層的Agent化能力已經預示著一場深刻的開發范式變革。這不再是簡單的“AI輔助”,而是“人機協同”的雛形。本文旨在穿透表面的功能宣傳,從技術棧層面拆解Agent模式的實現基…

element-plus安裝以及使用

element-plus時為vue.js 3開發的組件庫。 在引入前需要做如下準備 安裝node.js https://blog.csdn.net/zlpzlpzyd/article/details/147704723 安裝vue的腳手架vue-cli https://blog.csdn.net/zlpzlpzyd/article/details/149647351 安裝element-plus github地址 https://git…

學習隨想錄-- web3學習入門計劃

#60 轉方向 web3 golang 以太坊應用 這是課表部分(Golang以太坊方向) Sheet b站up學習計劃 第一階段:基礎能力構建(1-2 個月) 學習目標 掌握 Golang 核心語法與以太坊底層基礎概念,建立開發知識框架。…

【RAG優化】PDF復雜表格解析問題分析

在構建檢索增強生成(RAG)應用時,PDF文檔無疑是最重要、也最普遍的知識來源之一。然而,PDF中潛藏著RAG系統的難點問題——復雜表格。這些表格富含高密度的結構化信息,對回答精準問題至關重要,但其復雜的視覺布局(多層表頭、合并單元格、跨頁表格等)常常讓標準的文本提取…

ReAct Agent(LangGraph實現)

文章目錄參考資料一 AI Agent二 ReAct三 LangGraph實現ReAct代理3.1 SerperAPI實時聯網搜索3.2 ReAct實現參考資料 entic RAG 架構的基本原理與應用入門 一 AI Agent AI Agent 整個過程是一個動態循環。Agent不斷從環境中學習,通過其行動影響環境,然后…

如何從0到1的建立組織級項目管理體系【現狀診斷】

今天我想給大家分享是“如何在企業中從0到1的去建立PMO的組織級項目管理體系。”的系列文章,這是我近幾年來一直在努力的嘗試去探索和實踐的過程,從0到1的過程。當我最開始去接手這樣一個場景的時候所需要做的第一件事情是診斷和差距分析。這是多年以來做…

網絡通信協議詳解:TCP協議 vs HTTP協議

在計算機網絡中,TCP(傳輸控制協議)和HTTP(超文本傳輸協議)是兩個核心協議,但它們的職責和層級完全不同。TCP是底層傳輸協議,負責數據的可靠傳輸;HTTP是應用層協議,定義了…