BeanShell-java脚本
BeanShell-java脚本
导入jar包
测试计划中,添加jar包,如下图所示
同时,将jar包放到apache-jmeter-5.3\lib\ext\路径下
java脚本中,参数调用
BeanShell中添加参数名称如下图一
参数读取:FSL = vars.get("FSL");
将参数读取到FSL,如下图所示
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.util.ArrayList;
import java.util.List;
import com.travelsky.test.*;
import com.travelsky.test.TUMSAPI;
import com.travelsky.mq.*;
import com.ibm.mq.*;
TUMSAPI ta = new com.travelsky.test.TUMSAPI();
FSL = vars.get("FSL");
try{
//ta.conn("QL_TYPET_OUT_DEP1","10.221.3.167", "14190","S_TUMS","QM_TUMS");//ASR Q系统CA
ta.conn("QL_TYPET_OUT_DEP1","10.225.9.115", "14190","S_TYPEB","QM_TUMS");
}
catch(Exception e) {
}
public String send() throws Throwable{
String res;
String content = "20NOV20 130745001\r"+FSL;
log.info(content);
res = ta.putB_p("DEPFS1E","YQJTEST",content,"FSL");
log.info(res);
return res;
}
String res = send();
if (res.equals("54321")){
log.info("success");
}
ta.disConn();
将类的实例设置为全局变量
import com.travelsky.test.*; import com.travelsky.test.TUMSAPI; import com.travelsky.mq.*; import com.ibm.mq.*; TUMSAPI ta1 = new com.travelsky.test.TUMSAPI(); log.info(ta1.getClass().toString());
// 设置全局变量,线程组内使用 vars.putObject("ta", ta1); // vars想要赋值类实例,需要使用putObject ta = vars.getObject("ta");
// 设置全局变量,跨线程组调用
props.put("ta", ta1); // props可以直接使用类实例 ta = props.get("ta");
遇到问题
一开始,是先使用了vars.put('FSL', bsh.args[0]),目的是为了将上面图中的${FSL}传入到参数中,其实这个使用方法存在一定问题,不用put,直接get就可以得到FSL参数的值,实际流程如上面所写。
在使用vars.put('FSL', bsh.args[0])过程中发现,bsh默认的分隔符是空格,所以导致我FSL参数只能取到空格前的一部分而空格后的无法取到。解决方法是输入超出被分割数组长度的数字(但是个人感觉不太容易实现,尤其是类似json报文之类的)或者使用bsg.args[-1]即可获得整体值。