简介

Jmeter除了提供丰富的组件以外,还提供脚本支持,可通过编写脚本来丰富Jmeter,实现普通组件无法完成的功能。Beanshell是一种轻量级的Java脚本语言,完全符合Java规范,并且内置了一些独有的变量和方法,详细语法可参见Beanshell官网(http://www.beanshell.org/)。

Jmeter支持多种脚本语言,包括Beanshell,JavaScript和Groovy,其中对Beanshell的支持最为全面,提供了多种Beanshell的组件:1.Beanshell Sampler:Beanshell请求,完成Beanshell请求组件中定义的脚本功能2.Beanshell Postprocessor: Beanshell后置处理器,可通过编程方式获取对应请求的响应结果3. Beanshell 断言:可通过编程方式实现复杂的断言逻辑4.Beanshell Preprocessor:Beanshell前置处理器,可通过编程方式在发起请求以前做预处理,比如编码或者加密5.Beanshell Timer:Beanshell计时器,编程实现条件定时功能6. Beanshell Listner:Beanshell监听器,监听Beanshell运行结果

 

Beanshell内置变量介绍

Beanshell有一些默认的内置变量,用户可以通过这些变量与JMeter进行交互,其中主要的变量及其使用方法如下:

log:写入信息到控制台中,帮助调试脚本

vars: 操作jmeter变量,生成/更新/获取当前脚本的jmeter变量

props: 操作jmeter属性,生成/更新/获取当前脚本的jmeter属性,使用方法和vars一样

ctx:获取当前线程上下文,可获取当前线程的请求信息和相应信息(eg:可以获取Http请求和响应的所有数据)

prev:获取当前请求的结果

 

Beanshell Sampler 示例

- vars/props/log

通过Beanshell Sampler,测试人员可以编写一些特定逻辑生成的数据,并且通过vars.get、vars.put 或者props.get、props.put 把相应的变量传递到Jmeter脚本当中。

比如有些程序对身份证有校验,就可以在Beanshell脚本中编写身份证生成的逻辑,通过代码生成满足位数以及省市区编码校验的身份证号,然后把生成的身份证号作为变量保存到vars或者props当中,供后续接口调用。

vars.get(String,String)可以获取Jmeter中已经生成的变量 vars.put(String,String)可以创建和更新Jmeter变量 props.get(String,String)可以获取Jmeter中已经生成的属性 props.put(String,String)可以创建和更新Jmeter属性 vars和props的区别是前者是变量,只能在同一线程组内传递,后者是属性,可以在整个测试计划中跨线程组传递。 http://log.info(String)可以将信息输出到控制台,方便代码调试

 

Beanshell Postprocessor 示例

- ctx/prev

ctx内置变量可以获取上下文,通常和Beanshell PostProcessor结合起来使用,用于解析请求的结果,具体代码如下所示。在Jmeter的Beanshell脚本编辑器里可以直接引用Jmeter的Jar包,Jmeter Jar包的Api参见官网(http://jmeter.apache.org/api/overview-summary.html

 

prev等同于ctx.getPreviousResult(),通过prev可以直接获取到响应结果

 

通过上述示例,大家对Beanshell编程有了初步的了解,Jmeter Beanshell组件有很多,其中最常用的是BeanShell Preprossor,BeanShell Postprocessor和Beanshell断言,这些Beanshell组件的界面部分大同小异,区别是用在请求的不同阶段。

无论哪种组件,最核心的就是掌握Beanshell的内置变量和基础的Java编程技能,并运用这些技能完成一些定制化的开发。除了生成变量,解析响应结果,定制化逻辑处理以外,Beanshell还常用于请求发送前后的加密解密,试着尝试用Beanshell解锁Jmeter高级用法吧~

作  者:Testfan Kitty

出  处:微信公众号:自动化软件测试平台

版权说明:欢迎转载,但必须注明出处,并在文章页面明显位置给出文章链接

Jmeter Beanshell 编程简介的更多相关文章

  1. Jmeter beanshell编程实例

    1.引言 BeanShell是一种小型的,免费的,可嵌入的符合Java语法规范的源代码解释器,具有对象脚本语言特性. 在Jmeter实践中,由于BeanShell组件较高的自由度,通常被用来处理较为复 ...

  2. JMeter BeanShell示例

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

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

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

  4. UNIX网络编程---简介

    UNIX网络编程---简介 一.           概述 a)       在编写与计算机通信的程序时,首先要确定的就是和计算机通信的协议,从高层次来确定通信由哪个程序发起以及响应在合适产生.大多数 ...

  5. 《编程简介(Java) ·10.3递归思想》

    <编程简介(Java) ·10.3递归思想> 10.3.1 递归的概念 以两种方式的人:男人和女人:算法是两种:递归迭代/通知: 递归方法用自己的较简单的情形定义自己. 在数学和计算机科学 ...

  6. jmeter BeanShell实例-----两个变量之间的断言对比

    jmeter BeanShell实例-----两个变量之间的断言对比 在jmeter的中,断言没法对两个变量的进行对比后判断,只能使用Bean Shell断言来进行,总是有人来问怎么写呢.这里写一个简 ...

  7. win32编程简介

    win32编程简介 复习Win32整理下知识. 为什么学习win32? 我们要编写windos程序.都离不开API. 也就是我们所说的win32程序. 所以学好win32是你能不能再windows下编 ...

  8. 【Unix网络编程】chapter3套接字编程简介

    chapter3套接字编程简介3.1 概述 地址转换函数在地址的文本表达和他们存放在套接字地址结构中的二进制值之间进行转换.多数现存的IPv4代码使用inet_addr和inet_ntoa这两个函数, ...

  9. 【Unix网络编程】chapter3 套接字编程简介

    chapter3套接字编程简介3.1 概述 地址转换函数在地址的文本表达和他们存放在套接字地址结构中的二进制值之间进行转换.多数现存的IPv4代码使用inet_addr和inet_ntoa这两个函数, ...

随机推荐

  1. (转)java8实现对象列表去重

    java8实现列表去重,java8的stream和lambda的使用实例 通过普通的方式也可以达到去重的效果,但是借助java8新特性可以很方便的实现列表去重,测试demo如下 实体类: public ...

  2. 数据库高级数据库学习--上机练习7(Transact-SQL 函数定义和调用)

    上机练习7 在Transact SQL中,有一类特殊的自定义函数,其返回值为一张表,该类自定义函数被称作内嵌(联)表值函数,其基本语句格式如下: CREATE FUNCTION函数名称[( {@参数名 ...

  3. js Date格式转化

    Date格式转化为日期  年-月-日(格式随意修改) GetDateStr(dd, AddDayCount) { dd.setDate(dd.getDate() + AddDayCount)// 获取 ...

  4. Android开发实例 Unity显示Toast

    Android中的Toast是一种简易的消息提示框. 当视图显示给用户,在应用程序中显示为浮动.和Dialog不一样的是,它永远不会获得焦点,无法被点击.用户将可能是在中间键入别的东西.Toast类的 ...

  5. PJzhang:shell基础入门的2个疗程-two

    猫宁!!! 第6节:重定向 标准输入,标准输出,错误输出 输入重定向符号'<' 输出重定向符号'>'(清空之后再输入),'>>'(当前内容不变,在最后一行追加),'2>' ...

  6. 【DSP开发】【Linux开发】IIC设备驱动程序

    IIC设备是一种通过IIC总线连接的设备,由于其简单性,被广泛引用于电子系统中.在现代电子系统中,有很多的IIC设备需要进行相互之间通信 IIC总线是由PHILIPS公司开发的两线式串行总线,用于连接 ...

  7. 什么是java的线程安全?同步,异步

    线程是比进程更小的执行单位,是在进程基础上进行的进一步划分.所谓多线程是指进程在执行过程中可以产生多个同时存在.同时运行的线程.多进程机制可以合理利用资源,提高程序的运行效率.一个进程至少包含一个线程 ...

  8. DNS 域名系统与邮件服务器

    目录 DNS 域名系统 定义 域名分类 解析流程 DNS分类 资源记录 格式 资源记录类型 用bind搭建一台DNS服务器 安装bind 创建自己的zone文件 在主配置文件中,增加自己的zone 检 ...

  9. java 给不同成绩分等级

    题目:利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示. 程序分析:(a>b)?a:b这是条件运算符的基本例子. pack ...

  10. GS7 安装使用Oracle19c 客户端的说明

    1. 最近Oracle放出了 windows版本的oracle19c的安装文件(具体时间不详, 自己知道的时候比较晚了) 2. 发现文件其实比较多如图示: 3. 经过自己测试实现发现 不能使用  如下 ...