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

这篇具有很好参考价值的文章主要介绍了Jmeter进阶使用:BeanShell实现接口前置和后置操作。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、背景

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

会员注册接口:需要使用电话号码作为入参,电话号码不能重复,注册接口需要添加前置操作生成不重复的电话号码。

注册成功后:需要从接口返回的内容中,提取注册生成的用户ID的值,作为后续其他接口操作的入参。

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

函数助手生成随机数;

手动在excel表中准备好足够多的号码,通过添加配置元件CSV data set config来获取(不推荐);

正则表达式提取值;

通过BeanShell编码实现;

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

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

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

Jmeter进阶使用:BeanShell实现接口前置和后置操作,自动化测试,软件测试,软件测试工程师,jmeter,职场和发展,自动化测试,软件测试,功能测试,程序人生

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:

Jmeter进阶使用:BeanShell实现接口前置和后置操作,自动化测试,软件测试,软件测试工程师,jmeter,职场和发展,自动化测试,软件测试,功能测试,程序人生

查看接口效果:

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

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

Jmeter进阶使用:BeanShell实现接口前置和后置操作,自动化测试,软件测试,软件测试工程师,jmeter,职场和发展,自动化测试,软件测试,功能测试,程序人生

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

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

BeanShell Post Processor脚本代码内容:

Jmeter进阶使用:BeanShell实现接口前置和后置操作,自动化测试,软件测试,软件测试工程师,jmeter,职场和发展,自动化测试,软件测试,功能测试,程序人生

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运行日志中可以看到各个值都成功获取到了:

Jmeter进阶使用:BeanShell实现接口前置和后置操作,自动化测试,软件测试,软件测试工程师,jmeter,职场和发展,自动化测试,软件测试,功能测试,程序人生

后面的接口使用BeanShell Post Processor脚本中定义好的变量userid:
Jmeter进阶使用:BeanShell实现接口前置和后置操作,自动化测试,软件测试,软件测试工程师,jmeter,职场和发展,自动化测试,软件测试,功能测试,程序人生

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

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:【文末领取】


     【下面是我整理的2023年最全的软件测试工程师学习知识架构体系图+全套资料】


一、Python编程入门到精通

二、接口自动化项目实战  

Jmeter进阶使用:BeanShell实现接口前置和后置操作,自动化测试,软件测试,软件测试工程师,jmeter,职场和发展,自动化测试,软件测试,功能测试,程序人生

三、Web自动化项目实战

四、App自动化项目实战  

Jmeter进阶使用:BeanShell实现接口前置和后置操作,自动化测试,软件测试,软件测试工程师,jmeter,职场和发展,自动化测试,软件测试,功能测试,程序人生

五、一线大厂简历

六、测试开发DevOps体系  

Jmeter进阶使用:BeanShell实现接口前置和后置操作,自动化测试,软件测试,软件测试工程师,jmeter,职场和发展,自动化测试,软件测试,功能测试,程序人生

七、常用自动化测试工具

八、JMeter性能测试  

Jmeter进阶使用:BeanShell实现接口前置和后置操作,自动化测试,软件测试,软件测试工程师,jmeter,职场和发展,自动化测试,软件测试,功能测试,程序人生

九、软件测试全套资料

Jmeter进阶使用:BeanShell实现接口前置和后置操作,自动化测试,软件测试,软件测试工程师,jmeter,职场和发展,自动化测试,软件测试,功能测试,程序人生

十、总结(文末尾部小惊喜)

生命不息,奋斗不止。每一份努力都不会被辜负,只要坚持不懈,终究会有回报。珍惜时间,追求梦想。不忘初心,砥砺前行。你的未来,由你掌握!

生命短暂,时间宝贵,我们无法预知未来会发生什么,但我们可以掌握当下。珍惜每一天,努力奋斗,让自己变得更加强大和优秀。坚定信念,执着追求,成功终将属于你!

只有不断地挑战自己,才能不断地超越自己。坚持追求梦想,勇敢前行,你就会发现奋斗的过程是如此美好而值得。相信自己,你一定可以做到!   文章来源地址https://www.toymoban.com/news/detail-652690.html

