在接口测试中,测试工程师往往需要处理多种格式的文档(HAR、Swagger、Excel 等)以生成测试用例。然而,手动处理这些文档既耗时又容易出错。为了解决这一问题,本文将实现一款基于 PyQt5 的多格式接口用例生成工具,支持从文档导入到解析、推理生成、导出等全流程功能。
文章提供完整的实现代码、详细的测试用例、实用的解析策略,并验证工具的功能,确保测试工程师能够快速上手并应用于实际工作。
工具功能概述
-
多格式文档支持:
工具支持导入 HAR 文件、Swagger 文档(JSON/YAML 格式)、Excel 文件、Markdown 文档、JSON 文件、YAML 文件、TXT 文件,并在 GUI 界面中预览文档内容。har包案例文件已上传云盘。 -
文档解析与预览:
自动解析文档内容,提取接口信息(如请求地址、请求方法、请求头、请求参数、请求响应等),并以可视化方式展示解析结果。 -
智能推理生成用例:
结合用户输入的提示词和文档内容,调用 阿里云百炼 DeepSeek API,生成智能接口测试用例脚本。 -
多格式导出:
支持将生成的接口测试用例导出为 JSON、YAML、Excel、Markdown 和 Docx 格式,满足多种使用场景需求。
完整工具实现
以下是工具的完整实现代码,分为多格式解析、推理生成、导出功能等部分。代码中配有详细说明,确保逻辑清晰、功能可用。
1. HAR 文件解析
什么是 HAR 文件?
HAR(HTTP Archive)是一种记录 HTTP 请求和响应的文件格式,通常由浏览器或抓包工具(如 Chrome DevTools、Fiddler)生成。HAR 文件包含接口请求的 URL、方法、Headers、Query 参数和 Body 等信息。
HAR 文件解析代码
以下是解析 HAR 文件的代码,提取请求的 URL、方法、头部信息、参数和请求体。
def parse_har(file_path):
"""
解析 HAR 文件,提取接口信息
"""
with open(file_path, 'r', encoding='utf-8') as f:
har_data = json.load(f)
interfaces = []
for entry in har_data.get("log", {
}).get("entries", []):
request = entry.get("request", {
})
interfaces.append({
"method": request.get("method"),
"url": request.get("url"),
"headers": {
header["name"]: header["value"] for header in request.get("headers", [])},
"params": {
param["name"]: param["value"] for param in request.get("queryString", [])},
"body": request.get("postData", {
}).get("text", None)
})
return interfaces
代码说明:
- 读取 HAR 文件:通过
json.load
加载 HAR 文件内容。 - 提取接口信息:从
entries
字段中获取请求的 URL、方法、Headers、Query 参数和 Body。 - 返回接口列表:以结构化的字典形式返回每个接口信息,方便后续处理。
2. Swagger 文档解析
什么是 Swagger 文档?
Swagger 文档是一种描述 RESTful API 的格式,通常以 JSON 或 YAML 形式编写,定义了接口的路径、方法、参数和响应等内容。
Swagger 文档解析代码
以下是解析 Swagger 文档的代码,提取接口路径、方法、参数和响应。
def parse_swagger(file_path):
"""
解析 Swagger 文档,提取接口信息
"""
with open(file_path, 'r', encoding='utf-8') as f:
if file_path.endswith('.yaml') or file_path.endswith('.yml'):
data = yaml.safe_load(f)
else:
data = json.load(f)
interfaces = []
paths = data.get("paths", {
})
for path, methods in paths.items():
for method, details in methods.items():
interfaces.append({
"method": method.upper(),
"url": path,
"params": details.get("parameters", []),
"response": details.get("responses", {
})
})
return interfaces
代码说明:
- 读取文档:根据文件扩展名选择
yaml.safe_load
或json.load
解析文档。 - 提取接口信息:从
paths
字段中获取接口路径、方法、参数和响应。 - 返回接口列表:结构化接口信息,便于后续操作。
3. Excel 文档解析
Excel 接口文档的常见格式
Excel 接口文档通常以表格形式记录接口信息,常见结构如下:
Method | URL | Headers | Params | Body |
---|---|---|---|---|
GET | /api/users | {“Authorization”: “token”} | {“id”: “1”} | |
POST | /api/users | {“Content-Type”: “json”} | {“name”: “Tom”} |
Excel 文件解析代码
以下是解析 Excel 文件的代码,提取接口信息。
def parse_excel(file_path):
"""
解析 Excel 文件,提取接口信息
"""
workbook = openpyxl.load_workbook(file_path)
sheet = workbook.active
interfaces = []
for row in sheet.iter_rows(min_row=2, values_only=True): # 假设第一行为表头
interfaces.append({
"method": row[0], # 第一列为方法
"url": row[1], # 第二列为 URL
"headers": json.loads(row[2]) if row[2] else {
}, # 第三列为 Headers
"params": json.loads(row[3]) if row[3] else {
}, # 第四列为 Params
"body": json.loads(row[4]