性能测试|基于JMeter 完成典型电商场景(首页浏览)的性能压测

简介: 性能测试|基于JMeter 完成典型电商场景(首页浏览)的性能压测

1.1 场景预设

之前的测试中单独抽离出了一个注册登录的场景,而实际的电商场景中,绝大多数都是已经登录并保持登录状态的,用户的登录信息可能被保存在浏览器的 cookie 中或在 App 的 localstorage 中,更多的是拿到现有的 cookie 去做验证;

因此这里在默认用户登录状态下抽离出一个典型的电商场景,浏览首页-添加商品-下单结算,涉及到的接口如下:

1)浏览首页

在这里插入图片描述

2)增加浏览记录(自动触发)

在这里插入图片描述

3)添加商品/购物车

在这里插入图片描述

4)下订单/结算

在这里插入图片描述

1.2 Token 数据准备

在此次演示场景中,是获取 token 值带入 header 中的 Authorization 以完成用户身份的验证,借用之前创建的注册登录脚本,获取到了很多用户 token 值保存在了本地以供测试使用:
在这里插入图片描述

2. 脚本编写

在这里插入图片描述
在这里插入图片描述

2.1 浏览首页

2.1 浏览首页

1)设置请求头的全局变量——HTTP Header Manager

由于每个请求都需要在 header 中带入 token ,所以我们借用 HTTP Header Manager 来完成一个全局变量的设定。

在这里插入图片描述

在这里插入图片描述

2)token数据的参数化获取——CSV Data set Config
利用 CSV Data set Config,获取提前在 TokenFile 准备好的 token 值,传给变量 ${auth}。
在这里插入图片描述

3)事务抽离——Transaction Controller
根据场景,我们可将不同的事务进行抽离合并,以方便我们后续的数据查看,这里可以事务控制器 Transaction Controller 将首页的事务单独抽离在一起。
在这里插入图片描述
在这里插入图片描述

4)控制首页接口比例——Loop Controller
首页中有很多商品分类,这里假设访问一次首页后会访问两次商品分类列表,那么利用 Loop Controller 来控制在它里面的商品分类列表请求 /home/productCateList/{parentId} 会被请求两次:
在这里插入图片描述
在这里插入图片描述

5)这里可以看到商品分类接口需要传入参数 parentId:
在这里插入图片描述

通常不太建议在压测脚本中使用 同一个 id 去访问,一来是容易命中缓存,即使没有 Redis 缓存, MySQL 对于同样的请求也会有加载上的优化,这样就会对测试数据与真实场景造成误差。因此这里我们还是选择提前将分类 id 获取,通过 CSV Data set Config 传入。

查看数据库,不同的分级有多种分类信息
在这里插入图片描述
去重后获取所有的 parent_id
在这里插入图片描述
将parentId保存文件中并设置CSV:

$ cat parentId_Data
0
1
12
2
3
4
5

在这里插入图片描述
在这里插入图片描述

tp=webp&wxfrom=5&wx_lazy=1&wx_co=1)

6)获取推荐商品设定和首页的访问量一致:

在这里插入图片描述

7)控制首页分类专题接口比例——if Controller

这里我们设定的场景为访问专题的用户量为主页的一半,那么利用 if Controller 写方法定义,使请求数量不能被2整数的时候再执行请求,这样就可以保证请求数减半,具体如下:

在这里插入图片描述

在这里插入图片描述

关于/home/subjectList利用 CSV Data set Config 做参数化的方式和上述分类信息接口一致,这里就不再赘述:

在这里插入图片描述

关于 if Controller 中函数的说明

上述的函数生成可以利用JMeter自带的函数助手( Tools->Function Helper Dialog )中的 __jexl3 函数或 __groovy 函数,对判断条件的表达式进行求值计算,生成对应的求值运算函数,然后将此运算函数复制到 If ControllerExpression 输入框中即可:

例如本例中我们需要先获取用户请求的数量,可以先在 Function Helper 中选中 __counter ,设置为true,点击 Generate & Copy to clipbord 生成函数式

在这里插入图片描述

复制函数式,再次选中 __jexl3 ,然后设置生成counter不能整数2时的函数式:

