当前位置: 首页 > news >正文

Python自动化测试之线上流量回放:录制、打标、压测与平台选择

在自动化测试中,线上流量回放是一项关键技术,可以模拟真实用户的请求并重现线上场景,验证系统的性能和稳定性。本文将介绍Python自动化测试中的线上流量回放技术,并提供实战代码,帮助你了解流量的录制、打标、压测发起以及压测平台的选择。

一、录制流量

要进行线上流量回放,首先需要录制真实线上用户的请求。可以使用Python的代理工具,如Mitmproxy或Fiddler等,在代理环境中拦截并记录用户的请求数据。以下是一个示例代码:

  1. import mitmproxy

  2. import json

  3. class FlowRecorder:

  4. def __init__(self):

  5. self.traffic = []

  6. def request(self, flow):

  7. request_info = {

  8. "url": flow.request.url,

  9. "method": flow.request.method,

  10. "headers": dict(flow.request.headers),

  11. "body": flow.request.text,

  12. }

  13. self.traffic.append(request_info)

  14. def response(self, flow):

  15. pass

  16. def done(self):

  17. with open("traffic.log", "w") as file:

  18. file.write(json.dumps(self.traffic))

  19. addons = [

  20. FlowRecorder()

  21. ]

  22. if __name__ == "__main__":

  23. mitmproxy.options.Options(addons=addons).run()

通过运行以上代码,使用Mitmproxy录制线上流量,并将请求信息保存到traffic.log文件中。

二、流量打标

为了在流量回放中能够区分不同类型的请求,可以为每个请求打上相应的标记。可以使用Python代码对录制的流量进行处理,给每个请求添加一个标记字段。以下是一个示例代码:

  1. import json

  2. traffic_file = "traffic.log"

  3. with open(traffic_file, "r") as file:

  4. content = file.read()

  5. traffic_data = json.loads(content)

  6. for request in traffic_data:

  7. # 添加标记字段

  8. request["tag"] = "user_request"

  9. with open(traffic_file, "w") as file:

  10. file.write(json.dumps(traffic_data))

以上代码将录制的流量文件traffic.log读取后,给每个请求添加了一个名为"tag"的字段,并将处理后的数据重新保存到文件中。

三、压测流量

在流量回放前,需要对录制的流量进行压测处理,以模拟高并发场景。可以使用Python的压测工具,如Locust、Gatling等,对流量进行并发发送。以下是一个示例代码:

  1. from locust import HttpUser, task, between

  2. import json

  3. traffic_file = "traffic.log"

  4. class TrafficUser(HttpUser):

  5. wait_time = between(1, 2)

  6. @task

  7. def replay_traffic(self):

  8. with open(traffic_file, "r") as file:

  9. content = file.read()

  10. traffic_data = json.loads(content)

  11. for request in traffic_data:

  12. self.client.request(

  13. method=request["method"],

  14. url=request["url"],

  15. headers=request["headers"],

  16. data=request["body"],

  17. )

以上代码使用Locust库,定义了一个TrafficUser类,并在其中使用task装饰器定义了一个replay_traffic任务。在任务中,通过读取流量文件,将每个请求发送到目标系统。

四、压测发起与压测平台选择书单

压测可以通过多种方式进行,可以选择自建压测环境或使用云压测平台。自建压测环境可以使用Python的多线程或多进程技术,并结合压测工具进行并发请求。云压测平台则提供了可扩展的压测资源和报告分析功能,如LoadRunner、BlazeMeter等。根据实际需求和预算,选择合适的压测方式和平台。

总结

通过录制流量、打标、压测流量和选择合适的压测平台,我们可以进行Python自动化测试中的线上流量回放,验证系统的性能和稳定性。提供的实战代码和方法将帮助你快速上手流量回放,并根据需要进行定制化处理。

相关文章:

Python自动化测试之线上流量回放:录制、打标、压测与平台选择

在自动化测试中,线上流量回放是一项关键技术,可以模拟真实用户的请求并重现线上场景,验证系统的性能和稳定性。本文将介绍Python自动化测试中的线上流量回放技术,并提供实战代码,帮助你了解流量的录制、打标、压测发起…...

k-Means聚类算法 HNUST【数据分析技术】(2025)

1.理论知识 K-means算法,又称为k均值算法。K-means算法中的k表示的是聚类为k个簇,means代表取每一个聚类中数据值的均值作为该簇的中心,或者称为质心,即用每一个的类的质心对该簇进行描述。K-Means算法接受参数K;然后将…...

STM32学习之 按键/光敏电阻 控制 LED/蜂鸣器

STM32学习之 按键/光敏电阻 控制 LED/蜂鸣器 1、按键控制 LED 按键:常见的输入设备,按下导通,松手断开 按键抖动:由子按键内部使用的是机械式弹簧片来进行通断的、所以在按下和松手的瞬间会伴随有一连串的抖动 按键控制LED接线图: 要有工程…...

VUE前端实现防抖节流 Lodash

方法一:采用Lodash工具库 Lodash 是一个一致性、模块化、高性能的 JavaScript 实用工具库。 (1)采用终端导入Lodash库 $ npm i -g npm $ npm i --save lodash (2)应用 示例:搜索框输入防抖 在这个示例…...

