MeterSphere 接口测试 Beanshell 脚本使用:设置/获取接口信息、变量

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

 MeterSphere 过程中,或多或少都会接触些BeanShell,它会使工具的使用,变得更灵活。文章记录了一些常用的方法,还有很多场景需要获取/设置当前测试用例的信息,找到具体的内置对象,打开官网文章,在method一栏即可查阅。

BeanShell是什么?
● BeanShell是一种完全符合Java语法规范的脚本语言,并且又拥有自己的一些语法和方法;
● BeanShell是一种松散类型的脚本语言;
● BeanShell是用Java写成的,一个小型的、免费的、可以下载、嵌入式的Java源代码解释器,具有对象脚本的特性;
● BeanShell可以执行标准Java语句和表达式,以及另外自身的一些脚本命令和语法。


1. BeanShellSampler 常用内置对象

内置对象

说明

官方文档

vars

针对变量进行取值和赋值,而且这个取值和赋值行为只对当前线程的变量生效,而非全部线程。

​https://jmeter.apache.org/api/org/apache/jmeter/threads/JMeterVariables.html​

prev

prev 提供对当前取样器结果的访问能力

​https://jmeter.apache.org/api/org/apache/jmeter/samplers/SampleResult.html​

sampler

获取当前取样器中信息

​https://jmeter.apache.org/api/org/apache/jmeter/protocol/http/sampler/HTTPSamplerProxy.html#HTTPSamplerProxy--​


2. Beanshell 变量赋值和取值

2.1 存放变量

2.1.1 var.put()

put

方法声明:public void put(String key, String value)

Parameters:key - the variable namevalue - the variable value

功能:创建或更新字符串变量

put

​vars.put(​​​​"name"​​​​,​​​​"温一壶清酒 博客园"​​​​);​

​String varsName = vars.get(​​​​"name"​​​​);​

​log.info(​​​​"varsName:"​​​​+ varsName);​



2.1.2 var.putObject()

putObject

方法声明:public void putObject(String key,Object value)

Parameters:key - the variable namevalue - the variable value

功能:创建或更新一个非字符串变量。

putObject


​vars.putObject(​​​​"number"​​​​,​​​​8​​​​);​

​vars.putObject(​​​​"list"​​​​,[​​​​2​​​​,​​​​4​​​​,​​​​6​​​​,​​​​8​​​​,​​​​10​​​​]);​

​vars.putObject(​​​​"array"​​​​,[​​​​1​​​​,​​​​3​​​​,​​​​5​​​​,​​​​7​​​​,​​​​9​​​​,​​​​11​​​​] as ​​​​int​​​​[]);​

​vars.putObject(​​​​"map"​​​​,[​​​​"name"​​​​:​​​​"温一壶清酒"​​​​,​​​​"source"​​​​:​​​​"博客园"​​​​]);​

​log.info(​​​​"number:"​​​​+ vars.getObject(​​​​"number"​​​​).toString());​

​log.info(​​​​"list:"​​​​+ vars.getObject(​​​​"list"​​​​).size());​

​log.info(​​​​"array:"​​​​+ vars.getObject(​​​​"array"​​​​).length);​

​log.info(​​​​"map:"​​​​+ vars.getObject(​​​​"map"​​​​).get(​​​​"name"​​​​));​



2.2 获取变量

2.2.1 var.get()

方法声明:public String get(String key)

功能:获取变量的值并将其转换为字符串,若变量存在则将值转换为字符串,否则返回 null


​String varsSex = vars.get(​​​​"sex"​​​​);​

​log.info(​​​​"varsSex:"​​​​+ varsSex);​



2.2.2 var.getObject()

方法声明:public Object getObject(String key);

功能:获取变量的值(不转换为字符串)。若变量不存在则返回null

getObject


​String path = var.getObject(​​​​"path"​​​​);​

​log.info(​​​​"path:"​​​​+ path);​

2.3 移除变量

remove

方法声明:public Object remove(String key)

功能:删除一个变量,并返回变量的值,若变量不存在则返回 null

​vars.put(​​​​"name"​​​​,​​​​"温一壶清酒"​​​​);​

​vName = vars.remove(​​​​"name"​​​​);​

​log.info(​​​​"vName:"​​​​+ vName);​

 

​vSex = vars.remove(​​​​"sex"​​​​);​

​log.info(​​​​"vSex:"​​​​+ vSex);​


2.4 批量赋值变量

方法声明:

public void putAll(​Map​<​String​,?> vars)

Parameters:

​Map​<​String​,?> 以下map的子类均可使用:​AbstractMap​​Attributes​​AuthProvider​​ConcurrentHashMap​​ConcurrentSkipListMap​​EnumMap​​HashMap​​Hashtable​​IdentityHashMap​​LinkedHashMap​​PrinterStateReasons​​Properties​​Provider​​RenderingHints​​SimpleBindings​​TabularDataSupport​​TreeMap​​UIDefaults​​WeakHashMap​

功能:批量增加/更新变量的值


​Map map = ​​​​new​​​ ​​HashMap();​

​map.put(​​​​"name"​​​​,​​​​"测试"​​​​);​

​map.put(​​​​"age"​​​​,​​​​88​​​​);​

​map.put(​​​​"hobby"​​​​,​​​​"游戏"​​​​);​

​vars.putAll(map);​

 

​String name = vars.get(​​​​"name"​​​​);​

