一、什么是Bean Shell

  • BeanShell是一种完全符合Java语法规范的脚本语言,并且又拥有自己的一些语法和方法;
  • BeanShell是一种松散类型的脚本语言(这点和JS类似);
  • BeanShell是用Java写成的,一个小型的、免费的、可以下载的、嵌入式的Java源代码解释器,具有对象脚本语言特性,非常精简的解释器jar文件大小为175k。
  • BeanShell执行标准Java语句和表达式,另外包括一些脚本命令和语法。

二、Jmeter有哪些Bean Shell

  • 定时器:  BeanShell Timer
  • 前置处理器:BeanShell PreProcessor
  • 采样器:  BeanShell Sampler
  • 后置处理器:BeanShell PostProcessor
  • 断言:   BeanShell断言
  • 监听器:  BeanShell Listener

BeanShell与JMeter的关系

JMeter提供5种方式使用BeanShell

  • BeanShell Sampler
    直接使用BeanShell来编写样例
  • BeanShell  PreProcessor
    样例触发前,使用BeanShell进行加工处理。
  • BeanShell  PostProcessor
    样例触发后,使用BeanShell进行加工处理。
  • BeanShell  Assertion
    使用BeanShell进行断言处理。
  • BeanShell  Listener
    使用BeanShell做监听器

BeanShell的内置对象

对象名 存在元素 功能
log BeanShell Sampler
BeanShell PreProcessor
BeanShell PostProcessor
BeanShell Assertion
BeanShell Listener
日志信息输出
Label BeanShell Sampler 样例
FileName BeanShell Sampler 文件名
Parameters BeanShell Sampler 参数
bsh.args BeanShell Sampler BeanShell脚本
SampleResult BeanShell Sampler
BeanShell Assertion
BeanShell Listener
样例结果
ResponseCode BeanShell Sampler
BeanShell Assertion
返回的状态码
ResponseMessage BeanShell Sampler
BeanShell Assertion
返回信息
IsSucess BeanShell Sampler 是否成功
ctx BeanShell Sampler
BeanShell PreProcessor
BeanShell PostProcessor
BeanShell Assertion
BeanShell Listener
JMeter的上下文
vars BeanShell Sampler,BeanShell PreProcessor
BeanShell PostProcessor
BeanShell Assertion
BeanShell Listener
变量操作
props BeanShell Sampler
BeanShell PreProcessor
BeanShell PostProcessor
BeanShell Assertion
BeanShell Listener
JMeter属性
prev BeanShell PreProcessor
BeanShell PostProcessor
BeanShell Listener
样例的前置结果读取
sampler BeanShell PreProcessor
BeanShell PostProcessor
当前样例
Response BeanShell Assertion 返回的对象,读-写
Failure BeanShell Assertion 是否失败
FailureMessage BeanShell Assertion 失败信息
ResponseData BeanShell Assertion 返回数据体,字节形式
ResponseHeader BeanShell Assertion 返回信息头
RequestHeader BeanShell Assertion 请求信息头
SampleLabel BeanShell Assertion 样例名称
SampleData BeanShell Assertion 发送至服务器的数据
SampleEvent BeanShell Listener 读取当前样例的事件

有了上面的操作对象,可以在测试过程中,对测试的内容,进行更加详细的加工

三、BeanShell的用法

在此介绍下BeanShell PreProcessor的用法,其它的beahshell可以类推。在此我们使用beahshell调用自己写的工具类,工具类实现了密码的加、解密功能:

1、在eclipse写好代码,然后把该类打成jar包(在类上点击右键->Export->jar file)

2、把jar包放到jmeter目录\apache-jmeter-2.13\lib\ext下

3、打开jmeter,添加一个http sampler(调用登录接口),在sampler下添加一个BeanShell PreProcessor

4、在beanshell PreProcessor中导入我们的jar包,调用里面的加、解密码方法,把结果保存在jmeter变量中,下面两个方法是beanshell中我们最常用到的:

