首页 > 系统相关 >【Jmeter】BeanShell 脚本

【Jmeter】BeanShell 脚本

时间:2023-05-17 17:11:44浏览次数:53  
标签:脚本 info log vars 获取 BeanShell Jmeter String

一、BeanShell

BeanShell是由java编写的,是一个轻量级的脚本语言,也相当于一个小巧免费的JAVA源码解释器,支持对象式的脚本语言特性,亦可嵌入到JAVA源代码中,能动态执行JAVA源代码并为其扩展了脚本语言的一些特性

  BeanShell是一种完全符合Java语法规范的脚本语言,并且又拥有自己的一些语法和方法;
  BeanShell是一种松散类型的脚本语言(这点和JS类似);
  BeanShell是用Java写成的,一个小型的、免费的、可以下载的、嵌入式的Java源代码解释器,具有对象脚本语言特性,非常精简的解释器jar文件大小为175k。
  BeanShell执行标准Java语句和表达式,另外包括一些脚本命令和语法。

 

二、jmeter中有哪些beanShell

BeanShell 取样器

取样器是被当做当成线程处理

 

BeanShell 预处理程序

通过编写代码的方式更好的处理接口性能测试中的请求前置入参和后置数据的获取等等

 

BeanShell 后置处理程序

通过编写代码的方式更好的处理接口性能测试中的请求前置入参和后置数据的获取等等

 

Tips:BeanShell前置处理器、BeanShell后置处理器 比 BeanShell取样器多一个重置解释器(Reset Interpreter),意思是指:对于每一次处理是不是都要进行重置;


BeanShell 定时器

BeanShell断言

BeanShell 监听器

 

三、BeanShell在JMeter的作用

(1)对JMeter的功能的扩展;

(2)对jmeter变量的一些操作;

 

四、BeanShell 常见写法

 通过${}可以直接调用

1、在Beanshell面板直接写脚本

String a = vars.get("a");
String b = vars.get("b");

log.info("打印变量a=" + a);
log.info("打印变量b=" + b);

String new_b = "update_b_" + b;
vars.put("b", new_b);
log.info("修改后的b值:" + vars.get("b"))

 

执行结果:

 

2、引用外部java源文件

public class DemoMethod{
    public static String test(String x){
        String y = ".java update_" + x;
        return y;
    }
}
DemoMethod.java

 

//引用java文件
source("Z:/DemoMethod.java");  //java文件地址 source()找指定的文件

String a=vars.get("a");
log.info("修改前的b值"+vars.get("b"));
String new_b = new DemoMethod().test(a);
vars.put("b", new_b);
log.info("修改后的b值:" + vars.get("b"))

 

执行结果:

 

3、应用class文件

编译java文件得到class文件

命令行输入:javac DemoMethod.java

      

//引用class文件
addClassPath("Z:/");  //指定class文件路径 addClassPath()找指定的路径

import DemoMethod;   //导入DemoMethod方法

String a=vars.get("a");
log.info("修改前的b值"+vars.get("b"));
String new_b = new DemoMethod().test(a);
vars.put("b",new_b);
log.info("修改后的b值:" + vars.get("b"))

 

执行结果:

 

4、引用外部jar包

命令行输入:jar cvf DemoMethod.jar DemoMethod.class

  

将jar包复制到 jmeter\lib\ext 路径下< lib\ext路径下存放引入外部的一些jar包>

  

 

需要重启下jmeter后生效

// 引用外部jar包
import DemoMethod; // 导入jar包

String a = vars.get("a");
String new_b = new DemoMethod().test(a);
log.info("修改前b:" + vars.get("b"));
vars.put("b", new_b);
log.info("修改后b:" + vars.get("b"));

 

执行结果:

 

 

五、BeanShell常用的内置对象

适用元件  

   

 

   1、log:打印日志,写入信息到jmeber.log文件;<仅输出字符串>

System.out.println("System.out.println 打印demo 练习");    //打印到jmeter.bat的windows批处理
log.info("log.info demo 练习");    // 写入信息到bin目录下的jmeber.log

System打印:

log.info打印:

   

  2、vars即JMeterVariables,操作jmeter变量,这个变量实际引用了JMeter线程中的局部变量容器(本质上是Map);

常用方法:

  (1) vars.get("String key"):从jmeter中获得变量值;

  (2) vars.put("String key","String value"):将数据存到jmeter变量中;

  

  

  

   结果:

 

  3、POPS

操作jmeter属性,该变量引用了JMeter的配置信息,可以获取Jmeter的属性,它的使用方法与vars类似,但是只能put进去String类型的值,而不能是一个对象。对应于java.util.Properties。

props的全局性

结果: 

 

4、prev 获取sample返回的信息;

常用方法:
  (1) getResponseDataAsString():获取响应信息。
  (2) getResponseCode() :获取响应code。

结果:

 

5、SampleResult:获取SampleResult对象,能通过这个对象获取想要的信息;

SampleResult中的所有方法都可以通过prev.来调用 

  SampleLabel:获取接口请求的名称。

  SamplerData:获取请求的url和body。

String code = prev.getSampleLabel();
log.info("获取接口请求的名称 :" + code);

String msg = prev.getSamplerData();
log.info("获取请求的url和body: " + msg);

 

执行结果: 

 

6、Response:获取Response对象,能通过这个对象获取响应信息;

  ResponseCode:返回接口code成功是200。

  ResponseMessage:获取msg成功是OK。

  ResponseData:获取response body类型是byte[]。

  ResponseHeaders:获取接口服务端返回的头部信息。

  RequestHeaders:获取用户端请求的头部信息。

String code = prev.getResponseCode();
log.info("获取接口结果code :" + code);

