beanshell介绍
- BeanShell是一种完全符合Java语法规范的脚本语言,并且又拥有自己的一些语法和方法;
- BeanShell是一种松散类型的脚本语言(这点和JS类似);
- BeanShell是用Java写成的,一个小型的、免费的、可以下载的、嵌入式的Java源代码解释器,具有对象脚本语言特性,非常精简的解释器jar文件大小为175k。
- BeanShell执行标准Java语句和表达式,另外包括一些脚本命令和语法。
- github地址
Beanshell常用的内置对象
JMeter在它的BeanShell中内置了变量,用户可以通过这些变量与JMeter进行交互,其中主要的变量及其使用方法如下
- 全部类及其使用:https://jmeter.apache.org/api/allclasses-noframe.html
bsh.args对象获取数组参数
多个参数使用空格隔开,使用
bsh.args
可获取传入的数组参数,使用方法:
bsh.args[0]bsh.args[1]bsh.args[2]
Logger-log内置对象
org.apache.log.Logger:The object interacted with by client objects to perform logging.
log日志写入
写入信息到jmeber.log文件,使用方法:
log.info(\"info msg\");log.error(\"error msg\");log.warn(\"warning msg\");log.debug(\"debug msg\");
查看jmeter日志的方式
- 在gui模式查看:
选项
->
日志查看
或者点右上角的⚠️图标,即可在界面上查看jmeter日志;
- 在未指定日志文件路径情况下,查看
/apache-jmeter-5.3/bin
目录下的
jmeter.log
文件
JMeterVariables-vars内置对象
org.apache.jmeter.threads.JMeterVariables:Class which defines JMeter variables. These are similar to properties, but they are local to a single thread.
操作jmeter变量,这个变量实际引用了JMeter线程中的局部变量容器(本质上是Map),它是测试用例与BeanShell交互的桥梁,常用方法:
获取字符串变量值
vars.get(String key)
vars.get(\"domain\"); //获取字符串变量domain的值
设置字符串变量值到jmeter变量中
vars.put(String key,String value)
注意:value必须为String,传入其它类型的参数必须转成String,否则会报错。
int adultNum = 8;vars.put(\"adultNum\",adultNum.toString()); //将adultNum的转字符串设置为jmeter的adultNum变量值
获取非String类型变量值
vars.getObject(String key)
//personInfo为类型为Object对象的人信息vars.getObject(\"personInfo\");
设置非String类型变量值
vars.putObject(String key, Object value)
List list = new ArrayList();list.add(\"a\");list.add(\'b\');list.add(\"c\");vars.put(\"list\", list); //将list对象放至到jmeter的list变量中
JMeterContext-ctx内置对象
org.apache.jmeter.threads.JMeterContext:Holds context for a thread. Generated by JMeterContextService. The class is not thread-safe – it is only intended for use within a single thread. 该变量引用了当前线程的上下文
获取响应数据 ctx.getPreviousResult()
//SampleResult需要import对象import org.apache.jmeter.samplers.SampleResult;SampleResult result = ctx.getPreviousResult(); //getPreviousResult()返回SampleResult对象String RequestHeaders = result.getRequestHeaders(); //getRequestHeaders()方法返回请求headers字符串String ResponseHeaders = result.getResponseHeaders(); //getResponseHeaders() 返回响应headers字符串String responseCode = result.getResponseCode(); //getResponseCode() 返回响应状态码字符串URL url = result.getURL(); //getURL() 返回请求URL对象
SampleResult-prev内置对象
org.apache.jmeter.samplers.SampleResult:This is a nice packaging for the various information returned from taking a sample of an entry.获取前面的sample返回的信息
prev相当于ctx.getPreviousResult()
String ResponseData = prev.getResponseDataAsString(); //getResponseDataAsString()返回响应文本String RequestHeaders = prev.getRequestHeaders(); //getRequestHeaders()方法返回请求headers字符串String ResponseHeaders = prev.getResponseHeaders(); //getResponseHeaders() 返回响应headers字符串String responseCode = prev.getResponseCode(); //getResponseCode() 返回响应状态码字符串URL url = prev.getURL(); //getURL() 返回请求URL对象String urlStr = prev.getUrlAsString(); //getUrlAsString() 返回请求URL字符串
常用beanshell脚本
后续再补~