13.原生測試框架Unittest解決用例組織問題 與測試套件的使用

13. 原生測試框架Unittest解決用例組織問題 與測試套件的使用

一、測試架構核心組件解析

1.1 系統組成模塊

發現測試
裝載用例
輸出結果
TestLoader
TestSuite
TextTestRunner
測試報告

1.2 關鍵組件功能對照表

組件功能描述對應代碼實現
TestLoader掃描發現測試用例unittest.defaultTestLoader
TestSuite裝載測試集合容器unittest.TestSuite()
TextTestRunner執行測試并輸出結果unittest.TextTestRunner()
TestCase測試用例基類unittest.TestCase

二、測試發現機制詳解

2.1 路徑配置實現

CASE_PATH = join(dirname(__file__), './chap4/case')  # 動態獲取測試路徑
路徑處理要點:
  • 使用os.path保證跨平臺兼容性
  • 相對路徑轉換為絕對路徑
  • 支持多級目錄結構掃描

2.2 測試加載流程

for test in tests:test_suit = loader.discover(start_dir=CASE_PATH,  # 掃描根目錄pattern=test         # 匹配規則)suit.addTest(test_suit)
discover方法參數解析:
參數值示例作用說明
start_dir‘./chap4/case’測試代碼根目錄
pattern‘test_*.py’文件匹配模式(支持通配符)
top_level_dirNone項目頂層目錄(可選)

三、測試執行控制體系

3.1 運行器配置參數

runner = unittest.TextTestRunner(verbosity=2  # 輸出詳細程度控制
)
verbosity級別說明:
級別輸出內容適用場景
0僅顯示總測試數/失敗數簡潔模式
1顯示進度點(默認)常規執行
2顯示完整用例名稱/錯誤詳情調試排查

3.2 測試執行流程

Runner Suite TestCase 加載測試集合 1 執行setUp() 2 執行測試方法 3 記錄結果 4 執行tearDown() 5 loop [每個測試用例] 生成報告 6 Runner Suite TestCase

四、測試組織結構優化

4.1 多模塊加載配置

# __init__.py配置示例
tests = ['test_module_1.py',  # 模塊級控制'test_module_2.py'
]
組織策略對比:
策略類型示例特點
模塊粒度test_*.py按功能模塊劃分
類粒度ClassName按測試場景劃分
方法粒度test_methodName精確控制單個測試

4.2 執行范圍控制

# 支持多種匹配模式
tests = ['test_*.py',       # 所有測試模塊'TestClass',        # 指定測試類'module.TestClass.test_method'  # 精確到方法
]

五、工程化實踐建議

5.1 目錄結構規范

project/
├── src/              # 源碼目錄
├── tests/            # 測試目錄
│   ├── __init__.py   # 測試配置
│   ├── module1/      # 模塊測試包
│   └── module2/
└── runner.py         # 統一執行入口

5.2 擴展執行能力

# 添加HTML測試報告
from HTMLTestRunner import HTMLTestRunner
runner = HTMLTestRunner(output='report.html',verbosity=2
)

六、完整代碼

"""
Python :3.13.3
Selenium: 4.31.0start.py
"""# 測試套件 —— 包含待測的模塊、類、測試方
# 測試加載器 —— 決定測試模塊、測試類、測試方法的加載
# 測試運行器 —— 記錄測試過程、輸出測試結果from os.path import join, dirname
import unittest
from chap4.case import testsCASE_PATH = join(dirname(__file__), './chap4/case')# 測試套件初始化,測試加載器初始化
suit = unittest.TestSuite()
loader = unittest.defaultTestLoader
# loader = unittest.TestLoader()# 測試加載器 發現測試對象
for test in tests:test_suit = loader.discover(start_dir=CASE_PATH, pattern=test)# 測試對象 加入測試套件suit.addTest(test_suit)# 測試運行器 初始化
runner = unittest.TextTestRunner(verbosity=2)# 運行測試
runner.run(suit)
"""
Python :3.13.3
Selenium: 4.31.0test_module_1.py
"""import unittestclass A(unittest.TestCase):def test_a1(self):self.assertEqual(1,2)def test_a2(self):...class B(unittest.TestCase):def test_b1(self):...def test_b2(self):...
"""
Python :3.13.3
Selenium: 4.31.0test_module_2.py
"""import unittestclass C(unittest.TestCase):def test_a1(self):...def test_a2(self):...class D(unittest.TestCase):def test_b1(self):...def test_b2(self):...

"""
Python :3.13.3
Selenium: 4.31.0__init__.py
"""tests = ['test_module_1.py','test_module_2.py'
]

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

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

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

相關文章

UE5 腳部貼地不穿過地板方案

UE自帶的IK RIG和ControlRig技術 【UE5】角色腳部IK——如何讓腳貼在不同斜度的地面(設置腳的旋轉)_嗶哩嗶哩_bilibili 實驗后這個還是有一部分問題,首先只能保證高度不能穿過,但是腳步旋轉還是會導致穿模 IK前,整個模型在斜坡上會浮空 參考制作:https://www.youtube.com/w…

關于 js:4. 異步機制與事件循環

一、同步 vs 異步 1. 什么是同步(Synchronous) 同步代碼就是一行一行、按順序執行的。當前行沒有執行完,下一行不能動。 示例: console.log("A"); console.log("B"); console.log("C");輸出&am…

如何通過外網訪問內網?對比5個簡單的局域網讓互聯網連接方案

在實際應用中,常常需要從外網訪問內網資源,如遠程辦公訪問公司內部服務器、在家訪問家庭網絡中的設備等。又或者在本地內網搭建的項目應用需要提供互聯網服務。以下介紹幾種常見的外網訪問內網、內網提供公網連接實現方法參考。 一、公網IP路由器端口映…

java的輸入輸出模板(ACM模式)

文章目錄 1、前置準備2、普通輸入輸出API①、輸入API②、輸出API 3、快速輸入輸出API①、BufferedReader②、BufferedWriter 案例題目描述代碼 面試有時候要acm模式,刷慣leetcode可能會手生不會acm模式,該文直接通過幾個題來熟悉java的輸入輸出模板&…

什么是移動設備管理(MDM)

移動設備管理(MDM)是一種安全解決方案,旨在監控、管理和保護企業的移動設備(包括智能手機、平板電腦、筆記本電腦和計算機)。MDM軟件是IT部門的關鍵工具,其核心功能包括設備配置、安全策略實施、遠程控制及…

c++中構造對象實例的兩種方式及其返回值

c中,構造對象實例有兩種方式,一種返回對象實例,一種返回該對象實例的指針。如下所示: 一、兩種返回值 RedisConn conn1; //得到實例conn1;RedisConn *conn2 new RedisConn();//得到指針conn2;RedisConn conn3 new RedisConn()…

【Unity筆記】PathCreator使用教程:用PathCreator實現自定義軌跡動畫與路徑控制

在Unity開發過程中,角色移動、攝像機動畫、軌道系統、AI巡邏等功能中,路徑控制是常見又復雜的需求之一。如何優雅、高效地創建路徑并控制對象沿路徑運動,是游戲開發、動畫制作乃至工業仿真中的關鍵問題。 在這篇文章中,我將介紹一…

JAVA實戰開源項目:健身房管理系統 (Vue+SpringBoot) 附源碼

本文項目編號 T 180 ,文末自助獲取源碼 \color{red}{T180,文末自助獲取源碼} T180,文末自助獲取源碼 目錄 一、系統介紹二、數據庫設計三、配套教程3.1 啟動教程3.2 講解視頻3.3 二次開發教程 四、功能截圖五、文案資料5.1 選題背景5.2 國內…

[人機交互]交互設計過程

*一.設計 1.1什么是設計 設計是一項創新活動,旨在為用戶提供可用的產品 –交互設計是“設計交互式產品、以支持人們的生活和工作” 1.2設計包含的四個活動 – 識別用戶的需要( needs )并建立需求( requirements &…

1. 視頻基礎知識

1. 圖像基礎概念 像素:像素是一個圖片的基本單位,pix是英語單詞picture,加上英語單詞“元素element”,就得到了pixel,簡稱px。所以“像素”有“圖像元素”之意。分辨率:指的是圖像的大小或者尺寸。比如 19…

代理IP是什么,有什么用?

一、什么是代理IP? 簡單理解,代理IP是一座橋梁——你通過它連接到目標服務器,而不是直接暴露自己。這里的“IP”是網絡世界中的地址標簽,而代理IP在運行時,蹦跶到臺前,成為目標服務器看到的那個“地址”。…

日常代碼邏輯實現

日常代碼邏輯實現: 1.防抖 解釋: 防抖是指n秒內只執行一次,如果n秒內事件再次觸發,則重新計算時間 應用場景: 搜索框輸入聯想(避免每次按鍵都發送請求)窗口尺寸調整 代碼實現:…

北斗導航 | RTKLib中模糊度解算詳解,公式,代碼

模糊度解算 一、模糊度解算總體流程二、核心算法與公式推導1. **雙差模糊度定義**2. **浮點解方程**三、LAMBDA算法實現細節1. **降相關變換(Z-transform)**2. **整數最小二乘搜索**3. **Ratio檢驗**四、部分模糊度固定(Partial Ambiguity Resolution, PAR)1. **子集選擇策…

基于大模型的母嬰ABO血型不合溶血病全方位預測與診療方案研究

目錄 一、引言 1.1 研究背景與目的 1.2 國內外研究現狀 1.3 研究方法與創新點 二、母嬰 ABO 血型不合溶血病概述 2.1 發病機制 2.2 臨床表現 2.3 流行病學特征 三、大模型在母嬰 ABO 血型不合溶血病預測中的應用 3.1 模型選擇與構建 3.2 預測指標與數據輸入 3.3 模…

驅動-互斥鎖

互斥鎖可以說是“量值” 為 1 的 信號量, 最終實現的效果相同, 既然有了信號量, 那為什么還要有互斥鎖呢? 這就是我們這里需要了解并掌握的 文章目錄 參考資料互斥鎖的介紹互斥鎖結構體 - mutex互斥鎖 API互斥鎖實驗源碼程序-mute…

人工智能100問?第17問:智能體的定義及其基本特征?

目錄 一、通俗解釋 二、專業解析 三、權威參考 智能體是能夠通過傳感器感知環境、自主決策并借助執行器采取行動以實現特定目標的智能實體或系統。 一、通俗解釋 智能體就像一臺能自己“看、想、動”的智能機器。比如你手機里的語音助手,它能聽懂你說的話&…

Linux系統入門第十一章 --Shell編程之函數與數組

一、Shell函數 1、函數的用法 Shell函數可用于存放一系列的指令。在Shell腳本執行的過程中,函數被置于內存中,每次調用函數時不需要從硬盤讀取,因此運行的速度比較快。在Shell編程中函數并非是必須的元素,但使用函數可以對程序進…

Baumer工業相機堡盟工業相機的工業視覺中為什么偏愛“黑白相機”

Baumer工業相機堡盟工業相機的工業視覺中為什么偏愛“黑白相機” Baumer工業相機?為什么偏愛“黑白相機”??工業視覺中為什么傾向于多使用黑白相機黑白相機在工業視覺中的應用場景有哪些? Baumer工業相機 工業相機是常用與工業視覺領域的常用專業視覺…

MiM: Mask in Mask Self-SupervisedPre-Training for 3D Medical Image Analysis

Abstract Vision Transformer在3D醫學圖像分析的自監督學習(Self-Supervised Learning,SSL)中展現了卓越的性能。掩碼自編碼器(Masked Auto-Encoder,MAE)用于特征預訓練,可以進一步釋放ViT在各…

SQL注入的繞過方式

1.注釋與空白符繞過 利用#,--,/**/替代被過濾的注釋符 利用%09(Tab),%0A(換行) ,/**/代替空格:如union%0Aselect%0A1,2,3 2.編碼繞過: URL編碼,雙重編碼,十六進制編碼,Unicode編…