​log.info(​​​​"打印名称"​​​​+name);​



3. Beanshell 获取响应体、响应状态码、请求头

3.1 获取响应状态码

方法声明:public String getResponseCode()

功能:获取响应状态码


​responseCode = prev.getResponseCode() ;​

​log.info(​​​​"responseCode:"​​​ ​​+ responseCode);​

 

​2022​​​​-​​​​12​​​​-​​​​04​​​ ​​15​​​​:​​​​34​​​​:​​​​29​​​​,​​​​057​​​ ​​INFO o.a.j.u.BeanShellTestElement: responseCode:​​​​200​



3.2 获取是否为OK对应的状态码

方法声明:public boolean isResponseCodeOK()

功能:判断响应状态码是否为OK对应的状态码(200),结果只有true和false


​responseCodeBoolean = prev.isResponseCodeOK();​

​log.info(​​​​"responseCodeBoolean:"​​​ ​​+ responseCodeBoolean);​

 

​2022​​​​-​​​​12​​​​-​​​​04​​​ ​​15​​​​:​​​​36​​​​:​​​​35​​​​,​​​​077​​​ ​​INFO o.a.j.u.BeanShellTestElement: responseCodeBoolean:​​​​true​



3.3 获取String类型的响应结果

方法声明:
public String getResponseDataAsString()


​prevResponse = prev.getResponseDataAsString();​

​log.info(​​​​"prevResponse:"​​​ ​​+ prevResponse);​



3.4 获取取样器结果的响应头

方法声明:
public ​String​ getResponseHeaders()


​// 获取响应头​

​String ResponseHeaders = prev.getResponseHeaders();​

​log.info(​​​​"ResponseHeaders:"​​​ ​​+ ResponseHeaders);​



3.5获取取样器请求头

方法声明:

public ​String​ getRequestHeaders()


​String RequestHeaders = prev.getRequestHeaders();​



3.6 获取URL以字符串返回

方法声明:

public ​String​ getUrlAsString()


​String UrlAsString = prev.getUrlAsString();​

 

​2022​​​​-​​​​12​​​​-​​​​01​​​ ​​20​​​​:​​​​42​​​​:​​​​51​​​ ​​INFO 6c5f7ed6 ​​​​1​​​​-​​​​1​​​ ​​打印https:​​​​//north-xxx.com/mock/100035/sso/signin​



3.7 设置响应体

方法声明:

public void setResponseData(​String​ response)


​prev.setResponseData(​​​​"aaaaaaaaaaaaaaa"​​​​);​


MeterSphere 接口测试 Beanshell 脚本使用:设置/获取接口信息、变量_字符串


4. Beanshell 获取请求参数

4.1 获取请求请求体内容

方法声明:

public ​CollectionProperty​ getArguments()


​import​​​ ​​org.apache.jmeter.config.Arguments;​

 

​//获取请求的body参数​

​Arguments args = sampler.getArguments();​

 

​//将获取到的参数转换成字符串格式​

​String json = args.getArgument(​​​​0​​​​).getValue();​

​//注意:getArgument(0)中的0,一般获取到的请求参数中只有第0个数据。​

​//在获取返回值时,才会有多个数据列​

 

​log.info(​​​​">>>>>>>>>>>{}"​​​​, json);​

​//输出值为:>>>>>>>>>>>{"userId":"123456","userType":"123","type":"1"}​



4.2 获取请求query参数部分

方法声明:

public String getQuery()


​String requestQuery = sampler.getUrl().getQuery();​

​log.info(​​​​">>>>>>>>>>>{}"​​​​, requestQuery);​

 

​2022​​​​-​​​​12​​​​-​​​​05​​​ ​​12​​​​:​​​​27​​​​:​​​​54​​​ ​​INFO e6c1ed9f ​​​​1​​​​-​​​​1​​​ ​​>>>>>>>>>>>name=​​​​1​​​​&age=​​​​1​



4.3 获取协议

方法声明:

public ​String​ getProtocol()


​String protocol = sampler.getUrl().getProtocol();​

​log.info(​​​​">>>>>>>>>>>{}"​​​​, protocol);​

 

​2022​​​​-​​​​12​​​​-​​​​05​​​ ​​12​​​​:​​​​13​​​​:​​​​40​​​ ​​INFO 46e4683d ​​​​1​​​​-​​​​1​​​ ​​>>>>>>>>>>>https​



4.4 获取请求方式

方法声明:

public ​String​ getMethod()

返回值为大写GET


​String method = sampler.getMethod();​

 

​2022​​​​-​​​​12​​​​-​​​​05​​​ ​​12​​​​:​​​​23​​​​:​​​​06​​​ ​​INFO bd7c8d4a ​​​​1​​​​-​​​​1​​​ ​​>>>>>>>>>>>GET​



5. Beanshell 使用过程的坑

5.1 泛型问题

beanshell里面使用map时不能指定类似于java的Map<String,String> map = new HashMap<String,String>(),这样写会报错,只能用Map params = new HashMap();

5.1 获取问题

HeaderManager headerManager = sampler.getHeaderManager();这个方法不能获取默认的header,只能获取自己添加的header信息,比如自己再header里面加的token信息,默认的header信息,例如User-Agent是获取不到的,在获取headers之前一定要先判断一下header列表是否为空,如果不为空直接获取会报错

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: shell