jmeter取样器之BeanShell取样器

一、什么是Bean Shell

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

二、jmeter中有哪些beanShell

  • 定时器:  BeanShell Timer

  • 前置处理器:BeanShell PreProcessor

  • 采样器:  BeanShell Sampler

  • 后置处理器:BeanShell PostProcessor

  • 断言:   BeanShell断言

三、BeanShell常用的几个内置对象

log:写入信息到jmeber.log文件,使用方法:log.info(“你要输出在日志的信息”),注意点是log.info只输出String类型的变量

具体案例如下面演示:

 ②vars :操作jmeter变量,这个变量实际引用了JMeter线程中的局部变量容器(本质上是Map),它是测试用例与BeanShell交互的桥梁,常用方法:

    a) vars.get(String key):从jmeter中获得数据

    b) vars.put(String key,String value):将Java种数据存到jmeter变量中

    一个小小的注意点vars.put产生的新变量无法通过BeanShell和日志查看

 案例如下:获取登入种的session的值,同时给id赋值让Jmeter读取到:

运行结果如下,可以看到成功读取到了session同时给new这个变量赋了值:

还有一个比较常用的就是prev

    prev - (SampleResult):获取前面的sample返回的信息,常用方法:

    a) getResponseDataAsString():获取响应信息

    b) getResponseCode() :获取响应code

  • Failure:是否失败,boolean类型
  • FailureMessage:失败日志,在断言失败时显示

四、详解:

1、BeanShell取样器

BeanShell取样器:可以理解为一个小型的Java解释器当我们要执行一些复杂的操作的时候例如给密码通过特殊的算法来加密解密,可能通过Jmeter自带的插件很难完成,这时候我们可以通过BeanShell自己编写脚本来处理。

使用方式:

一、在Beanshell面板直接写脚本

下面我们通过一个简单的例子来了解下

1、通过配置元件“用户定义的变量”,添加两个变量,分别是aa=“aa”,bb="bb",如下图:

 2、添加Beanshell取样器,并写一个简单的小功能,实现将“hello,”+aa的值赋值给变量bb:

public  static void test(){
    String input;
    input=vars.get("aa");
    String output = "hello,"+input;
    vars.put("bb",output);
    }

test();

 3、在Beanshell之前和之后分别添加取样器,添加监听器-查看结果树,运行查看执行结果

二、引用外部java源文件

还是用上面的例子,简单了解下用java文件如何实现Beanshell

1、用ecplise编写java文件如下:

public class BeanshellMethod {
    public static String test(String input) {
        String output ="Hello,"+input;
        return output;
    }

}

2、编写Beanshell取样器脚本如下:

source("D:/software/apache-jmeter-5.1.1/bin/test_beanshell/BeanshellMethod.java");  //java文件地址

String input=vars.get("aa");
String output = new BeanshellMethod().test(input);
vars.put("bb",output);

3、运行结果如下:

三、应用class文件

1、再上一个例子的基础上,进入java文件所在目录,执行javac xxx.java,生成xxx.class文件如下图:

 2、编写Beanshell取样器脚本如下:

addClassPath("D:/software/apache-jmeter-5.1.1/bin/test_beanshell");  //指定class文件路径

import BeanshellMethod;   //导入BeanshellMethod方法

String input=vars.get("aa");
String output = new BeanshellMethod().test(input);
vars.put("bb",output);

3、运行结果如下:

四、调用jar包

1、继续使用第一个例子,进入ecplise,将java文件导出jar包(在类上点击右键->Export->jar file),并将导出的jar包放置到D:\software\apache-jmeter-5.1.1\lib\ext路径下。这里需要注意下的是,需要重启下jmeter。

 2、编写beanshell脚本如下:

import BeanshellMethod;     //导入jar包

String input=vars.get("aa");
String output = new BeanshellMethod().test(input);
vars.put("bb",output);

3、运行结果如下:

4、通过${}可以直接调用。

  • 1
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JMeterBeanShell取样器是一种取样器,它使用了BeanShell脚本语言来执行自定义的测试逻辑。BeanShell取样器允许你编写Java或类似于Java的代码,这些代码将在每个线程运行时执行。 要使用BeanShell取样器,你需要在JMeter中添加一个BeanShell取样器元件。然后,在BeanShell取样器中编写你的自定义代码逻辑。你可以访问JMeter提供的各种内置对象和方法,以及执行各种测试操作。 下面是一个简单的例子,演示如何在BeanShell取样器中使用: 1. 添加BeanShell取样器元件到测试计划。 2. 在BeanShell取样器的“Script”字段中编写你的BeanShell代码。 例如,以下代码演示如何在BeanShell取样器中发送HTTP请求并获取响应: ```java import org.apache.http.HttpResponse; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.HttpClientBuilder; // 创建一个HTTP客户端 CloseableHttpClient client = HttpClientBuilder.create().build(); // 创建一个HTTP GET请求 HttpGet request = new HttpGet("http://example.com"); // 执行请求并获取响应 HttpResponse response = client.execute(request); // 打印响应内容 log.info("Response code: " + response.getStatusLine().getStatusCode()); log.info("Response body: " + EntityUtils.toString(response.getEntity())); // 关闭HTTP客户端 client.close(); ``` 请注意,你可以使用JMeter提供的预定义变量和方法来访问请求和响应数据。例如,可以使用`prev.getResponseDataAsString()`方法获取上一个取样器的响应数据。 希望这可以帮助你理解如何使用JMeterBeanShell取样器进行自定义操作。如果有任何进一步的问题,请随时提问!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值