玩命加载中 . . .

pytest实时测试报告与监控系统


Pytest 实时测试报告与监控系统

🎯 项目概述

Pytest 实时测试报告与监控系统是一个基于 Flask + SocketIO 构建的高性能测试报告平台,提供实时的测试进度监控、详细的测试报告生成和跨环境配置管理功能。

设计理念

✨ 核心特性

1. 实时进度监控

  • 实时显示测试执行进度

  • 动态更新通过/失败统计

  • 实时日志流式输出

2. 多环境配置支持

  • 基于 YAML 的配置管理

  • 动态环境切换 (--env 参数)

  • 自动环境检测与回退

3. 详细的测试报告

  • HTML 格式测试报告

  • 测试用例详细日志

  • 执行时间统计

  • 失败原因分析

4. 高性能架构

  • 异步事件处理

  • 多线程/进程支持

  • 资源优化管理

🏗️ 系统架构

整体架构图

核心类关系图

数据流图

🔧 快速开始

环境要求

Python
Pytest
Flask
SocketIO
Eventlet 或 Gevent
flask_socketio

安装依赖

pip install -r requirements.txt

依赖架构图

基础使用

# 启动实时监控服务器
python run_server.py

# 运行测试并生成报告
pytest --live-report --env=dev

# 保持服务器运行
pytest --live-report --keep-server --env=qa

项目结构

project/
├── utils/
│   ├── custom_reporter.py    # 核心报告生成器
│   ├── report_server.py      # Web服务器
│   ├── get_server_ip.py      # 获取服务器当前IP V4地址
│   └── config_loader.py      # 配置加载器
├── templates/
│   ├── progress.html         # 实时监控页面
│   └── template.html         # 报告模板
├── config/
│   └── environment.yaml      # 环境配置文件
├── reports/
│   ├── automation.log        # 日志文件
│   ├── json                  # Allure报告原始数据
│   ├── final_state.json      # 用例执行结束后的最终上报UI数据
│   └── final_report.html     # 生成的报告
├── conftest.py               # Pytest配置
└── run_server.py             # 服务器启动脚本

📊 功能详解

1. 实时监控系统

监控界面组件

2. 配置管理系统

环境配置加载流程

3. 测试报告生成

报告生成流程

🎯 高级配置

环境配置文件示例

# config/environment.yaml
dev:
  base_url: "http://dev.api.example.com"
  api:
    endpoint: "http://dev.api.example.com/v1"
    timeout: 30
  database:
    host: "dev-db.example.com"
    port: 3306
    name: "app_dev"
  auth:
    token_url: "http://dev.api.example.com/auth"
    client_id: "dev_client"

qa:
  base_url: "http://qa.api.example.com"
  api:
    endpoint: "http://qa.api.example.com/v1" 
    timeout: 30
  database:
    host: "qa-db.example.com"
    port: 3306
    name: "app_qa"

prod:
  base_url: "https://api.example.com"
  api:
    endpoint: "https://api.example.com/v1"
    timeout: 60
  database:
    host: "prod-db.example.com"
    port: 3306
    name: "app_prod"

自定义报告模板

系统支持自定义 HTML 报告模板,主要模板变量:

<!-- 在 template.html 中 -->
<div class="environment-info">
    <h3>测试环境信息</h3>
    <table>
        <tr>
            <td>测试环境</td>
            <td>{{ base_config.current_env }}</td>
        </tr>
        <tr>
            <td>BaseURL</td>
            <td>{{ base_config.base_url }}</td>
        </tr>
        <tr>
            <td>测试账号</td>
            <td>{{ base_config.account }}</td>
        </tr>
        <tr>
            <td>执行人员</td>
            <td>{{ base_config.tester }}</td>
        </tr>
    </table>
</div>

🔍 技术深度

1. 事件驱动架构

事件处理机制

2. 并发处理模型

系统采用多线程 + 异步IO的混合并发模型:

# 并发架构示例
class HybridConcurrency:
    def __init__(self):
        # 主线程:Flask + SocketIO
        self.main_thread = threading.Thread(target=self.start_server)
        
        # 工作线程:进度广播
        self.broadcast_thread = threading.Thread(target=self.broadcast_worker)
        
        # 异步任务:日志推送
        self.async_tasks = []
    
    def start_server(self):
        # 使用 eventlet 实现异步IO
        eventlet.monkey_patch()
        self.socketio.run(self.app, async_mode='eventlet')

3. 内存管理优化

🚀 性能优化

1. WebSocket 连接管理

2. 数据序列化优化

系统采用高效的数据序列化策略:

class OptimizedSerializer:
    def serialize_progress(self, progress_data):
        """优化进度数据序列化"""
        return {
            't': progress_data.get('target', ''),
            'c': progress_data.get('completed', 0),
            'tt': progress_data.get('total', 0),
            'p': progress_data.get('percent', 0)
        }
    
    def serialize_log(self, log_entry):
        """优化日志序列化"""
        return f"{log_entry.timestamp}|{log_entry.level}|{log_entry.message}"

Pytest 实时测试报告与监控系统 - 让测试监控变得简单而强大! 🚀


文章作者: Gavin Wang
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Gavin Wang !
  目录