21. 自動化測試框架開發之Excel配置文件的測試用例改造

21. 自動化測試框架開發之Excel配置文件的測試用例改造

一、測試框架核心架構

1.1 組件依賴關系

# 核心庫依賴
import unittest           # 單元測試框架
import paramunittest      # 參數化測試擴展
from chap3.po import *    # 頁面對象模型
from file_reader import ExcelReader  # Excel數據讀取器# 必須使用的庫版本
# xlrd==1.2.0(支持xlsx格式)

二、Excel數據驅動實現

2.1 數據加載配置

# Excel數據結構示例
# | name   | password | assertion              | message                |
# |--------|----------|------------------------|-----------------------|
# | Tester | test     | Invalid Login or Password | test_login_admin passed |data = ExcelReader(r'E:\Py3Sel3Ifram\chap5\Demo.xlsx',sheet=0,              # 第一個工作表excel_title=True      # 首行為標題
).data
參數說明:
  • sheet=0:讀取第一個工作表
  • excel_title=True:將首行作為字典鍵
  • 文件路徑需使用原始字符串(r前綴)

三、測試用例參數化方案

3.1 使用paramunittest實現(注釋方案)

@paramunittest.parametrized(data[1],data[2],data[3])
class TestOder(unittest.TestCase, Oder):def setParameters(self, name, pwd, ass, txt):"""參數映射方法"""self.name = nameself.pwd = pwdself.ass = assself.txt = txtdef test_login(self):"""測試執行方法"""self.get()self.login(self.name, self.pwd)sleep(2)assert self.element('op.invalid_login').text == self.assprint(self.txt)
方案特點:
  • 每個測試用例獨立執行
  • 需要明確指定數據索引
  • 自動生成多個測試方法

3.2 使用subTest實現(當前方案)

class TestLogin(unittest.TestCase, Oder):def test_login(self):for d in data:with self.subTest(d):  # 子測試上下文self.get()self.login(d['name'], d['password'])sleep(2)try:self.assertEqual(self.element('op.invalid_login').text,d['assertion'])except AssertionError:self.driver.save_screenshot(f'./{d["assertion"]}.png')raiseprint(d['message'])
方案優勢:
  • 單測試方法管理多組數據
  • 失敗時繼續執行后續用例
  • 自動生成詳細測試報告

四、關鍵技術點解析

4.1 數據驅動流程

開始
├─ 讀取Excel測試數據
├─ 遍歷數據集合
│   ├─ 初始化瀏覽器
│   ├─ 執行登錄操作
│   ├─ 驗證斷言結果
│   ├─ 成功:輸出日志
│   └─ 失敗:截圖保存
└─ 生成測試報告

4.2 異常處理機制

try:self.assertEqual(actual, expected)
except AssertionError:self.driver.save_screenshot(f'./{d["assertion"]}.png')  # 失敗截圖raise  # 重新拋出異常
功能特點:
  • 精確捕獲斷言失敗
  • 自動保存錯誤現場
  • 保留原始異常堆棧

五、Excel數據規范要求

5.1 數據結構標準

列名類型說明
namestr用戶名輸入
passwordstr密碼輸入
assertionstr預期斷言文本
messagestr測試結果描述

5.2 格式注意事項

  1. 第一行必須為標題行
  2. 各列順序需與代碼參數對應
  3. 文本型斷言值需完全匹配
  4. 避免使用特殊字符作為文件名

六、工程實踐建議

6.1 數據管理策略

# 建議文件結構
testdata/
├─ login/
│   ├─ valid_login.xlsx
│   └─ invalid_login.xlsx
├─ order/
│   └─ create_order.xlsx

6.2 執行效率優化

優化策略實現方式效果預估
瀏覽器復用使用setUpClass/tearDownClass減少80%啟動時間
智能等待顯式等待替代固定sleep提升30%執行速度
并行執行使用pytest-xdist插件線性提升效率

七、版本兼容性說明

7.1 必須環境配置

# 安裝指定版本庫
pip install xlrd==1.2.0 paramunittest==1.0.2# 版本沖突說明:
# xlrd>=2.0.0 不支持xlsx格式
# paramunittest需要兼容Python3.13

7.2 常見錯誤處理

錯誤現象原因分析解決方案
無法打開xlsx文件xlrd版本不正確降級到1.2.0版本
參數映射失敗Excel列名不匹配檢查標題行命名
元素定位超時頁面加載緩慢添加顯式等待機制
截圖保存失敗路徑權限問題使用絕對路徑或檢查權限

八、完整代碼

