【工程实战】第十篇:性能监控集成 —— 自动化脚本的“副产品”:不仅仅是功能测试

专栏进度:10 / 10 (自动化实战专题 · 完结)

核心逻辑:利用 Pytest 的钩子函数(Hooks),在执行每一个功能测试用例时,同步记录接口响应耗时与服务器资源消耗。

一、 为什么要监控自动化脚本的"副产品"?

预警"性能退化":代码改动可能没产生 Bug,但产生了性能瓶颈。

定位"偶发超时":有些接口在特定数据组合下会变慢,功能测试能顺便捕捉到这些异常。

零成本性能基准:无需专门跑脚本,日常的回归测试就能沉淀出一套系统的性能趋势图。

二、 实战 1:接口响应时间监控(全自动埋点)

我们不需要修改任何测试用例,只需在 conftest.py 中利用 requests 的封装,将耗时数据写入 Allure 报告。

Python

python 复制代码
# common/request_util.py (增强版)
import time
import allure

class RequestUtil:
    def send_request(self, method, url, **kwargs):
        start_time = time.time()
        res = requests.request(method, url, **kwargs)
        end_time = time.time()
        
        # 计算耗时并计算毫秒
        duration = (end_time - start_time) * 1000
        
        # 自动将耗时数据塞进 Allure 报告的属性中
        allure.dynamic.parameter("Response Time (ms)", f"{duration:.2f}")
        
        # 如果响应超过阈值,标记一个警告
        if duration > 1000:
            print(f"⚠️ 预警:接口 {url} 响应过慢: {duration:.2f}ms")
            
        return res

三、 实战 2:服务器资源异步监控(侧信道采集)

在测试执行期间,我们可以启动一个异步线程,通过 psutil 库或调用 Prometheus 接口记录服务器状态。

Python

python 复制代码
# common/monitor_util.py
import psutil
import threading
import time

class ServerMonitor(threading.Thread):
    def __init__(self, interval=1):
        super().__init__()
        self.interval = interval
        self.stopped = False
        self.stats = []

    def run(self):
        while not self.stopped:
            cpu = psutil.cpu_percent()
            mem = psutil.virtual_memory().percent
            self.stats.append({"time": time.time(), "cpu": cpu, "mem": mem})
            time.sleep(self.interval)

    def stop(self):
        self.stopped = True
        return self.stats

# 在 conftest.py 中作为全局 Fixture 调用
@pytest.fixture(scope="session", autouse=True)
def monitor_server():
    monitor = ServerMonitor()
    monitor.start()
    yield
    stats = monitor.stop()
    # 结束后可以将统计图表附在 Allure 报告的总览页

四、 进阶:构建性能回归曲线

将每次 CI 运行后的平均响应时间存入数据库,你可以画出这样一张图:

X轴:构建版本号(Build #1, #2, #3...)

Y轴:核心链路平均响应时间

价值:如果看到曲线异常上扬,说明最近的 Commit 引入了性能缺陷。

五、 本专题总结:自动化框架的"完全体"

历经 10 篇实战,我们亲手搭建了一套具备以下能力的工厂级框架:

底层:Pytest 环境隔离与配置。

弹药:YAML 数据驱动与逻辑分离。

武器:Requests 接口封装与 Playwright UI 异步。

架构:POM 页面对象模式,实现极低维护成本。

防御:Mock 技术屏蔽外部干扰。

底线:SQL 数据库断言直击真相。

展示:Allure 深度定制的精美战报。

交付:Jenkins/GitLab CI 24小时无人值守流水线。

溢出价值:性能监控集成。

相关推荐
Buke..2 分钟前
【APP 逆向】哔哩哔哩 sign 参数逆向(下):OLLVM 混淆还原 sign 算法
java·javascript·爬虫·python·算法
JacksonMx4 分钟前
Java CompletableFuture 异步编程实战:从入门到架构师避坑指南
linux·数据库·python
W_3260036 分钟前
Python-OpenCV HSV颜色空间与inRange颜色分割:按颜色提取目标物体
图像处理·人工智能·python·opencv·机器学习
Buke..1 小时前
【APP 逆向】哔哩哔哩 sign 参数逆向(上):Frida 反调试绕过与 unidbg 调用
java·开发语言·爬虫·python·安卓
头发够用的程序员2 小时前
ImportError: libopenblas.so.0: cannot open shared object file 完整复盘与解决方案
python·ubuntu
梦痕长情2 小时前
记一次关于AI在数仓中的应用
开发语言·人工智能·python·ai
何以解忧,唯有..2 小时前
Python 线程编程:从入门到实战
开发语言·python
l1258652 小时前
# RAG上线评估指标体系:六大核心指标与压测实战全解析
数据库·人工智能·python·mysql·langchain·milvus
我命由我123452 小时前
人脸识别 - 人脸识别选帧
java·人工智能·python·算法·安全·java-ee·人脸识别