zl程序教程

您现在的位置是:首页 >  其他

当前栏目

巧用jmeter逻辑控制器,解决压测中的登录问题

逻辑 解决 登录 JMeter 控制器 压测 巧用 问题
2023-09-14 09:16:35 时间

对一个系统的指定功能进行压力测试时,发现把登录接口一起做了压力测试,那么如何在保持登录情况下,单独对指定接口进行压力测试呢?

01

压力测试目标

对接口A进行X次压力测试(本文示例压测10次)

图片

02

脚本设计思路

  • 接口请求头

  • 【系统登录】接口请求

  • 【系统登录】接口断言

  • 获取token

  • 【子系统登录】接口请求

  • 【子系统登录】接口断言

  • 获取cookie

  • 子系统的功能接口A请求:

    添加请求cookie管理器

  • 子系统的功能接口A断言

  • 监听器

03

脚本解说

✅  Logic Controller

逻辑控制器,主要用于控制jmeter脚本运行的逻辑:

  • Once Only Controller仅一次控制器:主要用于控制登录接口,确保压力测试过程中,登录接口只运行一次即可

  • Loop Controller循环控制器:用于控制需要进行压力测试的接口,可以循环执行N次

✅  HTTP request

HTTP接口请求,主要用于编辑接口请求的域名(server/IP)、路径(path)、请求数据(request body)

✅  HTTP Header Manager

请求信息头,主要用于保存接口请求的header信息,规定接口响应数据的格式

Content-Type=application/json;charset=UTF-8

✅  Regular Expression Extractor

正则后置处理器,主要用于从接口的响应体内提取对应的token或cookie信息(需要掌握正则表达式基础语法)

✅  Debug PostProcessor

后置调试器,用于调试查看后置处理器生成的变量信息;本文主要用于查看后置处理器Regular Expression Extractor提取成功的token和cookie变量值

✅  Assertion

实现断言功能,从接口的响应体内提取指定的字段,赋值期望值,脚本运行时通过对比期望值和实际值是否一致,来验证接口请求是否成功。

✅  Listener

监听器,通俗点说就是测试报告,jmeter提供了多种测试报告格式,本文主要使用View Results Tree、Aggregate Report两种格式,第一种用于查看接口请求的详细日志信息,第二种用于查看接口请求的耗时等性能信息。

04

脚本正文

1、脚本结构 

图片

2、HTTP request示例-post请求

图片

3、HTTP request示例-get请求 

由于使用正则表达式匹配获取token,所以会匹配到多个数据,此时可在“调试器”内查看具体token在哪个变量上,引用时填入具体变量名称即可

图片

上图可看到,子系统登录接口请求需要的token在变量“tokenlist_g1”上,故接口入参直接引用变量${ tokenlist_g1},如下图:

图片

4、HTTP request(压测接口)

  • 添加cookie管理器

    图片

  • 发起请求时会自动获取cookie信息

    接口请求配置与上面两个http请求一致,均需要包含域名、路径、请求方法、请求体

    图片

5、JSON Assertion

由于本文案例的接口请求响应数据都是json格式,所以使用json断言。

响应结果如下:

图片

 上图可知,通过判断响应结果的description字段值,来判断接口请求是否成功

对应的断言配置:

图片

 其他接口的断言也可按上述方法设置

6、逻辑控制器

接口完整请求编辑好后,引入逻辑控制器来控制“登录模块”以及“需要进行压测的接口模块”

将登录相关接口,移动到“Once Only Controller”下,确保执行脚本时,该脚本仅运行一次

将需要进行压测的接口,移动到“Loop Controller”下,确保可以循环运行。

图片

图片

7、监听器

本文使用两种监听器存储测试报告

监听器要添加在线程组(Thread Group)上,才可监听所有请求的测试报告,如下图

图片

05

脚本运行结果

图片

图片

感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

① 2000多本软件测试电子书(主流和经典的书籍应该都有了)

② 软件测试/自动化测试标准库资料(最全中文版)

③ 项目源码(四五十个有趣且经典的练手项目及源码)

④ Python编程语言、API接口自动化测试、web自动化测试、App自动化测试(适合小白学习)

 

 ⑤ Python学习路线图(告别不入流的学习) 

在我的QQ技术交流群里(技术交流和资源共享,广告进来腿给你打断)