MeterSphere测试报告数据接口:Python调用示例
一、接口调用前置准备
1.1 接口认证机制
MeterSphere采用Token认证机制,所有API请求需在HTTP头部携带认证令牌。认证流程如下:
1.2 环境依赖
# 安装必要依赖包
pip install requests python-dotenv
1.3 配置文件准备
创建.env配置文件存储敏感信息:
# .env文件内容
METASPHERE_URL=http://your-ms-server:8081
USERNAME=admin
PASSWORD=Password123!
二、核心API接口详解
2.1 认证接口
- 请求URL:
/api/user/login - 请求方法: POST
- 请求体:
{ "username": "admin", "password": "Password123!", "authenticate": "LOCAL" } - 响应体:
{ "success": true, "data": { "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...", "expireTime": 1694567890000, "user": { "id": "1", "name": "系统管理员" } } }
2.2 测试报告详情接口
- 请求URL:
/test-plan/report/get/{reportId} - 请求方法: GET
- 请求头:
Authorization: Bearer {token} - 路径参数:
reportId- 报告唯一标识 - 响应体: 包含测试结果统计、用例执行详情、错误截图链接等完整报告数据
三、Python调用完整示例
3.1 认证模块实现
import os
import requests
from dotenv import load_dotenv
# 加载环境变量
load_dotenv()
MS_URL = os.getenv("METASPHERE_URL")
USERNAME = os.getenv("USERNAME")
PASSWORD = os.getenv("PASSWORD")
class MeterSphereClient:
def __init__(self):
self.base_url = MS_URL
self.token = None
self.headers = {
"Content-Type": "application/json",
"Accept": "application/json"
}
def login(self):
"""获取认证Token"""
login_url = f"{self.base_url}/api/user/login"
payload = {
"username": USERNAME,
"password": PASSWORD,
"authenticate": "LOCAL"
}
try:
response = requests.post(login_url, json=payload, headers=self.headers)
response.raise_for_status()
result = response.json()
if result.get("success"):
self.token = result["data"]["token"]
self.headers["Authorization"] = f"Bearer {self.token}"
return True
else:
print(f"登录失败: {result.get('message')}")
return False
except Exception as e:
print(f"认证请求异常: {str(e)}")
return False
3.2 报告数据获取实现
def get_test_report(self, report_id):
"""获取测试报告详情"""
if not self.token:
print("请先进行认证")
return None
report_url = f"{self.base_url}/test-plan/report/get/{report_id}"
try:
response = requests.get(report_url, headers=self.headers)
response.raise_for_status()
return response.json()
except requests.exceptions.HTTPError as e:
if response.status_code == 401:
print("Token已过期,尝试重新认证...")
if self.login():
return self.get_test_report(report_id)
print(f"报告获取失败: {str(e)}")
return None
except Exception as e:
print(f"请求异常: {str(e)}")
return None
3.3 完整调用示例
if __name__ == "__main__":
# 初始化客户端
ms_client = MeterSphereClient()
# 执行认证
if ms_client.login():
print("认证成功,开始获取报告数据...")
# 获取指定报告
report_id = "12345678-1234-5678-1234-567812345678"
report_data = ms_client.get_test_report(report_id)
if report_data and report_data.get("success"):
# 提取关键指标
report_info = report_data["data"]
print("\n===== 测试报告摘要 =====")
print(f"报告名称: {report_info['name']}")
print(f"测试计划: {report_info['testPlanName']}")
print(f"执行时间: {report_info['createTime']}")
print(f"用例总数: {report_info['totalCase']}")
print(f"通过数: {report_info['passCase']}")
print(f"失败数: {report_info['failCase']}")
print(f"通过率: {report_info['passRate']}%")
# 保存完整报告数据
with open(f"report_{report_id}.json", "w", encoding="utf-8") as f:
import json
json.dump(report_data, f, indent=2, ensure_ascii=False)
print(f"\n报告数据已保存至 report_{report_id}.json")
四、高级应用场景
4.1 批量报告数据处理
def batch_export_reports(report_ids, output_dir="reports"):
"""批量导出多个报告"""
os.makedirs(output_dir, exist_ok=True)
ms_client = MeterSphereClient()
if ms_client.login():
for report_id in report_ids:
print(f"正在处理报告: {report_id}")
report_data = ms_client.get_test_report(report_id)
if report_data and report_data.get("success"):
filename = f"{output_dir}/report_{report_id}.json"
with open(filename, "w", encoding="utf-8") as f:
import json
json.dump(report_data, f, indent=2, ensure_ascii=False)
print(f"已保存: {filename}")
else:
print(f"报告 {report_id} 获取失败")
# 使用示例
# batch_export_reports(["id1", "id2", "id3"])
4.2 测试结果可视化
import matplotlib.pyplot as plt
import pandas as pd
def visualize_report(report_data):
"""可视化测试报告数据"""
if not report_data or not report_data.get("success"):
print("无效的报告数据")
return
data = report_data["data"]
# 创建测试结果饼图
labels = ['通过', '失败', '跳过', '阻塞']
sizes = [
data.get('passCase', 0),
data.get('failCase', 0),
data.get('skipCase', 0),
data.get('blockCase', 0)
]
colors = ['#4CAF50', '#F44336', '#FFC107', '#9E9E9E']
plt.figure(figsize=(10, 6))
plt.pie(sizes, labels=labels, colors=colors, autopct='%1.1f%%', startangle=90)
plt.title(f'Test Report: {data.get("name", "Unnamed Report")}')
plt.axis('equal')
plt.savefig('report_chart.png', dpi=300)
print("测试结果图表已生成: report_chart.png")
五、常见问题处理
5.1 认证失败解决方案
| 错误现象 | 可能原因 | 解决方法 |
|---|---|---|
| 401 Unauthorized | Token过期或无效 | 重新执行login获取新Token |
| 403 Forbidden | 用户无报告查看权限 | 联系管理员分配权限 |
| 连接超时 | 服务器地址或端口错误 | 检查METASPHERE_URL配置 |
5.2 报告数据异常处理
def validate_report_data(report_data):
"""验证报告数据完整性"""
required_fields = ["name", "totalCase", "passCase", "failCase", "createTime"]
if not report_data or not report_data.get("success"):
return False, "报告数据请求失败"
data = report_data["data"]
for field in required_fields:
if field not in data:
return False, f"报告缺少必要字段: {field}"
return True, "数据验证通过"
六、接口扩展应用
6.1 报告数据API调用流程
6.2 企业级应用建议
-
Token管理优化
- 实现Token自动刷新机制
- 设置合理的缓存过期策略
-
批量数据处理
# 使用线程池并发获取报告 from concurrent.futures import ThreadPoolExecutor def batch_get_reports(report_ids, max_workers=5): with ThreadPoolExecutor(max_workers=max_workers) as executor: executor.map(ms_client.get_test_report, report_ids) -
数据安全增强
- 敏感信息加密存储
- 实现API请求日志审计
七、总结与扩展
本文详细介绍了MeterSphere测试报告数据接口的Python调用方法,包括认证机制、核心接口实现和高级应用场景。通过这些示例代码,测试工程师可以快速集成测试报告数据到CI/CD流程或测试管理系统中,实现测试结果的自动化分析与展示。
扩展学习建议
- 探索MeterSphere完整API文档,实现报告生成、导出等更多功能
- 结合Jenkins等CI工具,构建自动化测试报告流水线
- 开发自定义报告模板,满足特定项目的测试结果展示需求
若有任何问题或建议,请访问MeterSphere官方仓库获取帮助:https://gitcode.com/gh_mirrors/me/metersphere
===== 操作提示 ===== 收藏本文档,关注后续《MeterSphere测试数据批量导出工具开发指南》
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