"""
Python :3.13.3
Selenium: 4.31.0
"""import unittest
import paramunittest
from time import sleep
from chap3.po import *
from .file_reader import ExcelReader# 處理 collections.Mapping 的兼容性問題
import collectionstry:collections.Mapping
except AttributeError:import collections.abccollections.Mapping = collections.abc.Mapping# 獲取并解析Excel數據
# data = ExcelReader(r'E:\Py3Sel3Ifram\chap5\Demo.xlsx',
#                    sheet=0,
#                    excel_title=False).data# @paramunittest.parametrized(data[1],data[2],data[3])
# class TestOder(unittest.TestCase, Oder):
#     def setParameters(self, name, pwd, ass, txt):
#         self.name = name
#         self.pwd = pwd
#         self.ass = ass
#         self.txt = txt
#
#     def test_login(self):
#         self.get()
#         self.login(self.name, self.pwd)
#         sleep(2)
#         assert self.element('op.invalid_login').text == self.ass
#         print(self.txt)# 獲取并解析Excel數據
data = ExcelReader(r'E:\Py3Sel3Ifram\chap5\Demo.xlsx',sheet=0).data# data = (
#     {'name': 'Testerr', 'pwd': 'test', 'ass': 'Invalid Login or Password.', 'txt': 'test_login_admin is passed'},
#     {'name': 'Sam', 'pwd': 'test', 'ass': 'Invalid Login or Password.', 'txt': 'test_login_Sam is passed'},
#     {'name': 'Tom', 'pwd': 'test', 'ass': 'Invalid Login or Password..', 'txt': 'test_login_Tom is passed'}
# )class TestLogin(unittest.TestCase, Oder):def test_login(self):for d in data:with self.subTest(d):self.get()self.login(d['name'], d['password'])sleep(2)# assert self.element(self.invalid_login).text == d['ass'], \#     self.driver.save_screenshot(f'./{d["ass"]}.png')try:self.assertEqual(self.element('op.invalid_login').text, d['assertion'])except AttributeError:self.driver.save_screenshot(f'./{d["assertion"]}.png')raise AssertionErrorprint(d['message'])if __name__ == '__main__':unittest.main()

Excel的數據:
在這里插入圖片描述

最佳實踐建議:建議將測試數據與測試代碼分離管理,使用獨立的testdata目錄存儲各類測試數據文件。實際項目數據統計顯示,采用數據驅動模式可降低60%的測試維護成本。


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

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

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

相關文章

如何在電力系統中配置和管理SNTP時間同步?

在電力系統中配置和管理 SNTP 時間同步需結合行業標準(如《DL/T 1100.1-2019》)和分層架構特點,確保安全性、可靠性和精度適配。以下是具體操作指南,涵蓋架構設計、設備配置、安全管理、運維監控四大核心環節,并附典型…

MTK-關于HW WCN的知識講解

前言: 最近做項目過程中和硬件打交道比較多,現在關于整理下硬件的HW wcn的知識點 一 MTK常見的MT6631 Wi-Fi 2.4GHz 匹配調諧指南 ?拓撲結構選擇? 推薦采用并聯電容拓撲(?shunt cap topology?)代替并聯電感拓撲(?shunt inductor topology?),以減少潛在電路設計…

(1)課堂 1--5,這五節主要講解 mysql 的概念,定義,下載安裝與卸載

(1)謝謝老師: (2)安裝 mysql : (3)鏡像下載 ,這個網址很好 : (4) 另一個虛擬機的是 zhang 123456 : 接著配置…

U-Boot ARMv8 平臺異常處理機制解析

入口點:arch/arm/cpu/armv8/start.S 1. 判斷是否定義了鉤子,如有則執行,否則往下走。執行save_boot_params,本質就是保存一些寄存器的值。 2. 對齊修復位置無關碼的偏移 假設U-Boot鏈接時基址為0x10000,但實際加載到0…

mysql安裝教程--筆記

一、Windows 系統安裝 方法1:使用 MySQL Installer(推薦) 1. 下載安裝包 訪問 MySQL 官網下載頁面,選擇 MySQL Installer for Windows。 2. 運行安裝程序 雙擊下載的 .msi 文件,選擇安裝類型: ? Developer…

投資策略規劃最優決策分析

目錄 一、投資策略規劃問題詳細 二、存在最優投資策略:每年都將所有錢投入到單一投資產品中 (一)狀態轉移方程 (二)初始條件與最優策略 (三)證明最優策略總是將所有錢投入到單一投資產品中…

NGINX HTTP/3 實驗指南安裝、配置與調優

一、HTTP/3 簡介 基于 QUIC:在 UDP 之上實現的多路復用傳輸,內置擁塞控制與前向糾錯,無需三次握手即可恢復連接。零 RTT 重連:借助 TLS 1.3,實現連接恢復時的 0-RTT 數據發送(視底層庫支持)。多…

編程日志5.28

string賦值操作 算法: #include<iostream> using namespace std; int main() { //1.字符串常量的賦值 string s1; s1 = "英雄哪里出來"; cout << s1 << endl; //2.字符串變量的賦值 string s2; s2 = s1; cout <…

AE的ai圖層導到Ai

