MeterSphere测试报告数据接口:Python调用示例

MeterSphere测试报告数据接口:Python调用示例

【免费下载链接】metersphere MeterSphere 一站式开源持续测试平台,为软件质量保驾护航。搞测试,就选 MeterSphere! 【免费下载链接】metersphere 项目地址: https://gitcode.com/gh_mirrors/me/metersphere

一、接口调用前置准备

1.1 接口认证机制

MeterSphere采用Token认证机制,所有API请求需在HTTP头部携带认证令牌。认证流程如下:

mermaid

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 UnauthorizedToken过期或无效重新执行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调用流程

mermaid

6.2 企业级应用建议

  1. Token管理优化

    • 实现Token自动刷新机制
    • 设置合理的缓存过期策略
  2. 批量数据处理

    # 使用线程池并发获取报告
    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)
    
  3. 数据安全增强

    • 敏感信息加密存储
    • 实现API请求日志审计

七、总结与扩展

本文详细介绍了MeterSphere测试报告数据接口的Python调用方法,包括认证机制、核心接口实现和高级应用场景。通过这些示例代码,测试工程师可以快速集成测试报告数据到CI/CD流程或测试管理系统中,实现测试结果的自动化分析与展示。

扩展学习建议

  • 探索MeterSphere完整API文档,实现报告生成、导出等更多功能
  • 结合Jenkins等CI工具,构建自动化测试报告流水线
  • 开发自定义报告模板,满足特定项目的测试结果展示需求

若有任何问题或建议,请访问MeterSphere官方仓库获取帮助:https://gitcode.com/gh_mirrors/me/metersphere

===== 操作提示 ===== 收藏本文档,关注后续《MeterSphere测试数据批量导出工具开发指南》

【免费下载链接】metersphere MeterSphere 一站式开源持续测试平台,为软件质量保驾护航。搞测试,就选 MeterSphere! 【免费下载链接】metersphere 项目地址: https://gitcode.com/gh_mirrors/me/metersphere

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值