在这里插入图片描述

3. 实操演示

脚本的首页部分已经完成,各个接口的比例按照2:4:2:1的比例安排,然后实际运行检验一下效果
在这里插入图片描述

先起10个线程运行一次验证脚本的正确性:
从结果可以看到接口都请求成功并且按照了2:4:2:1的比例

在这里插入图片描述

如果持续压测,也可以在 Grafana 中看到测试数据的显示:

在这里插入图片描述

以上,后面将继续完成下单支付场景的测试。

相关实践学习
通过性能测试PTS对云服务器ECS进行规格选择与性能压测
本文为您介绍如何利用性能测试PTS对云服务器ECS进行规格选择与性能压测。
相关文章
|
15天前
|
Java 测试技术 容器
Jmeter工具使用:HTTP接口性能测试实战
希望这篇文章能够帮助你初步理解如何使用JMeter进行HTTP接口性能测试,有兴趣的话,你可以研究更多关于JMeter的内容。记住,只有理解并掌握了这些工具,你才能充分利用它们发挥其应有的价值。+
201 23
|
2月前
|
数据可视化 测试技术 API
JMeter、Apipost 与 Postman 的 API 测试对比:为什么 APIPost 是更聪明的选择
API测试如同筹备一场晚宴,选对工具至关重要。JMeter功能强大但上手难,适合专业用户;Postman简单易用,但在复杂场景和团队协作中表现有限;而Apipost则是一款智能高效的“厨房神器”。它性能测试轻松、结果清晰、学习门槛低,并且能一键集成CI/CD流程。对于追求效率与便捷的团队而言,Apipost无疑是更优选择,让API测试如同五星大厨烹饪般丝滑流畅。
|
8月前
|
测试技术 持续交付 Apache
Python性能测试新风尚:JMeter遇上Locust,性能分析不再难🧐
【10月更文挑战第1天】Python性能测试新风尚:JMeter遇上Locust,性能分析不再难🧐
296 3
|
5月前
|
缓存 网络协议
Jmeter如何对UDP协议进行测试?
`jmeter-plugins`是JMeter的插件管理器,用于管理和组织所有插件。访问[官网](https://jmeter-plugins.org/install/Install/)下载并放置于`lib/ext`目录下,重启JMeter后可在“选项”中看到插件管理器。
106 1
Jmeter如何对UDP协议进行测试?
|
7月前
|
并行计算 算法 测试技术
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面,旨在通过综合策略提升程序性能,满足实际需求。
177 1
|
7月前
|
缓存 监控 测试技术
全网最全压测指南!教你如何测试和优化系统极限性能
大家好,我是小米。本文将介绍如何在实际项目中进行性能压测和优化,包括单台服务器和集群压测、使用JMeter、监控CPU和内存使用率、优化Tomcat和数据库配置等方面的内容,帮助你在高并发场景下提升系统性能。希望这些实战经验能助你一臂之力!
412 3
|
7月前
|
测试技术 持续交付 Apache
Python性能测试新风尚:JMeter遇上Locust,性能分析不再难🧐
Python性能测试新风尚:JMeter遇上Locust,性能分析不再难🧐
292 3
|
7月前
|
缓存 测试技术 Apache
告别卡顿!Python性能测试实战教程,JMeter&Locust带你秒懂性能优化💡
告别卡顿!Python性能测试实战教程,JMeter&Locust带你秒懂性能优化💡
189 1
|
9月前
|
缓存 Java 测试技术
谷粒商城笔记+踩坑(11)——性能压测和调优,JMeter压力测试+jvisualvm监控性能+资源动静分离+修改堆内存
使用JMeter对项目各个接口进行压力测试,并对前端进行动静分离优化,优化三级分类查询接口的性能
272 10
谷粒商城笔记+踩坑(11)——性能压测和调优,JMeter压力测试+jvisualvm监控性能+资源动静分离+修改堆内存
|
8月前
|
缓存 测试技术 Apache
告别卡顿!Python性能测试实战教程,JMeter&Locust带你秒懂性能优化💡
【10月更文挑战第1天】告别卡顿!Python性能测试实战教程,JMeter&Locust带你秒懂性能优化💡
202 4