vars.get(String paramStr):获得变量值

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

5、把加密后的密码存到jmeter变量中,然后在http sampler中就可以通过${encode}进行使用了:

6、执行脚本:

四、Bean Shell常用内置变量

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

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

ctx:该变量引用了当前线程的上下文

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

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

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

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

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

b) props.put("PROP1","1234");

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

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

b) getResponseCode() :获取响应code

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

jmeter自带函数获取系统当前时间

//当前时间
${__timeShift(,,,,)}
//增加一天
${__timeShift(,,P1d,,)}
//增加七天时间格式化
${__timeShift(yyyy-MM-dd,,P7d,,)}
//减少七天时间格式化
${__timeShift(yyyy-MM-dd,,-P20d,,)}
//当前时间时间格式化
${__timeShift(yyyy-MM-dd,,,,)}
//增加一H
${__timeShift(,,PT1H,,)}
${__timeShift(yyyy-MM-dd HH:mm:ss:SSS,,,,)}
${__timeShift(yyyy-MM-dd HH:mm:ss:SSS,,P1d,,)}
${__timeShift(yyyy-MM-dd HH:mm:ss:SSS,,PT1H,,)}
${__timeShift(yyyy-MM-dd HH:mm:ss:SSS,,PT10m,,)}
${__timeShift(yyyy-MM-dd HH:mm:ss:SSS,,PT20S,,)}
${__timeShift(yyyy-MM-dd HH:mm:ss:SSS,,P1dT1H10m20s,,)}
${__time(YMDHMS,)}
${__time(YYYYMMDHMS,)}

浮点时间戳转换为标准时间

import  java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
//10位的秒级时间戳
long time1 = ${time}; //获取时间戳变量
String result1 = new SimpleDateFormat( "yyyy-MM-dd HH:mm:ss" ).format( new Date(time1 * 1000 ));
log.info( "10位时间戳(秒)--->Date:" +result1); //13位的毫秒级时间戳
//double time2 = 1515730332000d;
//String result2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(time2);
//System.out.println("13位数的时间戳(毫秒)--->Date:" + result2);

解析jsonlist

//利用beanshell获取到json响应,而后经过JSONObject 和JSONArray 将数组解析,遍历数组的length以后,提取参数值
//导入json包
import org.json.*;
//获取获取请求的返回值
String response_data = prev.getResponseDataAsString();
//日志打印获取请求的返回值
log.info(response_data);
//将String类型的返回值构形成JSONObject对象
JSONObject data_obj = new JSONObject(response_data);
//获取做为下一个请求post的参数值Province(两种方式)
//String Provincelist_str = data_obj.get("Province").toString();
JSONArray Provincelist_str = data_obj.getJSONArray( "Province" );
//log.info(Provincelist_str);
//获取Province数组的长度
int len = Provincelist_str.length(); String strlen = Integer.toString(len); vars.put( "MessageNum" ,strlen);
log.info(strlen);
int i = 0 ;
for (;i < len;++i)
{
//获取 data[ i ] 数组对象
JSONObject jsonTemp = (JSONObject)Provincelist_str.getJSONObject(i);
switch (i)
{
case 0 :
//两种提取参数的写法
String NameItems = jsonTemp.getString( "Name" );
// String NameItems = jsonTemp.get("Name").toString();
// 两种打印参数的方法
// vars.put("Name_1", jsonTemp.getString("Name"));
vars.put( "Name_1" , NameItems);
log.info(NameItems);
}
}

