PyQt5+Python-docx實現(xiàn)一鍵生成測試報告
引言
作為一名測試工程師,你是否經(jīng)歷過手動填寫測試報告的痛苦?就像用放大鏡在沙地上寫詩——費力、易改、還容易被風(fēng)吹散。
今天,我們將用Python的PyQt5和python-docx庫,打造一款測試報告一鍵生成工具,讓你像搭積木一樣快速完成報告,像做蛋糕一樣優(yōu)雅分配時間!
工具功能亮點
1.圖形化界面交互:你的“樂高積木”
- 通過PyQt5設(shè)計的界面,就像一盒五顏六色的樂高積木,
- 每個輸入框都是一個模塊,輕輕一搭,數(shù)據(jù)就位!
2.時間智能劃分:你的“時間蛋糕”大師
根據(jù)測試起止時間,像切蛋糕一樣按比例分配需求評審、
用例設(shè)計、執(zhí)行、回歸測試及報告編寫的時間。
(例如:需求評審10%、用例設(shè)計20%…)
3.模板化報告生成:你的“填字游戲”助手
基于python-docx庫,像玩填字游戲一樣自動填充Word文檔,
模板一放,數(shù)據(jù)自動到位。
4.可擴展性強:你的“建筑藍(lán)圖”
代碼結(jié)構(gòu)清晰,像建筑藍(lán)圖一樣模塊化,
方便后續(xù)集成更多功能(如圖表生成、歷史記錄保存)。
工具設(shè)計思路
1. 界面設(shè)計:PyQt5實現(xiàn)數(shù)據(jù)輸入
輸入字段:
- 系統(tǒng)測試環(huán)境地址 → 類比為“快遞地址”,確保報告能準(zhǔn)確送達(dá)。
- 項目經(jīng)理、測試經(jīng)理等 → 像“團(tuán)隊角色卡牌”,明確責(zé)任分工。
- 測試起止時間 → 類比為“馬拉松起點終點”,為時間分配提供基準(zhǔn)。
- 用例數(shù)與Bug數(shù) → 像“考試成績表”,直觀展示測試成果。
時間智能劃分:
- 根據(jù)起止時間,按比例分配階段時間,
- 就像切蛋糕:需求評審(10%)、用例設(shè)計(20%)、執(zhí)行(30%)、
- 回歸測試(20%)、報告編寫(20%)。每個階段都有清晰的“時間標(biāo)簽”。
2. 文檔生成:python-docx填充模板
模板結(jié)構(gòu):
- 標(biāo)題與基本信息 → 類比為“簡歷封面”,展示項目核心信息。
- 時間安排表 → 像“日程表”,讓時間分配一目了然。
- 測試數(shù)據(jù)統(tǒng)計 → 如“成績單”,用表格展示用例數(shù)、Bug數(shù)。
- 測試結(jié)論 → 類似“總結(jié)發(fā)言”,簡潔有力。
動態(tài)數(shù)據(jù)填充:
- 通過占位符替換或直接插入段落/表格,
- 像“填字游戲”一樣自動填充數(shù)據(jù)。
工具實現(xiàn)代碼
1. 安裝依賴
pip install PyQt5 python-docx
2. PyQt5界面代碼
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QLineEdit, QDateEdit, QPushButton, QVBoxLayout, QHBoxLayout, QFormLayout
class TestReportTool(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle("測試報告一鍵生成工具")
self.init_ui()
def init_ui(self):
# 表單布局
form_layout = QFormLayout()
# 輸入字段(積木模塊)
self.system_url = QLineEdit()
self.pm_name = QLineEdit()
self.tm_name = QLineEdit()
self.tl_name = QLineEdit()
self.tester_name = QLineEdit()
self.start_date = QDateEdit()
self.end_date = QDateEdit()
self.func_cases = QLineEdit()
self.func_bugs = QLineEdit()
self.regression_cases = QLineEdit()
self.regression_bugs = QLineEdit()
# 添加字段到表單
form_layout.addRow("系統(tǒng)測試環(huán)境地址:", self.system_url)
form_layout.addRow("項目經(jīng)理:", self.pm_name)
form_layout.addRow("測試經(jīng)理:", self.tm_name)
form_layout.addRow("測試組長:", self.tl_name)
form_layout.addRow("測試人員:", self.tester_name)
form_layout.addRow("測試起始時間:", self.start_date)
form_layout.addRow("測試結(jié)束時間:", self.end_date)
form_layout.addRow("功能測試用例數(shù):", self.func_cases)
form_layout.addRow("功能測試Bug數(shù):", self.func_bugs)
form_layout.addRow("回歸測試用例數(shù):", self.regression_cases)
form_layout.addRow("回歸測試缺陷數(shù):", self.regression_bugs)
# 生成按鈕
self.generate_btn = QPushButton("生成測試報告")
self.generate_btn.clicked.connect(self.generate_report)
# 主布局
main_layout = QVBoxLayout()
main_layout.addLayout(form_layout)
main_layout.addWidget(self.generate_btn)
self.setLayout(main_layout)
def generate_report(self):
# 收集數(shù)據(jù)
data = {
"system_url": self.system_url.text(),
"pm_name": self.pm_name.text(),
"tm_name": self.tm_name.text(),
"tl_name": self.tl_name.text(),
"tester_name": self.testers_name.text(),
"start_date": self.start_date.date().toString("yyyy-MM-dd"),
"end_date": self.end_date.date().toString("yyyy-MM-dd"),
"func_cases": self.func_cases.text(),
"func_bugs": self.func_bugs.text(),
"regression_cases": self.regression_cases.text(),
"regression_bugs": self.regression_bugs.text(),
}
# 計算時間塊并添加到data
time_blocks = calculate_time_blocks(data["start_date"], data["end_date"])
for phase, dates in time_blocks.items():
key = f"{phase}_time"
data[key] = dates
# 計算通過率
func_pass_rate = round((1 - int(data["func_bugs"]) / int(data["func_cases"])) * 100, 2)
data["func_pass_rate"] = f"{func_pass_rate}%"
reg_pass_rate = round((1 - int(data["regression_bugs"]) / int(data["regression_cases"])) * 100, 2)
data["reg_pass_rate"] = f"{reg_pass_rate}%"
# 調(diào)用文檔生成函數(shù)
from docx_generator import generate_docx
generate_docx(data)
print("測試報告生成成功!")
if __name__ == "__main__":
app = QApplication(sys.argv)
window = TestReportTool()
window.show()
sys.exit(app.exec_())
3. Word文檔生成代碼
from docx import Document
from datetime import datetime, timedelta
def calculate_time_blocks(start_date_str, end_date_str):
start_date = datetime.strptime(start_date_str, "%Y-%m-%d")
end_date = datetime.strptime(end_date_str, "%Y-%m-%d")
total_days = (end_date - start_date).days
if total_days <= 0:
return {}
# 按比例劃分階段(時間蛋糕)
phases = {
"需求評審": 0.1,
"用例設(shè)計": 0.2,
"用例執(zhí)行": 0.3,
"回歸測試": 0.2,
"報告編寫": 0.2
}
time_blocks = {}
current_date = start_date
for phase, ratio in phases.items():
days = int(total_days * ratio)
end_phase = current_date + timedelta(days=days)
time_blocks[phase] = f"{current_date.strftime('%Y-%m-%d')} - {end_phase.strftime('%Y-%m-%d')}"
current_date = end_phase
return time_blocks
def generate_docx(data):
# 讀取模板文檔
doc = Document('template.docx') # 假設(shè)模板文件為 template.docx
# 替換段落中的占位符
for paragraph in doc.paragraphs:
for key, value in data.items():
if key in paragraph.text:
paragraph.text = paragraph.text.replace(f'{{{key}}}', value) # 使用雙大括號包裹
# 替換表格中的占位符
for table in doc.tables:
for row in table.rows:
for cell in row.cells:
for key, value in data.items():
if key in cell.text:
cell.text = cell.text.replace(f'{{{key}}}', value)
# 保存文檔
doc.save("TestReport.docx")
模板化樣本
# 測試報告模板(變量占位符版)
---
## 一、測試基本信息
系統(tǒng)測試環(huán)境地址:{{{system_url}}}
項目經(jīng)理:{{{pm_name}}}
測試經(jīng)理:{{{tm_name}}}
測試組長:{{{tl_name}}}
測試人員:{{{tester_name}}}
---
## 二、測試時間安排
需求評審:{{{需求評審_time}}}
用例設(shè)計:{{{用例設(shè)計_time}}}
用例執(zhí)行:{{{用例執(zhí)行_time}}}
回歸測試:{{{回歸測試_time}}}
報告編寫:{{{報告編寫_time}}}
---
## 三、測試數(shù)據(jù)統(tǒng)計
| 測試類型 | 用例數(shù) | 缺陷數(shù) | 通過率 |
|----------|--------|--------|--------|
| 功能測試 | {{{func_cases}}} | {{{func_bugs}}} | {{{func_pass_rate}}} |
| 回歸測試 | {{{regression_cases}}} | {{{regression_bugs}}} | {{{reg_pass_rate}}} |
---
## 四、測試結(jié)論
{{{test_conclusion}}}
工具使用示例
1.準(zhǔn)備模板:
- 創(chuàng)建一個名為 template.docx 的Word文檔,內(nèi)容如上所示的模板樣本。
- 確保模板中使用 {{{variable_name}}} 形式的占位符。
2.運行界面:
- 打開工具后,在界面中輸入測試數(shù)據(jù)。
- 點擊“生成測試報告”按鈕。
3.生成結(jié)果:
自動生成名為 TestReport.docx 的Word文檔,內(nèi)容如下:
- 測試基本信息:系統(tǒng)環(huán)境、人員信息(簡歷封面)。
- 測試時間安排:按比例劃分的各階段時間(日程表)。
- 測試數(shù)據(jù)統(tǒng)計:用表格展示功能測試與回歸測試的用例數(shù)、缺陷數(shù)、通過率(成績單)。
- 測試結(jié)論:簡要總結(jié)測試結(jié)果(總結(jié)發(fā)言)。
擴展建議
模板自定義:在模板中添加公司Logo、頁眉頁腳或顏色主題,提升專業(yè)度。
數(shù)據(jù)導(dǎo)出:集成 openpyxl 庫,將測試數(shù)據(jù)導(dǎo)出為Excel表格。
圖表生成:使用 matplotlib 生成缺陷趨勢圖,并嵌入到Word文檔中。
歷史記錄:將用戶輸入的數(shù)據(jù)保存為JSON文件,支持歷史記錄查詢。
結(jié)語
這款工具的核心在于將重復(fù)性工作自動化,讓測試工程師專注于測試設(shè)計與執(zhí)行。
通過PyQt5的圖形化界面和python-docx的文檔生成能力,我們不僅提高了效率,還降低了人為錯誤的風(fēng)險。
到此這篇關(guān)于PyQt5+Python-docx實現(xiàn)一鍵生成測試報告的文章就介紹到這了,更多相關(guān)PyQt5 Python-docx生成測試報告內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

