精华内容
下载资源
问答
  • 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*)
    
    展开全文
  • 2、利用beanshell后置处理器 a.下载json相关的jar包,并在测试计划中引入 b.添加beanshell后置处理器 import org.json.*; String response_data = prev.getResponseDataAsString(); log.info(response_data); ...

    需求:将A接口的返回值中随机抽取一个value值,传给b接口

    在这里插入图片描述
    在这里插入图片描述
    1、利用正则匹配
    在这里插入图片描述
    2、利用beanshell后置处理器
    a.下载json相关的jar包,并在测试计划中引入
    在这里插入图片描述
    b.添加beanshell后置处理器

    import org.json.*; 
    
     String response_data = prev.getResponseDataAsString(); 
     log.info(response_data); //日志打印获取请求的返回值
    
    //将 String 类型的返回值构造成 JSONObject 对象
    JSONObject data_obj = new JSONObject(response_data);
    //获取作为下一个请求 post 的参数值
    JSONArray namelist_str = data_obj.get("data").getJSONArray("list");
    //获取 Province 数组的长度
     int len = namelist_str.length();
    // String strlen = Integer.toString(len); 
    // 
     vars.put("MessageNum",strlen);
    // log.info(strlen); 
     if(len > 0)
    	{
    		int x = (int)(Math.random() * len);
    		JSONObject jsonTemp = (JSONObject)namelist_str.getJSONObject(x);
    		String NameItems = jsonTemp.getString("name");
    		vars.put("Name_1",NameItems );
    		log.info(NameItems);
    	}
    

    c.传入设置的全局变量
    在这里插入图片描述

    需求:利用if控制器,如果真处理下一步,为假不进行下一步
    在这里插入图片描述
    在这里插入图片描述

    展开全文
  • 文档文件
  • jmeter用beanshell后置处理程序生成全局变量 jmx脚本(全)
  • 本文的主要重点在换行,这个也是经过好几次试验最终得出来再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的版本,特此记录一下
    
    展开全文
  • 添加beanshell后置处理器,复制以下代码 String s2=new String(prev.getResponseData(),“UTF-8”); //---------------一下步骤为转码过程--------------- char aChar; int len= s2.length(); StringBuffer ...

    添加beanshell后置处理器,复制以下代码

    String s2=new String(prev.getResponseData(),“UTF-8”);
    //---------------一下步骤为转码过程---------------
    char aChar;
    int len= s2.length();
    StringBuffer outBuffer=new StringBuffer(len);
    for(int x =0; x <len;){
    aChar= s2.charAt(x++);
    if(aChar==’\’){
    aChar= s2.charAt(x++);
    if(aChar==‘u’){
    int value =0;
    for(int i=0;i<4;i++){
    aChar= s2.charAt(x++);
    switch(aChar){
    case’0’:
    case’1’:
    case’2’:
    case’3’:
    case’4’:
    case’5’:
    case’6’:
    case’7’:
    case’8’:
    case’9’:
    value=(value <<4)+aChar-‘0’;
    break;
    case’a’:
    case’b’:
    case’c’:
    case’d’:
    case’e’:
    case’f’:
    value=(value <<4)+10+aChar-‘a’;
    break;
    case’A’:
    case’B’:
    case’C’:
    case’D’:
    case’E’:
    case’F’:
    value=(value <<4)+10+aChar-‘A’;
    break;
    default:
    throw new IllegalArgumentException(
    “Malformed \uxxxx encoding.”);}}
    outBuffer.append((char) value);}else{
    if(aChar==‘t’)
    aChar=’\t’;
    else if(aChar==‘r’)
    aChar=’\r’;
    else if(aChar==‘n’)
    aChar=’\n’;
    else if(aChar==‘f’)
    aChar=’\f’;
    outBuffer.append(aChar);}}else
    outBuffer.append(aChar);}
    //-----------------以上内容为转码过程---------------------------
    //将转成中文的响应结果在查看结果树中显示
    prev.setResponseData(outBuffer.toString());

    展开全文
  •         如图所示,本地jmeter可以正常提取id。但在Jenkins中maven构建时无论如何都无法提取到。最后发现是json.jar没有引用到。       ......
  • BeanShell 后置处理程序,对相应结果使用java语言进行... 后置处理器 > BeanShell 后置处理程序,如下图所示: 2、关键参数说明如下: Reset bsh.Interpreter before each call: 每次迭代是否重置解释器 Reset Inte
  • 第一步:写第一个接口,用json把预期结果的值取出来(当然也可以用脚本)在后置处理器中写脚本,把要取的key取出来   第二步 ,写第二个接口,这个接口要取出实际结果的值,这时,我们要beanshell的方式来...
  • Json 提取器 ...BeanShell 后置处理器 可将值释放出来,eg:同一线程组内,json 提取器都是提取同一个变量,while 中也是通过同一个变量名进行判断,就要将值释放掉,后续的 while 才会生效 ...
  • 前置处理器:BeanShell PreProcessor取样器 :BeanShellSampler后置处理器BeanShell PostProcessor 1、前置 import org.apache.jmeter.protocol.http.control.CookieManager; import org.apache.jmeter....
  • 通过beanshell拿到请求的值,可以通过两种方法,一种是在下一个接口中用jmeter的内部函数直接获取, 另一种是在beanshell后置处理器中写代码获取,用vars.put输出,在下一个接口用&{变量名}直接引用 ...
  • Jmeter后置处理器BeanShell

    千次阅读 2020-08-20 16:49:33
    应用 1,首先储存一个接口的响应结果,比如在http请求的后面添加beanshell后置处理器(BeanShell PostProcessor)来储存http请求的响应结果: import org.json.*; //获取上一个请求的返回值 String response = prev....
  • BeanShell PostProcessor:脚本后置处理器
  • BeanShell 后置处理程序获取请求响应时间 log.info(结束时间+prev.getEndTime()); log.info(开始时间+prev.getStartTime()); Long longTime = (prev.getEndTime()-prev.getStartTime()); Integer intTime = long...
  • //源码里定义的code是String,状态码自定义 数字,结果可以在后置处理器人为干预 //prev.setResponseCode("798"); //prev.setSuccessful(false); //prev.setResponseMessage("预期结果和实际结果不一致"); //...
  • 实际项目中,经常会碰到不同线程之间有些数据上下文关联的情况,所以我们会设置全局变量。本次使用的jmeter版本5.2.1 第一种方法:__setProperty()函数 将从正则表达式中获取的变量${jsd}赋值给newjsd,并且将其置为...
  • public String file(path,text){ try { FileOutputStream fos1 = new FileOutputStream (new File...//第一个接口的BeanShell 后置处理程序 加上这个;后续接口注释掉;作用是清空result.txt内容 file(path,text);
  • 使用BeanShell 后置处理程序将接口返回值写入CSV文件 添加BeanShell 后置处理程序 写入如下代码 FileWriter fstream = new FileWriter("D:\\下载\123.csv",true); BufferedWriter out = new BufferedWriter...
  • 在响应乱码的请求节点下,新建后置控制器"BeanShell 后置处理程序"; 在脚本中输入: prev.setDataEncoding("UTF-8"); 执行脚本: 嘎嘎:亲切的中文回来了。
  • 轻松两步将结果写入到本地txt文件中。 1,提取响应数据,因为工作中我们大多数是将响应的部分数据写入结果,例如订单号; 在请求上右击“添加”-“后置处理器”-“正则表达式提取器” ...
  • 3、JDBC request下添加后置处理器BeanShell PostProcessor,通过脚本操作变量 接下来,在另一个接口中的参数可以通过jmeter的内部函数获取指定的值 ${__BeanShell(vars.getObject("user_login")....

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,595
精华内容 638
关键字:

beanshell后置处理器