Ubuntu20.04 交叉编译Qt5.15.15 for rk3588

rk3588编译Qt搞了我大半年了,一直困惑特别鸣谢:qq1033878279的网友远程帮我编译演示了一遍。 一、vmware 安装基础工具 sudo apt install -y build-essential net-tools openssh-server vim openssl libssl-dev 二、vmware 下载 cmake和Qt源码 下载cm…...

Unity编译Android apk包进度奇慢或gradle报错的解决方案

最近遇到Unity编译Android apk进度卡在"Calling IPostGenerateGradleAndroidProject callbacks"进度一直不变,如下图: 最后提示编译失败,类似错误如下: Picked up JAVA_TOOL_OPTIONS: -Dfile.encodingUTF-8FAILURE: Bu…...

【Qt】多元素控件:QListWidget、QTableWidget、QTreeWidget

目录 QListWidget 核心属性: 核心方法: 核心信号: 例子: QListWidgetItem QTableWidget 核心方法: 核心信号 QTableWidgetItem 例子: QTreeWidget 核心方法: 核心信号&#xff1a…...

Docker基础知识 Docker命令、镜像、容器、数据卷、自定义镜像、使用Docker部署Java应用、部署前端代码、DockerCompose一键部署

目录 1.Docker 2.镜像和容器 2.1 定义 2.2 开机自动启动容器 3.docker命令 3.1 docker run 参数说明 3.2 常见命令 3.3 命令演示 3.4 命令别名 4.Docker命令详解 5.数据卷 5.1 定义 5.2 数据卷的相关命令 5.3 数据卷命令 5.4 挂载本地目录或文件 5.4.1 定义 5.4.2 mysql容器目录…...

Qt For Android之环境搭建(Qt 5.12.11 Qt下载SDK的处理方案)

文章目录 一、Qt For Android运行示例二、个人理解及情况解析三、配置Android相关配置项3.1 安装简述3.2 安装Qt1.安装Qt第一步:启动Qt安装包程序2.Qt账号(注册)登录3.了解Qt开源使用义务4.指定Qt安装目录5.选择Qt安装内容6.接受“许可协议”…...

低代码开发中 DDD 领域驱动的页面权限控制

在低代码开发的领域中,应用安全与灵活性是两大关键考量因素。领域驱动设计(DDD)作为一种在软件设计领域广泛应用且颇具影响力的方法论,正逐渐在低代码开发的页面权限控制方面展现出其独特的价值与潜力。本文旨在客观地探讨如何借助…...

如果你的网站是h5网站,如何将h5网站变成小程序-除开完整重做方法如何快速h5转小程序-h5网站转小程序的办法-优雅草央千澈

如果你的网站是h5网站,如何将h5网站变成小程序-除开完整重做方法如何快速h5转小程序-h5网站转小程序的办法-优雅草央千澈 h5如何转小程序 如果当年你们开发网站是用的h5但是没有开发小程序,也没有使用uniapp这样的混开框架,但是目前根据业务需…...

docker redis安装

一.镜像拉取 docker pull redis:5.0新建文件 touch /home/redis/redis.conf touch /home/redis/redis_6379.pid # bind 192.168.1.100 10.0.0.1 # bind 127.0.0.1 ::1 #bind 127.0.0.1protected-mode noport 6379tcp-backlog 511requirepass roottimeout 0tcp-keepali…...

apisix的hmac-auth认证

目录 1、apisix的hmac认证Authorization头信息 2、signature的lua生成源码 3、java生成签证的简单示例 4、postman调用如下 apisix的hmac-auth认证,介绍可以看官方文档 hmac-auth | Apache APISIX -- Cloud-Native API Gateway 照着官方文档,发现生…...

elementPlus消息组件多按钮案例

