BeanShell 在 JMeter中的使用
2016-03-18 21:46
543 查看
我们在使用JMeter的时候,有时候会需要一些逻辑的运行,而JMeter就有些乏力了,但是1.9.2版本之后 JMeter开始支持Beanshell使一切都变成了可能
- BeanShell是一种完全符合Java语法规范的脚本语言,并且又拥有自己的一些语法和方法;
- BeanShell是一种松散类型的脚本语言(这点和JS类似);
- BeanShell是用Java写成的,一个小型的、免费的、可以下载的、嵌入式的Java源代码解释器,具有对象脚本语言特性,非常精简的解释器jar文件大小为175k。
- BeanShell执行标准Java语句和表达式,另外包括一些脚本命令和语法。
官网:http://www.BeanShell.org/
我们的想法是通过引用一个外部的jar包,调用其中的MD5加密的方法。
首先我们先看看MD5加密
我们将上面的工程生成一个名为MD5Enc.jar,
将jar包放在JMeter的lib目录下,并且在测试计划中引用该jar包,见图:
3. 下来我们创建一个前置处理器:BeanShell PreProcessor,编写脚本
这样子我们就能够将参数 password替换成我们md5加密过的内容了。
因为我们做接口测试,除了正常的登录,当然还有一些类似于用户名不存在,密码不正确的测试用例,这个时候我们可能会根据不同的StatuCode进行判断。
步骤还是一样
1. 我们先创建一个断言:BeanShell断言
2. 编写我们的脚本:
以上的result_code是参数化预期的一个结果返回值。
这样子我们就能够测试不同的情况来。这种方式会比响应断言灵活很多
定时器: BeanShell Timer
前置处理器:BeanShell PreProcessor
采样器: BeanShell Sampler
后置处理器:BeanShell PostProcessor
断言: BeanShell断言
监听器: BeanShell Listener
介绍
什么是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; } } }
我们将上面的工程生成一个名为MD5Enc.jar,
将jar包放在JMeter的lib目录下,并且在测试计划中引用该jar包,见图:
3. 下来我们创建一个前置处理器:BeanShell PreProcessor,编写脚本
import com.cvte.sai.MD5Utils; String password = vars.get("password"); vars.put("password",MD5Utils.MD5(password));
这样子我们就能够将参数 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
相关文章推荐
- shell 快捷操作
- xshell必要的设置
- PowerShell Studio 2016
- shell--linux系统脚本
- Calabash 快速入门 (Android)
- 客户同步的脚本
- 希尔排序(shell‘ sort)
- Oralce SQLPlus 以及shell脚本中spool输出到文件时的格式化输出
- shell传入参数的处理
- shell脚本一键安装mysql5.7.x
- TLCL学习笔记
- 使用Xshell&Xftp实现远程登录及文件传输
- linux 改变shell
- 【Linux】shell字符串分割、数组访问、条件判断
- Hbase常用shell
- 输入adb shell 时 提示error: more than one device and emulator
- shell命令-head/tail
- dll和opencv和shell的关联
- struts2和sybase和shell的关联
- Xshell 更改字体配色