BeanShell 用法汇总的更多相关文章

  1. BeanShell用法汇总(部分摘抄至网络)【转】

    说明:本文部分资料摘抄至 来源: http://www.cnblogs.com/puresoul/p/4915350.html 来源: http://www.cnblogs.com/puresoul/ ...

  2. BeanShell用法汇总(部分摘抄至网络)

    说明:本文部分资料摘抄至 来源: http://www.cnblogs.com/puresoul/p/4915350.html 来源: http://www.cnblogs.com/puresoul/ ...

  3. Linux中find命令的用法汇总

    Linux中find命令的用法汇总 https://www.jb51.net/article/108198.htm

  4. Python Enum 枚举 用法汇总

    Python Enum 枚举 用法汇总 import os import sys if sys.version_info.major + sys.version_info.minor * 0.1 &l ...

  5. C#中DllImport用法汇总

    最近使用DllImport,从网上google后发现,大部分内容都是相同,又从MSDN中搜集下,现将内容汇总,与大家分享. 大家在实际工作学习C#的时候,可能会问:为什么我们要为一些已经存在的功能(比 ...

  6. JMeter中BeanShell用法总结(一)

    一.什么是Bean Shell BeanShell是一种完全符合Java语法规范的脚本语言,并且又拥有自己的一些语法和方法; BeanShell是一种松散类型的脚本语言(这点和JS类似); BeanS ...

  7. Jmeter Beanshell 用法

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

  8. BeanShell用法(摘抄至网络)

    说明:本文部分资料摘抄至 来源: http://www.cnblogs.com/puresoul/p/4915350.html 来源: http://www.cnblogs.com/puresoul/ ...

  9. Hibernate 注解中CascadeType用法汇总

    这两天,参加一个课程设计,同时这个项目又作为一个模块镶嵌到其他项目中,考虑如此,应与原先的架构相同,因牵扯到留言和相互@功能,故数据库之间OneToOne,OneToMany,ManyToMany之风 ...

随机推荐

  1. python Crypto 加密解密

    本片文字记录使用python 的Crypto 工具对图片或者文本进行加密解密的方法: import numpy as np from PIL import Image from base64 impo ...

  2. Go - 实现项目内链路追踪(二)

    上篇文章 Go - 实现项目内链路追踪 分享了,通过 链路 ID 可以将 请求信息.响应信息.调用第三方接口的信息.调试信息.执行的 SQL 信息.执行的 Redis 信息 串起来,记录的具体参数在文 ...

  3. Kibana 地标图可视化

    ElasticSearch 可以使用 ingest-geoip 插件可以在 Kibana 上对 IP 进行地理位置分析, 这个插件需要 Maxmind 的 GeoLite2 City,GeoLite2 ...

  4. K8S(15)监控实战-ELK收集K8S内应用日志

    K8S监控实战-ELK收集K8S内应用日志 目录 K8S监控实战-ELK收集K8S内应用日志 1 收集K8S日志方案 1.1 传统ELk模型缺点: 1.2 K8s容器日志收集模型 2 制作tomcat ...

  5. Ubuntu下跑通py-faster-rcnn、详解demo运作流程

    在不同的服务器不同的机器上做过很多次实验,分别遇到各种不一样的错误并且跑通Py-Faster-RCNN,因此,在这里做一个流程的汇总: 一.下载文件: 首先,文件的下载可以有两种途径: 1.需要在官网 ...

  6. Keras 报错: Error when checking target: expected dense_4...

    笔者此处是一个回归任务, 最后一层是: ... pred = Dense(1)(x) 在最后一个Dense层前加上x = Flatten()(x)即可.

  7. npm clear folder

    npm clear folder rm -rf rimraf rmrf & clear build / dist folder caches https://www.npmjs.com/pac ...

  8. cookie all in one

    cookie all in one credentials: "include" https://developers.google.com/web/updates/2015/03 ...

  9. Flutter & QRCode App

    Flutter & QRCode App https://github.com/xgqfrms/qrcode-reader-app how to open android emulator o ...

  10. 逆向基础 C++ Primer Plus 第二章 开始学习C++

    C++ Primer Plus 第二章 开始学习C++ 知识点梳理 本章从一个简单的C++例子出发,主要介绍了创建C++程序的步骤,以及其所包含的预处理器编译指令.函数头.编译指令.函数体.注释等组成 ...