BeanShell 在 JMeter中的使用

我们在使用JMeter的时候,有时候会需要一些逻辑的运行,而JMeter就有些乏力了,但是1.9.2版本之后 JMeter开始支持Beanshell使一切都变成了可能

介绍

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

具体问题

外部jar包引用

一个很普遍的例子,我们有一个登录的接口,登录的密码是要求md5加密的,正常我们可以简单的写死一个md5的密码来实现,但是更好的方法当然就是通过参数化后获取到对应的密码进行MD5加密后再返回。

我们的想法是通过引用一个外部的jar包,调用其中的MD5加密的方法。

首先我们先看看MD5加密

package com.cvte.sai;

import java.security.MessageDigest;

public class MD5Utils {

    public final static String MD5(String s) {
        char hexDigits[]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
        try {
            byte[] btInput = s.getBytes();
            // 获得MD5摘要算法的 MessageDigest 对象
            MessageDigest mdInst = MessageDigest.getInstance("MD5");
            // 使用指定的字节更新摘要
            mdInst.update(btInput);
            // 获得密文
            byte[] md = mdInst.digest();
            // 把密文转换成十六进制的字符串形式
            int j = md.length;
            char str[] = new char[j * 2];
            int k = 0;
            for (int i = 0; i < j; i++) {
                byte byte0 = md[i];
                str[k++] = hexDigits[byte0 >>> 4 & 0xf];
                str[k++] = hexDigits[byte0 & 0xf];
            }
            return new String(str);
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }
}
  1. 我们将上面的工程生成一个名为MD5Enc.jar,
  2. 将jar包放在JMeter的lib目录下,并且在测试计划中引用该jar包,见图:

这里写图片描述
3. 下来我们创建一个前置处理器:BeanShell PreProcessor,编写脚本

import com.cvte.sai.MD5Utils;
String password = vars.get("password");
vars.put("password",MD5Utils.MD5(password));
  1. 这样子我们就能够将参数 password替换成我们md5加密过的内容了。
BeanShell 断言使用

JMeter提供了很多的断言方式,更自由的方式当然是使用BeanShell进行断言了。
因为我们做接口测试,除了正常的登录,当然还有一些类似于用户名不存在,密码不正确的测试用例,这个时候我们可能会根据不同的StatuCode进行判断。
步骤还是一样
1. 我们先创建一个断言:BeanShell断言
2. 编写我们的脚本:

import org.json.*;
import java.util.Arrays;
String result = vars.get("result_code");
String jsonString = prev.getResponseDataAsString();
JSONObject responseJson = new JSONObject(jsonString);
if (responseJson.getInt("statusCode") == result) {
    Failure = true;
    FailureMessage = "statusCode与实际值不一致,期望值"+result+"实际值"+responseJson.getInt("statusCode").toString();
}
log.info(jsonString);

以上的result_code是参数化预期的一个结果返回值。

这样子我们就能够测试不同的情况来。这种方式会比响应断言灵活很多

结束语

Jmeter中包括多种BeanShell 用法基本都是一样的。只是作用的地方不同而已,可以都尝试看看。
定时器:  BeanShell Timer
前置处理器:BeanShell PreProcessor
采样器:  BeanShell Sampler
后置处理器:BeanShell PostProcessor
断言:   BeanShell断言
监听器:  BeanShell Listener

  • 8
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JMeter是一款功能强大的负载测试工具,而Beanshell则是JMeter一个非常重要的组成部分。Beanshell是一个基于Java语言的脚本语言,它允许你在JMeter使用Java代码来进行各种操作,包括读取文件、发送邮件、执行数据库操作等等。 以下是JMeter Beanshell的安装使用步骤: 1. 下载Beanshell 在官网下载最新的Beanshell版本,解压到任意目录。 2. 将Beanshell添加到JMeter的classpath 打开JMeter的bin目录下的jmeter.bat(Windows)或jmeter.sh(Linux),找到如下代码: set CLASSPATH=%CLASSPATH%;%JMETER_HOME%\lib\ext\ApacheJMeter_core.jar;%JMETER_HOME%\lib\jorphan.jar 将其修改为: set CLASSPATH=%CLASSPATH%;%JMETER_HOME%\lib\ext\ApacheJMeter_core.jar;%JMETER_HOME%\lib\jorphan.jar;%BEANSHELL_HOME%\bsh-2.0b4.jar 其BEANSHELL_HOME为Beanshell的安装目录。 3. 在JMeter使用BeanshellJMeter使用Beanshell非常简单。只需要添加一个Beanshell Sampler,然后在Sampler编写Beanshell脚本即可。 例如,以下是一个简单的Beanshell脚本,用于输出当前时间: import java.text.SimpleDateFormat; import java.util.Date; SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String currentTime = format.format(new Date()); log.info("Current time is " + currentTime); 在Sampler选择Beanshell Sampler,然后将以上脚本复制到Script框即可。运行测试计划后,可以在JMeter的日志看到输出的当前时间。 总结 JMeter BeanshellJMeter非常重要的组成部分,它可以让你在测试使用Java代码来进行各种操作。安装和使用Beanshell非常简单,只需要下载Beanshell,将其添加到JMeter的classpath,然后在Sampler编写Beanshell脚本即可。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值