String msg = prev.getResponseMessage();
log.info("获取msg状态: " + msg);

String data = prev.getResponseData().toString();
log.info("获取response: " + data);

String resph = prev.getResponseHeaders();
log.info("获取接口服务端返回的头部信息 :" + resph);

String reqh = prev.getResponseHeaders();
log.info("获取用户端请求的头部信息 :" + reqh);

String ctime = prev.getConnectTime().toString();
log.info("获取连接到服务器的时间:" + ctime);

String tname = prev.getThreadName();
log.info("获取线程名:" + tname);
String name="修改后的线程name";
prev.setThreadName(name); //修改线程名
log.info("修改后的线程名:" + prev.getThreadName());

 

执行结果:

 

7、Failure/FailureMessage/设置响应断言

  Failure:查看接口调使用能否成功,假如返回false是成功的,true是失败的。

  FailureMessage:失败信息,没有设置的时候失败信息是空的,能set这个信息。

状态码断言

log.info("状态码:" + ResponseCode);
if(ResponseCode.equals("200")){ 
        Failure=false;
}
else{
        Failure=true;
        FailureMessage="响应状态码非200";  //指定失败原因
}

 

执行结果:

 

响应体包含特定字符

String response = prev.getResponseDataAsString();
log.info("响应体:" + response);
//响应数据包含
if(response.contains("成功")){
    Failure=false;
}
else{
    Failure=true;
    FailureMessage="响应数据不包含成功";
}

 

执行结果:  

 

 

 

Jmeter 常用API:https://jmeter.apache.org/api/org/apache/jmeter/protocol/http/sampler/HTTPSamplerBase.html

 

标签:脚本,info,log,vars,获取,BeanShell,Jmeter,String
From: https://www.cnblogs.com/phoenixy/p/17407668.html

相关文章

  • shell脚本使用ssh远程执行命令通过密码的方式登录
    shell脚本使用ssh远程执行命令通过密码的方式登录sshpass是一个在非交互式ssh会话中自动输入密码的工具。它可以直接在命令行中指定密码,因此可以用于Shell脚本等自动化场景。在RedHat系统中,可以通过epel-release源安装sshpass。epel-release源是ExtraPackagesfor......
  • serverAgent运行后,执行jmeter脚本serverAgent闪退问题
     系统的jre环境和serverAgent所需的jre不匹配,根据网上搜的办法,下载一个低版本的jre,然后放到serverAgent目录下:步骤1、下载低版本jre:下载的是18.0.2.1版本2、下载后,放到serverAgent文件路径下 3、用notepad++打开startAgent.bat,添加jre的路径:@echooffcdD:\apache-jme......
  • Linux 中 shell 脚本实现根据gff统计每一个基因的转录本数目
     001、生成基因名称的列表awk-F"\t"'$3=="gene"&&$NF~/gene=/{print$NF}'chr1.gff|sed's/\(.*\)\(gene=[^;]\+\)\(.*\)/\2/'|sort|uniq>gene.list 002、 ......
  • 基于jenkins和jmeter实现接口自动化过程
    声明        本公众号所有内容,均属微信公众号:开源优测 所有,任何媒体、网站或个人未经授权不得转载、链接、转贴或以其他方式复制发布/发表。已经本公众号协议授权的媒体、网站,在使用时必须注明"稿件来源微信公众号:开源优测",违者本公众号将依法追究责任。前面几篇文章中......
  • Powershell 无法将“mysql”项识别为 cmdlet、函数、脚本文件或可运行程序的名称
    Win键+Q,在搜索框内输入Powershell。点击以管理员身份运行Powershell。粘贴代码 set-executionpolicyremotesigned 按回车键执行命令。输入A,按回车键确认。 ......
  • Keepalived部署脚本:提升系统稳定性与可靠性
    在现代的计算环境中,高可用性是一个至关重要的概念。无论是在企业的服务器集群、云计算平台还是网络应用中,确保系统的持续可用性对于业务的成功运行至关重要。本文将介绍高可用性的概念,并重点关注一种流行的高可用解决方案——Keepalived的原理、特点以及应用场景。高可用性概述高可......
  • Jmeter性能测试知识点
    性能测试一、测试理论:1. 性能指标概念:①吞吐量:每秒服务器处理请求个数和事务数②响应时间:一个任务(事务)完成所花费的时间③并发数:同时操作的用户个数④最大并发数:在给定的预期平均响应时间下,系统最多能支持多少个并发用户。这个数据就是实际可以同时使用系统的用户数⑤TPS:......
  • Redis使用lua脚本实现库存扣减
    为什么使用Lua脚本为什么能合并多个原子操作?Redis官方文档:https://redis.io/docs/manual/programmability/eval-intro/ Redis保证脚本的原子执行。在执行脚本时,所有服务器活动在其整个运行期间都被阻止。这些语义意味着脚本的所有效果要么尚未发生,要么已经发生。脚本提供了......
  • 【jmeter】测试报告性能指标分析
    1、聚合报告指标聚合报告列表项介绍1、Label:请求的名称,就是脚本中Sampler的名称。2、#Samples(样本):总共发给服务器的请求数量,如果模拟10个用户,每个用户迭代10次,那么总的请求数为:10*10=100次。3、Average(平均值):默认情况下是单个Request的平均响应时间,当使用了TransactionCont......
  • 【jmeter】生成测试报告报错
    1、生成jmeter报告报错Consumerfailedwithmessage:Beginsize0isnotequaltofixedsize5 2、jmeter的jmx格式的聚合报告转换成html时报错Anerroroccurred:Reportgenerationrequirescsvoutputformat,check'jmeter.save.saveservice.output_format'proper......