let customClass zsl-el-message-box efb.messageBox({title: 操作提示,showConfirmButton: false,customClass,message: efb.VNode(div, null, [efb.VNode(style, null, .${customClass} .el-message-box__message {width: 100%;}),efb.VNode(div, null, hello world),efb.VN…...

计算机视觉目标检测-2

文章目录 摘要abstract1.Fast R-CNN1.1 RoI pooling1.2 End-to -End model1.3 多任务损失-Multi-task loss1.4 R-CNN、SPPNet、Fast R-CNN效果比对 2.Faster R-CNN2.1 RPN原理2.2 效果对比2.3 Faster R-CNN总结 3.总结4.参考文献 摘要 本周学习了Fast R-CNN和Faster R-CNN算法…...

爬虫数据存储:Redis、MySQL 与 MongoDB 的对比与实践

爬虫的核心任务是从网络中提取数据,而存储这些数据是流程中不可或缺的一环。根据业务需求的不同,存储的选择可能直接影响数据处理的效率和开发体验。本文将介绍三种常用的存储工具——Redis、MySQL 和 MongoDB,分析它们的特点,并提…...

深入解析MySQL索引结构:从数组到B+树的演变与优化

前言: 在数据库查询中,索引是一种关键的性能优化工具。然而,索引的失效可能导致查询效率大幅下降。为了更好地理解索引的工作原理及规避其失效,深入了解索引结构的演变过程尤为重要。 MySQL 的索引数据结构从简单到复杂&#xff0…...

【疑难杂症】 HarmonyOS NEXT中Axios库的响应拦截器无法拦截424状态码怎么办?

今天在开发一个HarmonyOS NEXT的应用的时候,发现http接口如果返回的状态码是424时,我在axios中定义的拦截器失效了。直接走到了业务调用的catch中。 问题表现: 我的拦截器代码如下: 解决办法: 先说解决办法&#xff…...

jmeter并发用户逐步递增压测找性能拐点

jmeter并发用户逐步递增压测找性能拐点 目的: 使用逐层递增的并发压力进行测试,找到单功能的性能拐点(一般需要包含四组测试结果,拐点前一组,拐点一组,拐点后两组),统计响应时间、…...

【PostgreSQL使用】最新功能逻辑复制槽的failover,大数据下高可用再添利器

逻辑复制的failover ​专栏内容: postgresql入门到进阶手写数据库toadb并发编程 个人主页:我的主页 管理社区:开源数据库 座右铭:天行健,君子以自强不息;地势坤,君子以厚德载物. ✅ &#x1f52…...

Spring AI Alibaba vs. AgentScope:两个阿里AI框架,如何选择?

Spring AI Alibaba vs. AgentScope:两个阿里AI框架,如何选择?发布日期:2026年4月9日前言 最近技术圈中,阿里巴巴开源的 Spring AI Alibaba 和 AgentScope 引发广泛讨论。两者同为阿里出品,但设计哲学和应用…...

Snap.Hutao:5分钟掌握原神玩家必备的终极桌面工具箱

Snap.Hutao:5分钟掌握原神玩家必备的终极桌面工具箱 【免费下载链接】Snap.Hutao 实用的开源多功能原神工具箱 🧰 / Multifunctional Open-Source Genshin Impact Toolkit 🧰 项目地址: https://gitcode.com/GitHub_Trending/sn/Snap.Hutao…...

国产最强开源模型 GLM-5.1 来了!Ollama 一键部署,开启 8 小时自主 AI 工作

引言 GLM-5.1的开源,确实是近期AI圈的一则重磅消息。为了让内容更充实,我将上一版的介绍与GLM-5的详细对比融合在了一起,这样能更清晰地看到它的进化。 一图看懂:GLM-5 vs. GLM-5.1 为了让你直观感受GLM-5.1的进化幅度&#xff…...

Skill vs App:一场入口范式的争夺

田晏林 发自 凹非寺量子位 | 公众号 QbitAI中关村科学城国际创新服务集聚区的会议室,座无虚席。原定2点开始的沙龙活动,不少观众提前一个小时就到场。他们大多是从业多年的产品经理、创业者,也有大学生和刚入行的年轻人。OpenClaw带来的连锁反…...

家庭NAS搭建避坑指南:从硬件选购到TrueNAS配置的全流程心得

家庭NAS搭建实战:从零避坑到高效配置的全方位指南 为什么你需要一台家庭NAS? 记得三年前那次硬盘突然崩溃的经历吗?我丢失了孩子出生以来的所有照片和视频,那种懊悔至今难忘。正是这次教训让我意识到,家庭数据存储不能…...

STM32F103C8T6实战:I2C驱动STP23L测距传感器与OLED显示优化

1. 项目背景与硬件选型 第一次接触STM32F103C8T6驱动STP23L测距传感器时,我完全没料到这个蓝色小模块会成为后续多个项目的核心组件。STP23L是一款基于TOF(飞行时间)原理的激光测距传感器,测量范围0.1-3米,精度可达1m…...

RTX 4090用户必看:Anything to RealCharacters 2.5D转真人引擎显存监控指南

RTX 4090用户必看:Anything to RealCharacters 2.5D转真人引擎显存监控指南 1. 为什么RTX 4090用户需要关注显存管理 当你在RTX 4090上运行Anything to RealCharacters引擎时,24GB的显存看似充裕,但在处理高分辨率图像转换时仍然可能面临挑…...

蒲公英R300A 4G路由器实战:工业PLC远程监控全流程解析

1. 工业场景下的远程监控挑战 在工业自动化领域,PLC(可编程逻辑控制器)就像工厂的"大脑",24小时不间断地控制着生产线运转。但传统PLC监控有个痛点:工程师必须亲临现场才能调试设备,遇到半夜设备…...

从原理到实践:深入理解react-native-fetch-blob的底层架构设计

从原理到实践:深入理解react-native-fetch-blob的底层架构设计 【免费下载链接】react-native-fetch-blob A project committed to making file access and data transfer easier, efficient for React Native developers. 项目地址: https://gitcode.com/gh_mirr…...

goqu性能优化实战:10个提升查询效率的关键技巧

goqu性能优化实战:10个提升查询效率的关键技巧 【免费下载链接】goqu SQL builder and query library for golang 项目地址: https://gitcode.com/gh_mirrors/go/goqu goqu是一款强大的Golang SQL构建和查询库,能够帮助开发者高效地构建和执行SQL…...