[转帖]【jmeter】BeanShell用法详细汇总

jmeter,beanshell,用法,详细,汇总 · 浏览次数 : 0

小编点评

**BeanShell 简介** BeanShell 是一个 Java 语言的开源解释器,可用于运行 Java 应用程序。它是一个小型、免费的、可下载的 Java源代码解释器,具有对象脚本语言特性,非常精简的解释器jar文件大小为 175k。 **用法** **1. 操作变量** * `vars.get("name")` 从变量 `name` 中获取值。 * `vars.put("key", "value")` 将 `key` 和 `value` 写入变量 `key` 中。 * `source("代码路径")` 从 Java 文件中引入代码并执行方法。 **2. 引入外部 Java 文件** * `vars.get("filename")` 从变量 `filename` 中获取 Java 类路径。 * `Class.forName("myClass")` 获取类 `MyClass` 的实例。 **3. 引入外部 Jar 包** * 在 Eclipse 中编写 Java 代码并构建 JAR 包。 * 在 Test Plan 的右键中添加 Jar 包。 **4. 引用外部变量** * `vars.put("result", Arrays.toString(result))` 将数组 `result` 的字符串形式存储在变量 `result` 中。 **5. 提取 JSON 数据** * `import org.json.*;` 引入 JSON 解析类。 * `String response_data = prev.getResponseDataAsString()` 从响应中获取 JSON 数据。 * `JSONObject data_obj = new JSONObject(response_data)` 解析 JSON 数据。 **6.断言** * `TxtWrite` 用于写入断言结果到日志文件。 * 使用 `assert_data` 作为断言条件,如果响应中包含 `assert_data`,则设置 `Failure` 为 `false`。 **示例** ```beanhell import org.json.*; String response_data = prev.getResponseDataAsString(); JSONObject data_obj = new JSONObject(response_data); String apps_str = data_obj.get("body").get("apps").toString(); JSONArray apps_array = new JSONArray(apps_str); String[] result = new String[apps_array.length]; for (int i = 0; i < apps_array.length; i++) { JSONObject app_obj = new JSONObject(apps_array.get(i).toString()); String name = app_obj.get("name").toString(); result[i] = name; } vars.put("result", Arrays.toString(result)); ```

正文

一、什么是Bean Shell

  • BeanShell是用Java写成的,一个小型的、免费的、可以下载的、嵌入式的Java源代码解释器,具有对象脚本语言特性,非常精简的解释器jar文件大小为175k。
  • BeanShell执行标准Java语句和表达式,另外包括一些脚本命令和语法。

      官网地址:http://www.BeanShell.org/

二、BeanShell的用法

2.1操作变量:

通过使用Bean shell内置对象vars可以对变量进行存取操作

 a) vars.get("name"):从jmeter中获得变量值

 b) vars.put("key","value"):数据存到jmeter变量中

2.2操作属性:

通过使用Bean shell内置对象props 可以对属性进行存取操作

 a) props.get("START.HMS");  注:START.HMS为属性名,在文件jmeter.properties中定义 

 b) props.put("PROP","12345");

2.3引用外部java文件:

假如我有一个java 源文件,名为:myJava.java,代码如下:

  1. package demo;
  2. public class Myclass
  3. {
  4. public int add(int a, int b)
  5. {
  6. return a + b;
  7. }
  8. }

在bean shell中通过source("代码路径")方法引入java,然后调用方法和java一样。

运行结果, 获取到值:

​​​​​​​

 

 2.4引用外部class文件:

直接把上例中的myJava.java文件编译成class文件,用addClassPath("C:\\")方法引入 class文件,在用import导入包及类,然后就可以像java一样调用了

2.5引用外部Jar包: 

1、在eclipse写好代码,然后把该类打成jar包(在工程上点击右键->Export->jar file)将jar包放到jmeter目录\apache-jmeter-5.3\lib\ext下

或者,在Test Plan的右侧面板最下方直接添加需要引用的jar包,如下图:

2.重启jmeter

3.添加个请求,在该请求下添加一个BeanShell PreProcessor

 4.在登录请求接口下使用${encode_username},${encode_password}引用就可以加密登录了

三、Bean Shell常用内置变量

    JMeter在它的BeanShell中内置了变量,用户可以通过这些变量与JMeter进行交互,其中主要的变量及其使用方法如下:

  • log:写入信息到jmeber.log文件,使用方法:log.info(“This is log info!”);

  • ctx:该变量引用了当前线程的上下文,使用方法可参考:org.apache.jmeter.threads.JMeterContext

  • vars - (JMeterVariables):操作jmeter变量,这个变量实际引用了JMeter线程中的局部变量容器(本质上是Map),它是测试用例与BeanShell交互的桥梁,常用方法:

    a) vars.get(String key):从jmeter中获得变量值

    b) vars.put(String key,String value):数据存到jmeter变量中

    更多方法可参考:org.apache.jmeter.threads.JMeterVariables

  • props - (JMeterProperties - class java.util.Properties):操作jmeter属性,该变量引用了JMeter的配置信息,可以获取Jmeter的属性,它的使用方法与vars类似,但是只能put进去String类型的值,而不能是一个对象。对应于java.util.Properties。 

  • prev - (SampleResult):获取前面的sample返回的信息,常用方法:

    a) getResponseDataAsString():获取响应信息

    b) getResponseCode() :获取响应code

    更多方法可参考:org.apache.jmeter.samplers.SampleResult

  • sampler - (Sampler):gives access to the current sampler

  

四、提取json数据

需求:提取sample返回json数据中所有name字段值,返回的json格式如下: 

