专栏进度: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小时无人值守流水线。
溢出价值:性能监控集成。