如何使用Appium+Python为多测试组合生成专业测试报告
基于Appium+Python测试体系的单测试组合报告生成方案
报告核心字段规范
每个测试组合的报告至少需包含以下可追溯字段:
- 测试组合唯一ID:可使用「时间戳+组合特征哈希值」生成,方便后续定位回溯
- 组合参数明细:覆盖你遍历的所有维度参数,包括文件后缀名、文件大小、文件来源(本地/相册/云盘)、应用选中状态等,直接从已存储的CSV/JSON数据中读取映射即可
- 预置条件:测试前的应用状态、设备存储状态、权限配置信息
- 执行步骤:与当前组合对应的操作路径,可提前编写通用模板,替换参数即可复用
- 预期结果:对应组合的官方要求处理逻辑,例如支持的格式应跳转预览,不支持的格式弹出合规提示
- 实际结果:测试时抓取的接口返回值、UI状态、报错日志、Appium截图存储路径
- 测试结论:通过/未通过/阻塞,异常情况需标注缺陷等级
- 附加信息:测试时间、设备型号、系统版本、被测App版本号
实现逻辑(可直接复用的Python代码)
你已经完成了测试组合遍历和结果存储,只需基于现有CSV数据填充报告模板即可,无需额外采集数据:
步骤1:读取已存储的测试结果数据
import csv import json from string import Template from datetime import datetime # 读取你导出的测试结果CSV test_cases = [] with open("test_result.csv", "r", encoding="utf-8") as f: reader = csv.DictReader(f) for row in reader: # 转换CSV中存储的JSON格式组合参数为字典 row["combination_params"] = json.loads(row["combination_params"]) test_cases.append(row)
步骤2:定义通用报告模板
# 可根据业务需求自行增减字段 REPORT_TPL = Template(""" # 测试组合报告 编号:$case_id ## 基础信息 - 测试时间:$test_time - 设备信息:$device_model | 系统版本 $os_version | App版本 $app_version - 测试结论:$test_result ## 组合参数明细 $combination_table ## 测试执行记录 - 预置条件:应用已授予存储权限,对应测试文件已预置到设备指定路径 - 执行步骤:1. 进入文件选择模块 2. 选择对应来源路径 3. 选中目标测试文件 4. 提交选择 - 预期结果:$expect_result - 实际结果:$actual_result $error_log_part $screen_shot_note """)
步骤3:批量生成单组合报告
for case in test_cases: # 转换组合参数为易读格式 combination_table = "\n".join([f"- {k}: {v}" for k,v in case["combination_params"].items()]) # 动态填充异常信息 error_log_part = f"> 错误日志:\n> {case['error_log']}" if case.get("error_log") else "" screen_shot_note = f"- 截图路径:{case['screen_shot_path']}" if case.get("screen_shot_path") else "" # 填充模板生成报告内容 report_content = REPORT_TPL.substitute( case_id = case["case_id"], test_time = datetime.fromtimestamp(int(case["test_ts"])).strftime("%Y-%m-%d %H:%M:%S"), device_model = case["device_model"], os_version = case["os_version"], app_version = case["app_version"], test_result = case["test_result"], combination_table = combination_table, expect_result = case["expect_result"], actual_result = case["actual_result"], error_log_part = error_log_part, screen_shot_note = screen_shot_note ) # 保存单组合Markdown格式报告 with open(f"./reports/case_{case['case_id']}.md", "w", encoding="utf-8") as f: f.write(report_content)
可选优化方向
- 所有异常案例自动关联对应Appium运行时抓取的日志、截图、元素树文件,降低问题排查成本
- 额外生成总览报告,统计所有组合的通过率、各文件类型的失败率、异常分布情况
- 未通过用例可直接生成缺陷单填充内容,减少提BUG的重复工作量
内容的提问来源于stack exchange,提问作者avishak chakroborty
相关产品推荐
相关产品推荐