到了这里,关于Jmeter进阶使用:BeanShell实现接口前置和后置操作的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • JMeter处理接口签名之BeanShell实现MD5加密

    项目A需要给项目B提供一个接口,这个接口加密了,现在需要测试这个接口,需要怎么编写脚本呢?实现接口签名的方式有两种: BeanShell实现MD5加密和 函数助手实现MD5加密, 之前已经分享过了函数助手实现MD5加密 ,今天就来分享下BeanShell实现MD5加密。 一、接口信息 POST /a

    2024年02月14日
    浏览(55)
  • pytest框架快速进阶篇-pytest前置和pytest后置,skipif跳过用例

     一、 Pytest的前置和后置方法 1.Pytest可以集成unittest实现前置和后置 注意:setUpClass和tearDownClass需要用@classmethod装饰器装饰。 2.Pytest前置和后置 注意:setup、teardown、setup_class、teardown_class都是小写! 二、跳过用例 使用方法:   @pytest.mark.skipif(21,reason=\\\'当条件不True时跳过\\\') 使用

    2024年02月13日
    浏览(46)
  • 前置路由守卫、后置路由守卫,前置请求守卫、后置请求守卫

    在Vue 3和Axios中,路由守卫和请求守卫是用于控制路由跳转和HTTP请求的关键机制。 下面是这些守卫的介绍和使用方式: 前置路由守卫(Before Route Guards) 前置路由守卫在路由跳转之前执行,可以用来判断是否允许用户访问某个路由。在Vue 3中,你可以使用 router.beforeEach 添加全

    2024年04月26日
    浏览(36)
  • jmeter使用beanshell

    1.使用jar包需要将依赖和脚本放在安装路径下的lib/ext中,这样可以避免很多问题产生 pip3 install -i http://mirrors.aliyun.com/pypi/simple --trusted-host mirrors.aliyun.com allure_pytest-2.13.2-py3-none-any.whl 通过docker安装的Jenkins容器 需要再Jenkins容器中安装python3环境以及周边插件,上面的命令和处理

    2024年02月04日
    浏览(45)
  • Jmeter 中 Beanshell 的使用

    目录 前言: Beanshell 介绍 常用内置变量 log vars 和 props vars 常用方法: props 常用方法: prev 综合运用 JMeter 是一个广泛使用的性能测试工具,它支持许多不同的测试技术和方法。其中,Beanshell 是一种常用的脚本语言,它可以用来自动化测试脚本的执行和参数化测试。 Beanshel

    2024年02月16日
    浏览(63)
  • PostMan前置脚本/后置脚本/断言

    1. 使用脚本的意义:利用脚本可以降低联调工作量.,如 1.1 前置脚本请求前执行;用于设置参数, 可以用于多个用户注册, 1.2 后置脚本可以对执行请求结果进行校验,设置变量,用于下一个请求 http请求前执行;用于设置参数; http请求后执行;可以测试请求执行结果;可以解析结果

    2024年02月12日
    浏览(81)
  • Postman之脚本(前置脚本、后置脚本)

    目录 review一下pm 前置脚本Pre-request Script 后置脚本Tests Postman中的所有的脚本编写都要通过pm pm =Postman的简写 常用的pm语法: pm.globals.set(\\\"variable_name\\\",\\\"variable_value\\\");      设置全局变量 pm.globals.set(\\\"variable_key\\\", \\\"variable_value\\\");  设置环境变量 pm.globals.get(\\\"variable_name\\\");      获取全

    2024年02月09日
    浏览(44)
  • jmeter通过BeanShell对接口参数进行MD5和HmacSHA256加密【杭州多测师_王sir】

    一、在eclipse里面编写MD5加密算法 二、在eclipse里面自己编写HMACSHA256算法 三、在eclipse里面写好之后,导出来为jar包,命名为:base64.jar  放在jmeter/lib/ext中 1.md5方法就一个参数,就是需要加密的数据 2.sha256_HMAC方法接收两个参数,message:需要被加密的数据,secret:加密的秘钥

    2024年02月12日
    浏览(43)
  • 【JMeter】使用BeanShell写入内容到文件

    目录 使用BeanShell写入内容到文件 一、前言 二、提取 三、写入 ​在我们日常工作中,可能会遇到需要将请求返回的数据写入到文件中。在我们使用JMeter进行性能测试时,就经常能够遇到这种情况。要想达到这种目的,我们一般采取BeanShell后置处理器来将内容写入到文件。 ​

    2024年02月12日
    浏览(40)
  • 使用BeanShell写入内容到文件【JMeter】

    ​ 在我们日常工作中,可能会遇到需要将请求返回的数据写入到文件中。在我们使用JMeter进行性能测试时,就经常能够遇到这种情况。要想达到这种目的,我们一般采取BeanShell后置处理器来将内容写入到文件。 ​ 在目前大多数的性能测试中,都是以JSON形式返回结果。因此我

    2024年02月11日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包