Jmeter高阶系列--Beanshell脚本

1 概述
1.1 导语
你是否遇到以下场景时,头疼该如何解决?
测试场景复杂,测试入参需多样化;
自动化测试灵活,参数需动态生成;
操作的数据量大,数据不能直接罗列。
Jmeter的Beanshell脚本可以解决以上问题。
1.2 Beanshell简介
Beanshell是一种完全符合Java语法规范的松散类型脚本语言(这点和JS类似),并且又拥有自己的一些语法和方法。它用Java写成,是一个小型的、免费的、可以下载的、嵌入式的Java源代码解释器,具有对象脚本语言特性。解释器Jar文件大小为175k,非常精简。此外,它执行标准Java语句和表达式,也包括一些额外的脚本命令和语法。
Jmeter支持Beanshell脚本,即使用者可通过Beanshell脚本对Jmeter的基本功能进行扩充,实现更多更复杂的测试场景,满足多样化需求,比如自动化测试或者性能测试。
1.3 Beanshell类型
Jmeter中主要有六种Beanshell:
定时器:Beanshell Timer
前置处理器:Beanshell PreProcessor
采样器:Beanshell Sampler
后置处理器:Beanshell PostProcessor
断言:Beanshell断言
监听器:Beanshell Listener
2 Beanshell的常见使用方法
Jmeter中Beanshell常用的使用方法有四种:自定义函数、导入Jar包、导入class文件、Beanshell常用内置变量。
2.1 自定义函数
自定义函数,即直接在Beanshell中编写Java代码,Java代码可在IDE工具中调试通过后再复制进Jmeter的Beanshell中。
销售订单需要关联物料、客户、组织等基础资料,根据接口定义,可通过各基础数据的编码或者ID等进行关联,基础数据的编码通常由前缀加流水号加时间生成,可在Beanshell中编写生成流水号以及基础资料编码的Java方法,供脚本调用。
如下图,在Beanshell脚本中实现生成物料编码的功能。

代码如下:
Random itemRnd = new Random();
//生成一个n位的随机数字字符串
public static String getRandom(int len) {
String source = "0123456789";
Random r = new Random();
StringBuilder rs = new StringBuilder();
for (int j = 0; j < len; j++) {
rs.append(source.charAt(r.nextInt(10)));
}
return rs.toString();
}
String ItemNumbers="前缀"+getRandom(5);除了随机生成基础资料编码,我们在测试过程中,常常需要对请求参数进行URl编码和URL解码,进行测试和分析。在Beanshell脚本中实现URL编码和URL解码功能的方法如下。

代码如下:
/**
* @param the String needing decoder
* @return the result of decoder
* @Description 进行url解码
* @Example:getURLDecoderString("%5B%2240029%22%2C%2240153%22%5D"),result:["40029","40153"]
*/
public static String URLDecoderString(String strInput) {
if (null == strInput) {
return "";
}
String urldecoder = "";
try {
urldecoder = java.net.URLDecoder.decode(strInput, ENCODE);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return urldecoder;
}
/**
* @param the String needing encoder
* @return the result of encoder
* @Description 进行url编码
* @Example:getURLEncoderString("[\"40029\",\"40153\"]"),result:%5B%2240029%22%2C%2240153%22%5D
*/
public static String URLEncoderString(String strInput) {
if (null == strInput) {
return "";
}
String urlencoder = "";
try {
urlencoder = java.net.URLEncoder.encode(strInput, ENCODE);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return urlencoder;
}2.2 导入Jar包
编写代码内容较多时,推荐通过导入Java的Jar包来实现。
在Java的IDE工具中(比如eclipse)写好代码,然后把该类生成Jar包(在类上【点击右键】->【Export】->【Jar file】)。
导出的Jar包放到Jmeter
Jmeter高阶系列--Beanshell脚本
声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。



