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

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

时间:2023-01-12 18:38:44浏览次数:39  
标签:场景 请求 压测 性能 接口 Controller 首页 电商 函数

1.1 场景预设

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

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

1)浏览首页

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

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

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

3)添加商品/购物车

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

4)下订单/结算

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

1.2 Token 数据准备

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

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

2. 脚本编写

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


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

2.1 浏览首页

2.1 浏览首页

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

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

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

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

2)token数据的参数化获取——CSV Data set Config

利用 CSV Data set Config,获取提前在 TokenFile 准备好的 token 值,传给变量 ${auth}。

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

3)事务抽离——Transaction Controller

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

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


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

4)控制首页接口比例——Loop Controller

首页中有很多商品分类,这里假设访问一次首页后会访问两次商品分类列表,那么利用 Loop Controller 来控制在它里面的商品分类列表请求 /home/productCateList/{parentId} 会被请求两次:

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


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

5)这里可以看到商品分类接口需要传入参数 parentId:

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

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

查看数据库,不同的分级有多种分类信息

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


去重后获取所有的 ​​parent_id​​ :

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


将parentId保存文件中并设置CSV:

$ cat parentId_Data
0
1
12
2
3
4
5

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


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

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

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

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

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

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

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

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

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

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

关于 if Controller​ 中函数的说明

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

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

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

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

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

3. 实操演示

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

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

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

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

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

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

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

标签:场景,请求,压测,性能,接口,Controller,首页,电商,函数
From: https://blog.51cto.com/u_15640304/6004559

相关文章

  • 性能测试|电商业务性能测试(二): Jmeter 参数化功能实现注册登录的数据驱动
    1.前置条件此例使用的是GitHub上一个开源的电商项目mall,需要的可以去GitHub上下载部署,有详细的部署教程:GitHub地址:​​https://github.com/macrozheng/mall​​部署教......
  • 性能测试|JMeter逻辑控制器(四)
    Jmeter逻辑控制器之循环控制器这篇文章介绍下循环控制器的使用。认识循环控制器按照之前的文章步骤,我们新建一个循环控制器,用于介绍循环控制器如下图:新增一个循环控制器......
  • 性能测试|JMeter逻辑控制器(五)
    Jmeter逻辑控制器之交替控制器快过年了,最近工作不是特别忙,最近自己在学习JMeter,并把学习过程分享到博客中,今天呢,学习交替控制器。认识交替控制器老规矩,先来认识一下交替......
  • 性能测试|JMeter逻辑控制器(六)
    Jmeter逻辑控制器之WhileControllerwhilecontroller用于控制采样器循环执行,直到条件为false时,退出循环认识WhileController保留项目,认识whilecontroller,我们就先创......
  • 性能测试|JMeter上传下载文件
    日常工作中,我们难免会遇到有些接口是要上传文件的,比如修改头像、上传证件,上传文档等等情况。### 抓取接口抓取接口的工具有很多,我们可以使用浏览器自带的开发者工具,也可以......
  • 性能测试|JMeter逻辑控制器(七)
    Jmeter逻辑控制器之IncludeController认识IncludeControllerIncludeController:译为包含控制器,用来添加TestFragment(测试片段)。具体是什么意思呢,我们先来了解下Te......
  • 性能测试|JMeter逻辑控制器(八)
    Jmeter逻辑控制器之RuntimeControllerRuntimeController是用来控制其子元件的执行时长,时长单位是秒。认识RuntimeController参数如下:名字:可以随便填写注释:可以随便......
  • 性能测试|JMeter逻辑控制器(二)
    认识ForEach控制器如下,创建一个ForEach控制器设置界面如下:输入变量前缀:要进行循环读取的变量前缀Startindexforloop(exclusive):循环开始,注意这里数值从0开始,也就是......
  • 性能测试|JMeter逻辑控制器(三)
    Jmeter逻辑控制器之事务控制器在做性能测试的时候,如果被测系统是需要登录的,登录成功后,系统默认加载其订单数据,因此在用户看来这是一个操作。所以为了模拟这个操作,我需要......
  • 怎么去提升服务器的性能
    怎么去提升服务器的性能服务器的资源是有限的,但由于这个资源是虚拟的,在使用时容易出现冗余,从而被浪费;有时候也会使用不当,使得服务器性能低下,和硬件配置不符。因此提高服务......