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

专栏进度: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小时无人值守流水线。

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

相关推荐
噗噗121 分钟前
从零到一:如何通过 QiweAPI 快速实现企业微信自动化集成
运维·自动化·企业微信
dFObBIMmai2 分钟前
JavaScript中对象生命周期与垃圾回收的引用关系
jvm·数据库·python
2401_824697662 分钟前
Go语言怎么格式化时间_Go语言time.Format教程【详解】
jvm·数据库·python
2303_821287383 分钟前
HTML函数在低背光键盘上编写困难吗_输入设备舒适度说明【介绍】
jvm·数据库·python
2301_783848654 分钟前
防范SQL注入的SQL编码规范_禁用动态拼接字符串语句
jvm·数据库·python
weixin_444012935 分钟前
Angular 表单中基于下拉选择动态启用字段必填校验的完整实现
jvm·数据库·python
zjy277776 分钟前
CSS解决浮动元素导致的布局闪烁_稳定容器布局高度
jvm·数据库·python
2501_901006476 分钟前
MySQL主从复制过程中怎么增加从库_利用mysqldump快速扩容从库
jvm·数据库·python
Jackzaker6 分钟前
Prompt工程在代码中的实现
人工智能·python·prompt
曲幽7 分钟前
让FastAPI Agent真正记住你:聊聊会话记忆与持久化存储的落地实践
redis·python·postgresql·fastapi·web·chat·async·session·ai agent