测试报告是测试工程师日常工作中不可或缺的一部分,但测试报告的制作通常需要花费大量时间,特别是在需要定期更新数据(如测试用例数量、执行时间、通过率等)时,手动操作不仅效率低,还容易出错。
本篇文章将为你展示如何通过 Python 脚本 和 模板化的方式,实现测试报告的自动化生成。我们支持多种模板格式,包括 HTML、PDF 和 DOCX(Word 文档),通过简单的数据填充即可快速生成标准化的测试报告,极大提升工作效率。
1. 功能目标
我们将实现以下功能:
- 支持 HTML 模板生成测试报告:通过 HTML 模板自动填充数据并生成测试报告。
- 支持 PDF 输出:将 HTML 格式的测试报告转换为 PDF 文件。
- 支持 DOCX(Word)文档模板:通过 Word 模板自动填充数据。
- 支持可配置数据输入:通过简单的 JSON 或字典输入关键测试数据。
2. 环境准备
在开始之前,请确保安装以下依赖库:
pip install jinja2 pdfkit python-docx
- Jinja2:用于 HTML 模板的渲染。
- pdfkit:将 HTML 转换为 PDF(需安装 wkhtmltopdf 工具)。
- python-docx:用于操作 Word 文档(DOCX)。
额外工具安装:
- wkhtmltopdf:用于将 HTML 转换为 PDF,可从官方网站下载并安装:https://wkhtmltopdf.org/downloads.html。
3. 实现测试报告自动化生成
3.1 数据输入结构
我们将通过一个简单的 JSON 或字典结构输入测试数据,例如:
test_data = {
"release_date": "2025-01-20",
"version": "v1.0.0",
"total_cases": 100,
"passed_cases": 95,
"failed_cases": 5,
"execution_time": "2h 15m",
"testers": ["Alice", "Bob", "Charlie"],
"comments": "测试完成,功能验证通过,未发现阻塞性问题。"
}
3.2 HTML 模板渲染
我们先定义一个简单的 HTML 模板,使用 Jinja2 的占位符插入测试数据。
HTML 模板文件(template.html
)
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>测试报告</title>
<style>
body {
font-family: Arial, sans-serif;
line-height: 1.6;
margin: 20px;
}
h1 {
color: #4CAF50;
}
table {
width: 100%;
border-collapse: collapse;
margin-top: 20px;
}
table, th, td {
border: 1px solid #ddd;
}
th, td {
padding: 8px;
text-align: left;
}
th {
background-color: #f2f2f2;
}
.summary {
margin-top: 20px;
}
</style>
</head>
<body>
<h1>测试报告 - {{ version }}</h1>
<p><strong>发版日期:</strong> {{ release_date }}</p>
<p><strong>执行时间:</strong> {{ execution_time }}</p>
<p><strong>测试人员:</strong> {{ testers | join(', ') }}</p>
<div class="summary">
<h2>测试摘要</h2>
<table>
<tr>
<th>总用例数</th>
<th>通过用例数</th>
<th>失败用例数</th>
</tr>
<tr>
<td>{{ total_cases }}</td>
<td>{{ passed_cases }}</td>
<td>{{ failed_cases }}</td>
</tr>
</table>
</div>
<div class="comments">
<h2>备注</h2>
<p>{{ comments }}</p>
</div>
</body>
</html>
Python 脚本:生成 HTML 测试报告
from jinja2 import Environment, FileSystemLoader
import pdfkit
def generate_html_report(data, template_path="template.html", output_path="test_report.html"):
# 加载 HTML 模板
env = Environment(loader=FileSystemLoader("."))
template = env.get_template(template_path)
# 渲染模板
rendered_html = template.render(data)
# 保存为 HTML 文件
with open(output_path, "w", encoding="utf-8") as f:
f.write(rendered_html)
print(f"HTML 测试报告已生成:{output_path}")
return output_path
Python 脚本:将 HTML 转换为 PDF
def convert_html_to_pdf(html_path, pdf_path="test_report.pdf"):
pdfkit.from_file(html_path, pdf_path)
print(f"PDF 测试报告已生成:{pdf_path}")
完整调用示例
if __name__ == "__main__":
test_data = {
"release_date": "2025-01-20",
"version": "v1.0.0",
"total_cases": 100,
"passed_cases": 95,
"failed_cases": 5,
"execution_time": "2h 15m",
"testers": ["Alice", "Bob", "Charlie"],
"comments": "测试完成,功能验证通过,未发现阻塞性问题。"
}
# 生成 HTML 报告
html_path = generate_html_report(test_data)
# 转换为 PDF 报告
convert_html_to_pdf(html_path)
3.3 DOCX 模板填充
Word 模板文件(template.docx
)
使用 Word 文档作为模板,创建占位符(如 {{version}}
、{{release_date}}
等)。以下是模板的结构示例:
- 标题:
测试报告 - {{version}}
- 测试摘要:表格中填充
total_cases
、passed_cases
、failed_cases
。 - 备注:插入
comments
。
Python 脚本:填充 DOCX 模板
from docx import Document
def generate_docx_report(data, template_path="template.docx", output_path="test_report.docx"):
# 加载 Word 模板
doc = Document(template_path)
# 替换占位符
for paragraph in doc.paragraphs:
for key, value in data.items():
placeholder = f"{{{{{key}}}}}"
if placeholder in paragraph.text:
paragraph.text = paragraph.text.replace(placeholder, str(value))
# 替换表格中的数据
for table in doc.tables:
for row in table.rows:
for cell in row.cells:
for key, value in data.items():
placeholder = f"{{{{{key}}}}}"
if placeholder in cell.text:
cell.text = cell.text.replace(placeholder, str(value))
# 保存生成的报告
doc.save(output_path)
print(f"DOCX 测试报告已生成:{output_path}")
完整调用示例
if __name__ == "__main__":
test_data = {
"release_date": "2025-01-20",
"version": "v1.0.0",
"total_cases": 100,
"passed_cases": 95,
"failed_cases": 5,
"execution_time": "2h 15m",
"testers": "Alice, Bob, Charlie",
"comments": "测试完成,功能验证通过,未发现阻塞性问题。"
}
# 生成 DOCX 报告
generate_docx_report(test_data, template_path="template.docx")
4. 输出效果展示
HTML 报告
- 支持嵌入测试数据和统计表格。
- 可直接通过浏览器查看或通过
pdfkit
导出为 PDF。
PDF 报告
- 从 HTML 转换而来,支持完整格式和样式。
DOCX 报告
- 可直接打开并编辑,适合需要人工调整或个性化的测试报告。
5. 小结
通过本篇文章,我们实现了测试报告的自动化生成,支持 HTML、PDF 和 DOCX 三种格式。只需准备模板和数据,便可快速生成标准化报告,节省大量重复劳动时间。
亮点:
- 模板化设计:灵活的模板支持,便于扩展和定制。
- 支持多种格式:HTML、PDF 和 Word 报告均可生成。
- 一键操作:只需输入测试数据,即可快速生成报告。
下一篇预告:在下一篇文章中,我们将探讨 测试用例管理的自动化:从 Excel 到结构化数据(JSON/YAML),实现用例的高效管理和直接与自动化脚本的对接。敬请期待!