Jmeter进阶使用:BeanShell实现接口前置和后置操作!

2023-12-08 04:01

本文主要是介绍Jmeter进阶使用:BeanShell实现接口前置和后置操作!,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、背景

我们使用Jmeter做压力测试或者接口测试时,除了最简单的直接对接口发起请求,很多时候需要对接口进行一些前置操作:比如提前生成测试数据,以及一些后置操作:比如提取接口响应内容中的某个字段的值。举个最常用的例子:

  • 会员注册接口:需要使用电话号码作为入参,电话号码不能重复,注册接口需要添加前置操作生成不重复的电话号码。
  • 注册成功后:需要从接口返回的内容中,提取注册生成的用户ID的值,作为后续其他接口操作的入参。

要实现以上的需求,有多种方式,比如:

  • 函数助手生成随机数;
  • 手动在excel表中准备好足够多的号码,通过添加配置元件CSV data set config来获取(不推荐);
  • 正则表达式提取值;
  • 通过BeanShell编码实现;

本文主要给大家讲解如何通过BeanShell编码实现,该方法可扩展性强。掌握之后,你会发现很多场景都可以通过编写相应的编码来实现,一通百通。

二、BeanShell生成不重复的电话号码

Sampler前面加一个前置处理器BeanShellPreProcessor:

BeanShell PreProcessor的内容为:

代码内容:

//获取指定范围111-199间的随机数作为电话号码的前缀
long phoneTitle=${__Random(111,199,)};
String phoneTitleValue=phoneTitle.toString();
log.info(phoneTitleValue.toString());//当前时间戳,比如:1649038001761,除100000,得到一个8位的时间戳数字。
long num1 = ${__time(/100000,)};
log.info(num1.toString());//取1个[1,100000]的随机数字,有极低的概率重复
long num2 = ${__Random(1,100000,)};
log.info(num2.toString());//num1+num2生成1个新的8位的数值
long num = num1+num2;//通过时间戳值的变化+随机数字生成新的随机值、前面再拼接随机的电话号码前缀
//生成一个不会重复的电话号码
String phoneValue=phoneTitleValue+num.toString();//存为变量phone,供后面的接口使用
vars.put("phone",phoneValue);

每一行我都加了相应的注释,方便理解该行代码的作用,应该已经非常好理解了。

接口请求中使用定义好的变量phone:

查看接口效果:

现在我也找了很多测试的朋友,做了一个分享技术的交流群,共享了很多我们收集的技术文档和视频教程。
如果你不想再体验自学时找不到资源,没人解答问题,坚持几天便放弃的感受
可以加入我们一起交流。而且还有很多在自动化,性能,安全,测试开发等等方面有一定建树的技术大牛
分享他们的经验,还会分享很多直播讲座和技术沙龙
可以免费学习!划重点!开源的!!!
qq群号:110685036【暗号:csdn999】

三、BeanShell 从响应结果中提取内容

先在接口Sampler上右键,添加后置处理器BeanShell Post Processor:

假设接口返回内容为:
{“code”:“0000”,“msg”:“”,“data”:{“userId”:111111,“phone”:“12011111111”,“cardNo”:“8000000000”}}

{"code":"0000","msg":"","data":{"userId":111111,"phone":"12011111111","cardNo":"8000000000"}
}

BeanShell Post Processor脚本代码内容:

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;//获取响应内容
vars.put("reponseContent",prev.getResponseDataAsString());
//获取响应code
vars.put("reponseCode",prev.getResponseCode());//获取响应内容,String类型存储
String resjson=prev.getResponseDataAsString();
log.info(resjson);//转为Json对象
JSONObject jso=JSONObject.parseObject(resjson);//从对象中获取code的值
String codeValue=jso.getString("code");
log.info(codeValue);//从对象中获取子的Json对象data
JSONObject data=jso.getJSONObject("data");
log.info(data.toString());//获取子的Json对象data中的userId的值
String useridValue=data.getString("userId");
log.info(useridValue);//将获取到的userId的值存为变量userid,供后面的接口使用
vars.put("userid",useridValue);

每一行我都加了相应的注释,方便理解该行代码的作用,应该已经非常好理解了。

运行请求,Jmeter运行日志中可以看到各个值都成功获取到了:

后面的接口使用BeanShell Post Processor脚本中定义好的变量userid:

