一、什么是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. }

[转帖]【jmeter】BeanShell用法详细汇总的更多相关文章

  1. Jmeter Beanshell 用法

    Beanshell 的用法 什么是beanshell Beanshell是一种完全符合java语法的脚本语言,并且拥有自己的内置对象和语法 Beanshell是用java写的,一个小型嵌入式java源 ...

  2. Testing Complex Logic with JMeter Beanshell

    BeanShell是最先进的JMeter内置组件之一.JMeter具有丰富的内置插件,可满足性能测试的许多需求.例如,在编写一些复杂的测试时,您可能需要一些额外的脚本.在这种情况下,值得使用Beans ...

  3. JMeter BeanShell示例

    翻译:https://blog.trigent.com/jmeter-blog-series-jmeter-beanshell-example 在这个例子中,我们将演示在Apache JMeter中使 ...

  4. JMeter博客系列:JMeter BeanShell示例

    1.简介 Apache JMeter是一个基于Java的开源工具,使您可以在应用程序上执行功能,负载,性能和回归测试.应用程序可以在Web服务器上运行,也可以是独立的.它支持在包含静态和动态资源的客户 ...

  5. Jmeter Beanshell 编程简介

    简介 Jmeter除了提供丰富的组件以外,还提供脚本支持,可通过编写脚本来丰富Jmeter,实现普通组件无法完成的功能.Beanshell是一种轻量级的Java脚本语言,完全符合Java规范,并且内置 ...

  6. SQL语句详细汇总

    SQL语句详细汇总 | 浏览:3061 | 更新:2013-06-10 19:50 一.基础 1.说明:创建数据库 CREATE DATABASE database-name 2.说明:删除数据库 d ...

  7. DataSet用法详细 转

    DataSet用法详细 转 DataSet用法详细 一.特点介绍 1.处理脱机数据,在多层应用程序中很有用. 2.可以在任何时候查看DataSet中任意行的内容,允许修改查询结果的方法. 3.处理分级 ...

  8. Android webservice的用法详细讲解

    Android webservice的用法详细讲解 看到有很多朋友对WebService还不是很了解,在此就详细的讲讲WebService,争取说得明白吧.此文章采用的项目是我毕业设计的webserv ...

  9. DataSet用法详细

    转自:http://www.cnblogs.com/zeroone/archive/2012/06/08/2541299.html DataSet用法详细 一.特点介绍 1.处理脱机数据,在多层应用程 ...

  10. jquery.cookie用法详细解析,封装的操作cookie的库有jquery.cookie.js

    jquery.cookie用法详细解析 需要注意存入cookie前,对数据进行序列化, 得到后在反序列化: 熟练运用:JSON.stringify();和JSON.parse(): 通常分为如下几个步 ...

随机推荐

  1. 【Python】人工智能-机器学习——不调库手撕深度网络分类问题

    1. 作业内容描述 1.1 背景 数据集大小150 该数据有4个属性,分别如下 Sepal.Length:花萼长度(cm) Sepal.Width:花萼宽度单位(cm) Petal.Length:花瓣 ...

  2. POJ 3537 Crosses and Crosses 博弈论 SG函数 记忆化搜索

    原题链接 题意 两人在一个长为n * 1的棋盘上下棋,两人持相同棋子,如果某人下完之后,棋盘上有三个棋子相连,则此人获胜.给出n,求是否先手必胜. 思路 一开始分析成了最少取3个,最多取5个的巴什博弈 ...

  3. Spring Boot 整合 Log4j2 日志并压测性能

    1/ Log4j2的性能测试 从图中不难看出,在线程数为 2~16 之间,混合使用同步和异步的logger来打印日志,性能是最好的. 2/ 目标 混合 sync/async 彩色日志 分类输出到不同文 ...

  4. 3步带你搞定华为云编译构建CodeArts Build “新手村任务”

    华为云编译构建(CodeArts Build)基于云端大规模并发加速,为客户提供高速.低成本.配置简单的混合语言构建能力,帮助客户缩短构建时间,提升构建效率. 本文将给各位开发者带来华为云CodeAr ...

  5. 华为云GaussDB以技术创新引领金融行业分布式转型

    摘要:分布式数据库以大集群规模.弹性伸缩等优异特性,满足了银行业务发展的多种需求,也因此成为各大银行关键基础设施技术创新建设的首选. 今天,由北京先进数通与华为联合主办的"银行业数字化转型实 ...

  6. 为AR&VR黑科技:以“自由视角”360度尽展舞台唯美

    摘要:看华为的黑科技,如何用"自由视角"让观众感受舞台"风暴"的魅力所在. "风暴"降临 2021年1月9日晚上,我坐在电视机前,等待湖南卫 ...

  7. Kubernetes(K8S) 监控 Prometheus + Grafana

    监控指标 集群监控 节点资源利用率 节点数 运行Pods Pod 监控 容器指标 应用程序 Prometheus 开源的 监控.报警.数据库 以HTTP协议周期性抓取被监控组件状态 不需要复杂的集成过 ...

  8. MB51增强

    一.在MB51报表中新增列 包含文件RM07DOCS_GENERATED的itab结构中,新增字段 在RM07DOCS中的detail_list子例程中添加查询逻辑 在子例程build_fieldca ...

  9. 正确使用 HttpClient

    正确使用 HttpClient 其实标题应该叫:在控制台程序中使用IHttpClientFactory 以前一直使用的是HttpWebRequest,.NET6工程代码提示已过时,使用HttpClie ...

  10. Java字节码与反射机制

    字节码(Byte Code)是Java语言跨平台特性的重要保障,也是反射机制的重要基础.通过反射机制,我们不仅能看到一个类的属性和方法,还能在一个类里调用另外一个类的方法,但前提是我们得有相关类的字节 ...