精华内容
下载资源
问答
  • 通过beanshell拿到请求的值,可以通过两种方法,一种是在下一个接口中用jmeter的内部函数直接获取, 另一种是在beanshell后置处理器中写代码获取,用vars.put输出,在下一个接口用&{变量名}直接引用 ...

    通过beanshell拿到请求的值,可以通过两种方法,一种是在下一个接口中用jmeter的内部函数直接获取,这种是不用添加beanshell后置的
    ${__BeanShell(vars.getObject(“param”).get(n).get(“colname”))}
    在这里插入图片描述

    另一种是在beanshell后置处理器中写代码获取,用vars.put输出,在下一个接口用${变量名}直接引用
    在这里插入图片描述
    在这里插入图片描述

    展开全文
  • jmeter-BenaShell的使用jmeter-BenaShell的使用BeanShell预处理器-随机生成数据BeanShell后置处理器-提取响应内容置于log中 jmeter-BenaShell的使用 BeanShell是一个小型嵌入式Java源代码解释器,具有对象脚本语言...

    jmeter-BenaShell的使用

    BeanShell是一个小型嵌入式Java源代码解释器,具有对象脚本语言特性,能够动态地执行标准JAVA语法,并利用在JavaScript和Perl中常见的松散类型、命令、闭包等通用脚本来对其进行拓展。
    前置处理器:请求发送之前对请求参数做一些处理
    后置处理器:请求发送完成之后对响应数据进行处理

    BeanShell Sampler 取样器
    BeanShell PreProcessor 预处理程序
    BeanShell PostProcessor BeanShell后置处理器,主要用来对响应数据进行处理
    BeanShell Assertion BeanShell断言,主要对后端返回的比较复杂的数据,要进行复杂的业务逻辑处理,进行断言。
    _BeanShell 函数

    设置随机数
    数据加密
    响应报文数据提取
    数据库数据提取
    复杂逻辑结构断言

    BeanShell预处理器-随机生成数据

    例子:某一平台下的新增接口,随机生成新增的数据
    在这里插入图片描述
    在这里插入图片描述

    //随机生成一个用户名
    public static String getUsername(int length) {
    	String str = "abcdefghijklmnopqrstuvwxyz";
    	Random random = new Random();
    	StringBuffer sb = new StringBuffer();
    	for(int i = 0; i < length; i++){
    		//生成一个随机的int值
    	     int number = random.nextInt(str.length());
    		sb.append(str.charAt(number));
    	}
    	String username = "wangmin" + sb;
    	return username.toString();
    }
    
    //随机生成一个序列号
    public static String getorganizationCode(int length){
    	String str = "0123456789";
    	Random random = new Random();
    	StringBuffer sb = new StringBuffer();
    	for(int i = 0; i < length; i++){
    		int number = random.nextInt(str.length());
    		sb.append(str.charAt(number));
    	}
    	String organizationCode = "009" + sb;
    	return organizationCode.toString();
    }
    
    
    String name = getUsername(3);
    log.info(name);
    vars.put("name",name);
    
    String organizationCode = getorganizationCode(6);
    log.info(organizationCode);
    vars.put("organizationCode",organizationCode);
    

    结果:每次运行均随机产生不同数据,运行结果正确,响应状态码:200,message:success

    {"errorcode":0,"message":"success!","data":{"operatorId":"2107","name":"wangmingdq","address":"详细地址","contacts":"汪敏","phone":"17664012113","proprietorship":null,"organizationCode":"009051270","longitude":118000000,"latitude":39000000,"status":5,"type":null,"provinceId":"356","cityId":"357","countyId":"358","append":"","createTime":1620457032,"updateTime":1620457032,"imageId":null,"imageUrl":""}}
    
    {"errorcode":0,"message":"success!","data":{"operatorId":"2107","name":"wangmingdq","address":"详细地址","contacts":"汪敏","phone":"17664012113","proprietorship":null,"organizationCode":"009051270","longitude":118000000,"latitude":39000000,"status":5,"type":null,"provinceId":"356","cityId":"357","countyId":"358","append":"","createTime":1620457032,"updateTime":1620457032,"imageId":null,"imageUrl":""}}
    

    BeanShell后置处理器-提取响应内容置于log中

    在这里插入图片描述

    //提取响应内容
    String statusCode = prev.getResponseCode(); //获取响应代码
    String response_body = prev.getResponseDataAsString(); //获取响应body内容
    String response_headers = prev.getResponseHeaders();   //获取响应头
    String response_reason = prev.getResponseMessage();   //获取响应信息
    
    log.info("=====响应代码:=====>>"+statusCode);
    log.info("=====响应body:=====>>"+response_body);
    log.info("=====响应头:=====>>"+response_headers);
    log.info("=====响应信息:=====>>"+response_reason);
    
    

    bin下的jmeter.log
    在这里插入图片描述

    2021-05-08 15:19:37,411 INFO o.a.j.u.BeanShellTestElement: =====响应代码:=====>>200
    2021-05-08 15:19:37,411 INFO o.a.j.u.BeanShellTestElement: =====响应body:=====>>{"errorcode":0,"message":"success!","data":{"operatorId":"2109","name":"wangminmjf","address":"详细地址","contacts":"汪敏","phone":"17664012113","proprietorship":null,"organizationCode":"009582005","longitude":118000000,"latitude":39000000,"status":5,"type":null,"provinceId":"356","cityId":"357","countyId":"358","append":"","createTime":1620458377,"updateTime":1620458377,"imageId":null,"imageUrl":""}}
    2021-05-08 15:19:37,412 INFO o.a.j.u.BeanShellTestElement: =====响应头:=====>>HTTP/1.1 200 
    Server: nginx/1.15.6
    Date: Sat, 08 May 2021 07:19:38 GMT
    Content-Type: application/json;charset=UTF-8
    Transfer-Encoding: chunked
    Connection: keep-alive
    Vary: Accept-Encoding
    X-Application-Context: server-gateway:docker:8506
    apiRemark: %E4%BF%9D%E5%AD%98%E8%BF%90%E8%90%A5%E5%95%86%E4%BF%A1%E6%81%AF
    requestTime: 1620458377964
    
    2021-05-08 15:19:37,412 INFO o.a.j.u.BeanShellTestElement: =====响应信息:=====>>
    2021-05-08 15:19:37,412 INFO o.a.j.t.JMeterThread: Thread is done: 充电云运营商管理 1-1
    2021-05-08 15:19:37,413 INFO o.a.j.t.JMeterThread: Thread finished: 充电云运营商管理 1-1
    2021-05-08 15:19:37,413 INFO o.a.j.e.StandardJMeterEngine: Notifying test listeners of end of test
    2021-05-08 15:19:37,413 INFO o.a.j.g.u.JMeterMenuBar: setRunning(false, *local*)
    
    展开全文
  • Jmeter后置处理器之BeanShell

    千次阅读 2020-08-20 16:49:33
    应用 1,首先储存一个接口的响应结果,比如在http请求的后面添加beanshell后置处理器(BeanShell PostProcessor)来储存http请求的响应结果: import org.json.*; //获取上一个请求的返回值 String response = prev....

    文章来源:https://www.cnblogs.com/sunny-sl/p/11231830.html

    内置变量

    • log
      写入信息到jmeber.log文件,使用方法:log.info(“This is log info!”);

    • ctx
      该变量引用了当前线程的上下文,使用方法可参考:org.apache.jmeter.threads.JMeterContext。

    • vars - (JMeterVariables)
      操作jmeter变量,这个变量实际引用了JMeter线程中的局部变量容器(本质上是Map),它是测试用例与BeanShell交互的桥梁,常用方法:
      a) vars.get(String key):从jmeter中获得变量值
      b) vars.put(String key,String value):数据存到jmeter变量中

    • props - (JMeterProperties - class java.util.Properties)

    • 操作jmeter属性,该变量引用了JMeter的配置信息,可以获取Jmeter的属性,它的使用方法与vars类似,但是只能put进去String类型的值,而不能是一个对象。对应于java.util.Properties。
      a) props.get(“START.HMS”);  注:START.HMS为属性名,在文件jmeter.properties中定义
      b) props.put(“PROP1”,“1234”);

    • prev - (SampleResult)
      获取前面的sample返回的信息,常用方法:
      a) getResponseDataAsString():获取响应信息
      b) getResponseCode() :获取响应code

    • 常用属性

    1.log 打印日志,写入信息到jmeber.log文件。
    
    2.SampleResult 获取SampleResult对象,能通过这个对象获取想要的信息。
    
    3.Response 获取Response对象,能通过这个对象获取响应信息。
    
    4.Failure 查看接口调使用能否成功,假如返回false是成功的,true是失败的。
    
    5.FailureMessage 失败信息,没有设置的时候失败信息是空的,能set这个信息。
    
    6.ResponseData 获取response body类型是byte[]。
    
    7.ResponseCode 返回接口code成功是200。
    
    8.ResponseMessage 获取msg成功是OK。
    
    9.ResponseHeaders 获取接口服务端返回的头部信息。
    
    10.RequestHeaders 获取用户端请求的头部信息。
    
    11.SampleLabel 获取接口请求的名称。
    
    12.SamplerData 获取请求的url和body。
    
    13.ctx 代表上下文信息,能直接用。
    
    14.vars即JMeterVariables,操作jmeter变量,这个变量实际引用了JMeter线程中的局部变量容器(本质上是Map),常用方法:
    
    a) vars.get(String key):从jmeter中获得变量值;
    
    b) vars.put(String key,String value):数据存到jmeter变量中;
    
    15.prev 获取前面的sample返回的信息,常用方法:
    
    a) getResponseDataAsString():获取响应信息。
    
    b) getResponseCode() :获取响应code。
    

    在写代码的时候,可以直接用上面的变量和方法,参考如下例子。

    应用

    1,首先储存一个接口的响应结果,比如在http请求的后面添加beanshell后置处理器(BeanShell PostProcessor)来储存http请求的响应结果:

    import org.json.*;
    
    //获取上一个请求的返回值
    String response = prev.getResponseDataAsString();
    //将返回值转换为json
    JSONObject responseJson = new JSONObject(response);
    //获取responseMessage
    String message = responseJson.getString("responseMessage");
    log.info("message的值:" + message);
    
    //使用vars.put()方法储存变量message
    vars.put("message",message);
    //获取titleLink
    String titleLink = responseJson.getJSONObject("data").getString("titleLink");
    log.info("titleLink的值:" + titleLink);
    //使用vars.put()方法储存变量message
    vars.put("titleLink",titleLink);
    

    在后面的其他接口中如何需要使用变量message 和 titleLink,可以使用${message} 和 ${titleLink}来获取变量的值;

    变量储存好后,在需要断言的接口后面添加BeanShell断言,使用Failrue来标识断言失败,FailureMessage标示断言失败的原因,如:

    //使用vars.get()方法获取变量的值
    String message= vars.get("message");
     
    if(!message.equals("success")) {
        Failure = true; 
        FailureMessage = "规则解析失败";
    }else{
        FailureMessage = "规则解析成功";
        }
    

    方法二:
    直接在需要断言的接口后面使用beanshell断言,使用Failrue来标识断言失败,FailureMessage标示断言失败的原因,如:

    import org.json.*;
    
    //获取上一个请求的返回值
    String response = prev.getResponseDataAsString();
    //将返回值转换为json
    JSONObject responseJson = new JSONObject(response);
    //获取responseMessage
    String message = responseJson.getString("responseMessage");
    log.info("message的值:" + message);
    
    if(!message.equals("success")){
        Failure = true; 
        FailureMessage = "规则解析失败,message不等于success";
        return;
    }
    
    //获取titleLink
    Object titleLink = responseJson.getJSONObject("data").get("titleLink");
    log.info("titleLink的值:" + titleLink.toString());
    
    
    if(titleLink.toString().equals("null") || "".equals(titleLink)){
        Failure = true; 
        FailureMessage = "规则解析失败,titleLink为空";
    }else if(!titleLink.toString().startsWith("http") && !titleLink.toString().startsWith("https")){
        Failure = true;
        FailureMessage = "规则解析失败,titleLink不为空,但是不是以http或者https开头的";
    }
    
    展开全文
  • 本文的主要重点在换行,这个也是经过好几次试验最终得出来再jmeter中换行符与java语言中换行符不一致 标红框的部分是第一次试验,\r是回车\n是换行的意思,按照jmeter支持java语言可以正常的使用,但是在多用户执行...

    本文的主要重点在换行,这个也是经过好几次试验最终得出来再jmeter中换行符与java语言中换行符不一致
    在这里插入图片描述标红框的部分是第一次试验,\r是回车\n是换行的意思,按照jmeter支持java语言可以正常的使用,但是在多用户执行数据时会出现后面的数据把前面的数据覆盖掉的情况,最终只剩下一行,后上网查阅以一部分资料,将\r去掉只使用\n可以正常进行换行。原因不知道为什么,询问开发的
    windows --> \r\n

    Linux         -->   \r
    
    mac         -->   \n
    不同的电脑对于换行用的是不一样的,就是说之前的\r\n按道理来说是没有问题,是不是跟jmeter版本有关系?我用的是5.1.1的版本,特此记录一下
    
    展开全文
  • JMeter-后置处理器

    千次阅读 2017-08-30 17:19:12
    后置处理器在Sampler运行后执行。 建议都添加后置处理器作为一个sampler的子组件(确保是作用于你需要的那个sampler,不然,他会作用与他同级的所有sampler),比如. 1. BeanShell PostProcessor语法与BeanShell ...
  • 2、JDBC request下添加后置处理器,BeanShell PostProcessor,通过脚本操作变量 接下来,在另一个接口中的参数可以通过jmeter的内部函数获取指定的值 ${__BeanShell(vars.getObject("user_login").get(${__intSum(${...
  • 之前用python+locust对脚本生成商品编码, 商品上架,购买商品进行编写脚本和压测; 开始是打算用Jmeter,后来遇到问题在 Jmeter如何读取JDBC多行并组成列表,作为下一个请求 一直卡在这里,今天终于突破 记录一下...
  • BeanShell 后置处理程序,对相应结果使用java语言进行... 后置处理器 > BeanShell 后置处理程序,如下图所示: 2、关键参数说明如下: Reset bsh.Interpreter before each call: 每次迭代是否重置解释器 Reset Inte
  • 前置处理器:BeanShell PreProcessor取样器 :BeanShellSampler后置处理器:BeanShell PostProcessor 1、前置 import org.apache.jmeter.protocol.http.control.CookieManager; import org.apache.jmeter....
  • 1、需要获取响应数据的请求右键添加-后置处理器-JSON Extractor 2、如果要获取json响应数据多个值时,设置的Variable names 与JSON Path expressions及Default Values的数量一定要一致; 如json体如下: { "msg...
  • 2、在http请求添加后置处理器BeanShell PostProcessor,配置如下 1、其中source填写RedisCon.java文件全路径,pkey为从http请求获取的变量值 2、tkey为需要从redis取值的键值,最后通过RedisCon....
  • jmeter中支持java语音,前置和后置处理器都可以直接使用java,我们就用java来处理这个保存数据和获取数据的场景 1、保存数据 直接使用java语音实现这个功能,下面是讲jmeter中的变量“token”保存到"E://test.txt...
  • 第一步:写第一个接口,用json把预期结果的值取出来(当然也可以用脚本)在后置处理器中写脚本,把要取的key取出来   第二步 ,写第二个接口,这个接口要取出实际结果的值,这时,我们要beanshell的方式来...
  • 2、利用beanshell后置处理器 a.下载json相关的jar包,并在测试计划中引入 b.添加beanshell后置处理器 import org.json.*; String response_data = prev.getResponseDataAsString(); log.info(response_data); ...
  • 1、新建名册下添加后置处理器正则提取器 正则表达式匹配原则:直接复制要匹配段落,表达式放到匹配位置就好 如匹配‘UTF-8’:accept-charset="UTF-8" 将UTF-8替换成正则:accept-charset="(.*)" 以下是我需要...
  • 实际项目中,经常会碰到不同线程之间有些数据上下文关联,所以我们会设置全局变量。 第一种方法:__setProperty()函数 将从正则表达式中获取的变量${jsd}赋值给newjsd,并且将其置为全局变量 ...
  • public String file(path,text){ try { FileOutputStream fos1 = new FileOutputStream (new File...//第一个接口的BeanShell 后置处理程序 加上这个;后续接口注释掉;作用是清空result.txt内容 file(path,text);
  • Jmeter beanshell全局变量跨线程使用

    千次阅读 2020-04-02 17:50:18
    beanshell后置处理器,顾名思义,哈哈哈,就是发出请求后用来获取想要的结果的,和正则表达式和json提取器有点相似,确实是这样,不过呢,这个beanshell后置处理器是可以用来做全局变量的哈,就是可以跨线程的,多个...
  • 因而需要对结果进行转码-beanshell后置处理器 BeanShell 代码1 import org.apache.jmeter.util.Document; //导入官方jar包 String converted = Document.getTextFromDocument(data); //静态方法...
  • JMeter中BeanShell的使用方法和常用语法

    万次阅读 多人点赞 2019-05-25 02:44:59
     2、在JMeter中BeanShell取样器是当成线程处理的,所以运行时是有一定的消耗的,而使用BeanShell前置处理器、BeanShell后置处理器总体来说比BeanShell取样器消耗低,相当于少起一个线程。 六、JMeter中BeanShell...
  • 文档文件
  • 1. 线程组添加Bean shell后置处理器 2. 通过函数${__setProperty()}设置全局变量 ${__setProperty(变量名,值,)} ${__setProperty(Token,${Token},)}; {__setProperty(UserName,${UserName},)}; 3. 跨线程调用 ...
  • Jmeter——Jmeter之BeanShell变量使用

    万次阅读 2018-02-09 23:49:45
    一、在测试过程中经常会遇到一些业务逻辑处理需要,单纯的线程设置不能满足,这时候就要使用BeanShell编写一定的脚本前置处理器:BeanShell PreProcessor,主要接口请求前做一些参数化及逻辑处理后置处理器:...
  • 在响应乱码的请求节点下,新建后置控制器"BeanShell 后置处理程序"; 在脚本中输入: prev.setDataEncoding("UTF-8"); 执行脚本: 嘎嘎:亲切的中文回来了。
  • 日常记录: 获取接口响应结果,保存至本地文本 import java.io.FileWriter; import java.io.IOException; String returnData = prev.getResponseDataAsString();...String code = prev.getResponseCode();...
  • jmeter使用beanshell取请求的头部信息

    千次阅读 2019-03-12 10:16:02
    1、添加beanshell后置处理器 2、代码 获取加载时间 long time=prev.getEndTime()-prev.getStartTime(); vars.put("param",String.valueOf(time));
  • 【环境】  ①Jmeter版本:3.2,JDK:1.8  ②前置条件:将json.jar包置于..\apache-jmeter-3.2\lib\下,并将该jar包添加到测试计划的Library中;否则会报:Typed variable declaration... ③处理器:Beanshell处...
  • 1、新建一个本地csv文件,存放请求需要使用的变量值account,password,并配置CSV Data Set Config ...4、在本地新建一个pk.csv文件,新建一个BeanShell PostProcessor后置处理器,用于提取结果
  • beanshell PreProcessor存储数据 import java.text.*; Date date = new Date(); SimpleDateFormat ft = new SimpleDateFormat("yyyy-MM-dd"); File file = new File("C:/Users/Desktop/27/result/"+ft.format...

空空如也

空空如也

1 2 3
收藏数 49
精华内容 19
关键字:

jmeterbeanshell后置处理器