总结:BeanShell代码和Java代码非常相似,有Java编程基础的同学可以快速的上手,通过编码的方式可以很好的扩展我们需要的功能,也是Jmeter进阶使用的必学必会知识之一 ~

===================================================================
以上就是本次的全部内容,喜欢的宝子们,麻烦点个赞+收藏+关注,一键三连啦~

END点赞关注不迷路!

这篇关于Jmeter进阶使用:BeanShell实现接口前置和后置操作!的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/468462

相关文章

C++中零拷贝的多种实现方式

《C++中零拷贝的多种实现方式》本文主要介绍了C++中零拷贝的实现示例,旨在在减少数据在内存中的不必要复制,从而提高程序性能、降低内存使用并减少CPU消耗,零拷贝技术通过多种方式实现,下面就来了解一下... 目录一、C++中零拷贝技术的核心概念二、std::string_view 简介三、std::stri

Python常用命令提示符使用方法详解

《Python常用命令提示符使用方法详解》在学习python的过程中,我们需要用到命令提示符(CMD)进行环境的配置,:本文主要介绍Python常用命令提示符使用方法的相关资料,文中通过代码介绍的... 目录一、python环境基础命令【Windows】1、检查Python是否安装2、 查看Python的安

C++高效内存池实现减少动态分配开销的解决方案

《C++高效内存池实现减少动态分配开销的解决方案》C++动态内存分配存在系统调用开销、碎片化和锁竞争等性能问题,内存池通过预分配、分块管理和缓存复用解决这些问题,下面就来了解一下... 目录一、C++内存分配的性能挑战二、内存池技术的核心原理三、主流内存池实现:TCMalloc与Jemalloc1. TCM

OpenCV实现实时颜色检测的示例

《OpenCV实现实时颜色检测的示例》本文主要介绍了OpenCV实现实时颜色检测的示例,通过HSV色彩空间转换和色调范围判断实现红黄绿蓝颜色检测,包含视频捕捉、区域标记、颜色分析等功能,具有一定的参考... 目录一、引言二、系统概述三、代码解析1. 导入库2. 颜色识别函数3. 主程序循环四、HSV色彩空间

Python并行处理实战之如何使用ProcessPoolExecutor加速计算

《Python并行处理实战之如何使用ProcessPoolExecutor加速计算》Python提供了多种并行处理的方式,其中concurrent.futures模块的ProcessPoolExecu... 目录简介完整代码示例代码解释1. 导入必要的模块2. 定义处理函数3. 主函数4. 生成数字列表5.

Python中help()和dir()函数的使用

《Python中help()和dir()函数的使用》我们经常需要查看某个对象(如模块、类、函数等)的属性和方法,Python提供了两个内置函数help()和dir(),它们可以帮助我们快速了解代... 目录1. 引言2. help() 函数2.1 作用2.2 使用方法2.3 示例(1) 查看内置函数的帮助(

Linux脚本(shell)的使用方式

《Linux脚本(shell)的使用方式》:本文主要介绍Linux脚本(shell)的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录概述语法详解数学运算表达式Shell变量变量分类环境变量Shell内部变量自定义变量:定义、赋值自定义变量:引用、修改、删

Python实现精准提取 PDF中的文本,表格与图片

《Python实现精准提取PDF中的文本,表格与图片》在实际的系统开发中,处理PDF文件不仅限于读取整页文本,还有提取文档中的表格数据,图片或特定区域的内容,下面我们来看看如何使用Python实... 目录安装 python 库提取 PDF 文本内容:获取整页文本与指定区域内容获取页面上的所有文本内容获取

基于Python实现一个Windows Tree命令工具

《基于Python实现一个WindowsTree命令工具》今天想要在Windows平台的CMD命令终端窗口中使用像Linux下的tree命令,打印一下目录结构层级树,然而还真有tree命令,但是发现... 目录引言实现代码使用说明可用选项示例用法功能特点添加到环境变量方法一:创建批处理文件并添加到PATH1

Java使用HttpClient实现图片下载与本地保存功能

《Java使用HttpClient实现图片下载与本地保存功能》在当今数字化时代,网络资源的获取与处理已成为软件开发中的常见需求,其中,图片作为网络上最常见的资源之一,其下载与保存功能在许多应用场景中都... 目录引言一、Apache HttpClient简介二、技术栈与环境准备三、实现图片下载与保存功能1.