简介

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. 八十四:redis之redis的集合、哈希操作

    set集合操作 添加元素:sadd set value1 value2... 查看元素:smembers set 移除元素:srem set member 查看集合中的元素个数:scard set 获 ...

  2. IOS input框轻点无效修复方法

    FastClick.prototype.focus = function(targetElement) { targetElement.focus();//加入这一句话就OK了 };

  3. 12@365 java上传文件(word、图片等)至服务器

    这种方法是servlet,编写好在web.xml里配置servlet-class和servlet-mapping即可使用 后台(服务端)java服务代码:(上传至ROOT/lqxcPics文件夹下) ...

  4. 第一个python-ui界面

    首先是安装eric6简直是个灾难,先是找不到汉化版的eric6,好不容易找到了,一打开eric6的窗体就说designer.exe不存在,确实在PyQt5里没有,明明在PyQt5-tools里面有,最 ...

  5. C语言基础:递归函数,全局(局)变量

    #include <stdio.h>int factorial(int a); int Fibonacci(a);long Hanoi(a); void main(){ } 函数递归调用: ...

  6. freetye2使用

    使用环境和版本:qt ubuntu 16.04   freetype-2.10.0 1.下载 https://sourceforge.net/projects/freetype/files/freet ...

  7. webdriervAPI(下载文件)

    from  selenium  import  webdriver driver  =  webdriver.Chorme() driver.get("http://www.baidu.co ...

  8. [ZJOI2007]捉迷藏(动态点分治/(括号序列)(线段树))

    题目描述 Jiajia和Wind是一对恩爱的夫妻,并且他们有很多孩子.某天,Jiajia.Wind和孩子们决定在家里玩捉迷藏游戏.他们的家很大且构造很奇特,由N个屋子和N-1条双向走廊组成,这N-1条 ...

  9. iframe在firefox下的无法正常target问题

    今日在改一个网站的时候碰到个奇葩的问题. 把网站按照结构划分,做了个主页面,嵌入iframe,设定该iframe的name,主页面上的链接使用target保证在iframe中打开该链接. 听上去很常规 ...

  10. Oracle临时表的功能与应用

    什么是临时表,用户做一个操作查询出几百几千条数据,我们可以把数据放在内存中.当有很多用户都这样做,内存空间不足,这个时候就需要把数据保存在磁盘上.对于 oracle 就提供了一种临时表用于存放这些数据 ...