学习beanshell时有不少的例子、遇到不少问题。在此记录下。

A1:使用Beanshell请求作为测试请求

一个打包的Jar包,直接对其内的方法进行测试。

第一步:将接口jar包要放到%JMETER_HOME%\lib目录

第二步:编写请求。

 

 

A2:共享线程变量

JMeter中线程间共享变量可以通过定义属性值来完成,JMeter启动时会读取一些属性文件,比如jmeter.properties、user.properties,这些属性值是可以增加的,也可以修改的,通过BeanShell可以对其进行更改。

定义变量:以BeanShell Sampler为例,在其中通过props.put()来增加属性,props.get()来获取属性。如:props.put("param_a","root");

使用变量:在后续请求如Java请求中通过 ${__property(【属性名称】,,)}来获取。如:${__property(param_a,,)} 来使用。

示例:

在线程组1中使用__setProperty定义属性值(全局变量),将所需变量值${param_A}设置为属性值。

String token = bsh.args[0];//输入值为assfd
//第一种写法,测试时token与${token}两种写法都无法调用变量
${__setProperty(param_A,${token},)};
//第二种写法
props.put("param_B",token);

debug请求中,打开属性与变量。查看结果树中,属性值结果为:

param_A=${token}

param_B=assfd

在线程组2,beanshell中输入 

${__property(param_A,GROUP2_A,)};
${__property(param_B,GROUP2_B,)};

 

debug请求中,打开属性与变量。查看结果树中,变量值结果为:

GROUP2_A=${token}
GROUP2_B=assfd

 

疑问:1)${__setProperty(param_A,token,)}; 这里token是变量,但是实际是将这个字符串拷贝存到param_A属性里的了。换成${token}也是如此。

   2)props.put添加的属性值,不会写到jmeter.properties文件里,只在当前测试计划中生效。比如当前加了一个属性A,执行过后在当前测试计划中会一直存在,即使beanshell文件中已无这个属性值的定义也是如此。重新打开一个测试计划,属性A就不存在了。

 

 

A3:使用 BeanShell 断言判断用例成功与否

用beanshell做断言结果判断

log.info(SampleResult.getResponseDataAsString());

boolean result = false;

String uid = vars.get("uid");
String token = vars.get("token");

if (SampleResult.getResponseCode().equals("200") && token.contains(uid)) {
    result = true;
} else {
    result = false;
}
SampleResult.setSuccessful(result);
View Code

相关文章:

  • 2021-07-19
  • 2021-11-25
  • 2022-12-23
  • 2021-10-06
  • 2021-04-30
  • 2022-01-13
  • 2021-12-22
  • 2022-01-06
猜你喜欢
  • 2021-11-08
  • 2021-07-13
  • 2021-06-30
  • 2021-08-26
  • 2022-03-04
  • 2021-05-30
  • 2021-08-30
相关资源
相似解决方案