AE的ai圖層導到ai 解決方法: 1、打開ai軟件&#xff0c;不用新建&#xff0c;留在那就行。 2、在AE里選中任意一個ai文件圖層&#xff0c;只需同時按住ctrl和英文字母鍵&#xff0c;圖層就會自動全部導入到ai中 英文字母鍵的詳情可以參考&#xff1a;http://www.yayihouse.co…

【Springboot+LangChain4j】Springboot項目集成LangChain4j(下)

前置條件&#xff1a;根據上篇文章完成springboot初步集成LangChain4j 【SpringbootLangChain4j】根據LangChain4j官方文檔&#xff0c;三分鐘完成Springboot項目集成LangChain4j&#xff08;上&#xff09;-CSDN博客 但是接口方法中&#xff0c;關于大模型的配置都是寫死的&a…

好壞質檢分類實戰(異常數據檢測、降維、KNN模型分類、混淆矩陣進行模型評估)

任務 好壞質檢分類實戰 task: 1、基于 data_class_raw.csv 數據&#xff0c;根據高斯分布概率密度函數&#xff0c;尋找異常點并剔除 2、基于 data_class_processed.csv 數據&#xff0c;進行 PCA 處理&#xff0c;確定重要數據維度及成分 3、完成數據分離&#xff0c;數據分離…

以少學習:通過無標簽數據從大型語言模型進行知識蒸餾

Learning with Less: Knowledge Distillation from Large Language Models via Unlabeled Data 發表&#xff1a;NNACL-Findings 2025 機構&#xff1a;密歇根州立大學 Abstract 在實際的自然語言處理&#xff08;NLP&#xff09;應用中&#xff0c;大型語言模型&#xff08…

EasyExcel使用

EasyExcel 簡介 EasyExcel 是阿里巴巴開源的一個基于 Java 的簡單、省內存的讀寫 Excel 工具。在處理大量數據時&#xff0c;它能極大地減少內存占用&#xff0c;提高性能。下面從依賴配置、模板使用到代碼調用&#xff0c;進行詳細介紹。 添加依賴 若要在項目里使用 EasyEx…

文件類型匯總

一、文檔類文件 Microsoft Office 文檔&#xff1a;.doc、.docx&#xff08;Word 文檔&#xff09;、.xls、.xlsx&#xff08;Excel 表格&#xff09;、.ppt、.pptx&#xff08;PowerPoint 演示文稿&#xff09; OpenOffice/LibreOffice 文檔&#xff1a;.odt&#xff08;文字…

OpenCV CUDA模塊圖像處理------顏色空間處理之拜耳模式去馬賽克函數demosaicing()

操作系統&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 編程語言&#xff1a;C11 算法描述 該函數用于在 GPU 上執行拜耳圖像&#xff08;Bayer Pattern&#xff09;的去馬賽克操作&#xff08;Demosaicing&#xff09;&#xff0c;將單通…

Linux: 守護進程

Linux&#xff1a; 守護進程 &#xff08;一&#xff09;前臺進程和后臺進程前臺進程后臺進程 &#xff08;二&#xff09;會話、進程組、進程的關系&#xff08;三&#xff09;守護進程創建守護進程 &#xff08;一&#xff09;前臺進程和后臺進程 前臺進程 前臺進程是指當前…

6.4.5_關鍵路徑

AOE網&#xff1a; 用EEdge表示活動&#xff0c;AOV網是用Vertex頂點表示活動 僅有一個入度0的頂點叫開始頂點(源點)&#xff0c;出度0的頂點叫結束頂點(匯點) 各條邊表示活動&#xff0c;邊上的權值表示完成該活動的開銷&#xff0c;各頂點表示事件&#xff0c;事件是就發生…

Oracle 的 TX、TM、UL 鎖對比

Oracle 的 TX、TM、UL 鎖對比 Oracle 數據庫中的這三種鎖機制在并發控制中扮演著不同角色&#xff0c;以下是它們的對比分析&#xff1a; 一、基本特性對比 特性TX (事務鎖)TM (DML鎖)UL (用戶鎖)鎖類型行級鎖表級鎖應用級自定義鎖作用范圍保護數據行變更保護表結構不被修改…

Kruskal-Wallis檢驗 vs. 多次Wilcoxon檢驗:多重比較-spss

在補充圖6中&#xff0c;對喉鏡形態分類、病理類型和病程使用 Wilcoxon秩和檢驗&#xff08;Mann-Whitney U檢驗&#xff09; 結合 Bonferroni校正&#xff0c;而非 Kruskal-Wallis檢驗加Dunn’s檢驗&#xff0c;原因如下&#xff1a; 1. 方法選擇的依據 (1) 變量類型與比較組…

vue3+element-plus el-date-picker日期、年份篩選設置本周、本月、近3年等快捷篩選

一、頁面代碼&#xff1a; <template> <!-- 日期范圍篩選框 --> <el-date-picker v-model"dateRange" value-format"YYYY-MM-DD" type"daterange" range-separator"至" start-placeholder"開始日期" end-…