{“body”:{“apps”:[{“name1”:”111”},{“name2”:”222”}]}} 

BeanShell 后置处理程序添加如下代码:

  1. import org.json.*;
  2. String response_data = prev.getResponseDataAsString();
  3. JSONObject data_obj = new JSONObject(response_data);
  4. String apps_str = data_obj.get("body").get("apps").toString();
  5. JSONArray apps_array = new JSONArray(apps_str);
  6. String[] result = new String[apps_array.length()];
  7. for(int i=0;i<apps_array.length();i++){
  8. JSONObject app_obj = new JSONObject(apps_array.get(i).toString());
  9. String name = app_obj.get("name").toString();
  10. result[i] = name;
  11. }
  12. vars.put("result", Arrays.toString(result));

五、断言

  1. import txtWrite.*;
  2. String response_data = prev.getResponseDataAsString();
  3. String assert_data="科目${num}";
  4. TxtWrite writeData=new TxtWrite();
  5. if(response_data.indexOf(assert_data)!=-1)//请求的response中有包含自定义字符,则断言结果为false
  6. {
  7. Failure=false;
  8. String message="${__time(yyyy-MM-dd HH:mm:ss,)} 新建科目【"+assert_data+"】成功";
  9. FailureMessage=message;
  10. writeData.contentToTxt("D:/xykyInterfaceAutoTest.log",message);
  11. }else
  12. {
  13. Failure=true;
  14. String message="${__time(yyyy-MM-dd HH:mm:ss,)} 新建科目【"+assert_data+"】失败----------";
  15. String response="本次请求response数据:"+prev.getResponseDataAsString()+"----------";
  16. String need_assert="需要断言的数据:"+assert_data;
  17. FailureMessage=message+response+need_assert;
  18. writeData.contentToTxt("D:/xykyInterfaceAutoTest.log",message+response+need_assert);
  19. }
​​​​​​
文章知识点与官方知识档案匹配,可进一步学习相关知识
Java技能树首页概览121524 人正在系统学习中

与[转帖]【jmeter】BeanShell用法详细汇总相似的内容:

[转帖]【jmeter】BeanShell用法详细汇总

一、什么是Bean Shell BeanShell是用Java写成的,一个小型的、免费的、可以下载的、嵌入式的Java源代码解释器,具有对象脚本语言特性,非常精简的解释器jar文件大小为175k。BeanShell执行标准Java语句和表达式,另外包括一些脚本命令和语法。 官网地址:http://w

[转帖]【jmeter】BeanShell用法详细汇总

一、什么是Bean Shell BeanShell是用Java写成的,一个小型的、免费的、可以下载的、嵌入式的Java源代码解释器,具有对象脚本语言特性,非常精简的解释器jar文件大小为175k。BeanShell执行标准Java语句和表达式,另外包括一些脚本命令和语法。 官网地址:http://w

[转帖]jmeter 使用beanshell 编写脚本

目录 一、介绍 1.1 介绍 1.2 下载&启动 二、jmeter中创建beanshell脚本 三、jmeter与beanshell 数据交互 3.1 例子1 beanshell 将变量传给jmeter 3.2 例子二 jmeter 接收beanshell 生成的变量 四、jmeter中Beansh

[转帖]jmeter编写测试脚本大全

目录 一、背景 二、按照功能划分 2.1 加密处理、验签处理 2.2 jmeter 使用beanshell 编写脚本 2.3 jmeter脚本报错大全 2.4 jmeter打印log 2.5 jmeter压测java代码 2.6 jmeter读取数据保证每个线程拿到的数据唯一 2.7 jmeter设

[转帖]Jmeter正则提取器常用的几种方式

https://www.cnblogs.com/a00ium/p/10483741.html 使用jmeter的同学都知道,jmeter提供了各种各样的提取器,如jsonpath、Beanshell、Xpath、正则等!!! 我们就针对正则提取器如何使用进行说明。 举例说明:假设取sessionId

[转帖]学会BeanShell,才敢说自己懂Jmeter

https://baijiahao.baidu.com/s?id=1717349581352944280&wfr=spider&for=pc jmeter的BeanShell Sampler,可以直接引用java代码,有下面3种方式: 直接输入java代码 导入java文件 导入class文件 Be

[转帖]jmeter及serveragent的安装、常见报错及解决方法

一.说明: 1.jmeter必须在java环境下运行 2.jmeter抓包可以用自带服务器录制抓取,也可以手动网页抓取(含fiddler),也可以用badboy(更推荐手动抓取和badboy) 3.后面单独开一篇来说明各个功能的用处。 二.安装: 1.jmeter.properties配置:在jme

[转帖]JMETER性能监控之serverAgent

对linux服务器的服务进行压测时,服务器的运行情况可以通过添加插件serverAgent来观察,可以实时监控性能指标。 1 (一)环境准备 1、下载zip包ServerAgent-2.2.3.zip 2、在服务器中,创建一个文件夹serveragent,名字随便起 mkdir serveragen

[转帖]jmeter分布式执行原理

jmeter分布式执行原理https://www.jianshu.com/p/bcfc48054b1e Jmeter分布式执行原理: 1、Jmeter分布式测试时,选择其中一台作为控制机(Controller),其它机器做为代理机(Agent)。 2、执行时,Controller会把脚本发送到每台A

[转帖]JMeter分布式测试环境搭建(禁用SSL)

https://www.cnblogs.com/MasterMonkInTemple/p/11978058.html JMeter分布式环境,一台Master,一到多台Slave,Master和Slave可以是同一台机器。 前提条件: 所有机器,包括master和slave的机器: 1.运行相同版本