有关Beanshell和JSR223组件的部分,早就想写一大篇幅随笔进行记录,苦于不知如何去描述这两部分的内容,一直在修改随笔。

介绍一下Beanshell:

     Beanshell是轻量级Java,支持对象式的脚本语言特性,亦可嵌入到JAVA源代码中,能动态执行JAVA源代码并为其扩展了脚本语言的一些特性,像JavaScript和perl那样的弱类型、命令式、闭包函数等等特性都不在话下。(飞升传送门:http://www.beanshell.org/)

Beanshell在Jmeter有着相当强的地位,被称之为Jmeter脚本语言的King。不过前段时间在Blazemeter中看到一篇文章----《IS Beanshell Dead?》,仔细阅读了一番,其大致之意便是自Jmeter3.1以来,JSR223的脚本语言对Groovy的默认化,相对于Beanshell,开发人员更为喜欢Groovy;不过对于我们来说,到底是选择Beanshell还是Groovy?现阶段我觉得没必要讨论这样的话题。不过我认为适当的转变是有必要的,盲目跟风那绝对是大忌!有兴趣的可以去看看,究其根本原因是什么。金庸老爷子是这样描述独孤求败:草木竹石均可为剑。自此精进,渐入无剑胜有剑之境。剑神不是剑法有多高超,而是功力太深厚,草木竹石皆可为剑!Beanshell、Groovy皆可为剑!哈哈,看看Jmeter中的Beanshell和JSR223以及它们所能实现的功能吧!

首先,Beanshell和JSR223组件是涉及代码部分的组件,至于用途,能量所在来进行一一记载:

  Beanshell和JSR223几乎在Jmeter的每部分都有涉及到:

    1、Sampler

    2、PreProcessor

    3、PostProcessor

    4、Timers

    5、Assertions

    6、Listeners

那么先添加一个Beanshell Sampler:

  

  图上标注了五部分内容,几乎除了名称和注释以外的所有部分,都是十分重要的内容。来进行一一解读:

  先贴官方文档:

  

  Rest bsh.Interpreter before each call:(check box)不做解释,具体见官方文档中给出的示例(或转Best Practices - Beanshell seripting)

  Parameters(String Parameters and String 【】bah.args):传递参数,可将GUI脚本中创建的Parameters参数传递至Beanshell脚本中。在Beanshell脚本中引用是使用bsh.args【x】进行实例化。

  Script file:导入Beanshell脚本运行文件。文件名存储在脚本变量名中。

  Script:脚本编写处。(Beanshell语法)

  而最下方的一段话,我是特意框了起来,很多人可能会忽略,但是这段话中列举的变量便是为Beanshell脚本定义的:

    SampleResult, ResponseCode, ResponseMessage, IsSuccess, Label, FileName, ctx, vars, props, log

  用过的人肯定都很熟悉这里边的变量,具体用途同名一致!

  OK、上个简单的例子(该Demo来自Blazemeter的示例,大家有兴趣可以去看看):

  

  使用随机函数Random作为一个随机响应数据。

  

  将Dummy Sampler的响应结果以及响应数据保存至“Response_data”变量中。

  添加Beanshell Sampler进行使用该变量:

  

  将Response_data的变量信息打印至日志;

  将Label打印至日志;

  定义该Sampler的响应状态码以及响应信息。

  为直观,添加一个Debug Sampler查看变量读取情况:

  

  响应的随机数为56

  

  在上方的Beanshell Sampler定义的Response Code和message。

  

  Debug Sampler的变量读取是正确的。

  

  日志面板中打印出的Response data以及Label名称。

  当然逻辑判断和引入外部jar包在有必要的情况下依然是支持的。

  一个将数据写入文件的小Demo:

    

  判断目录下有没有该文件(此处默认为/bin目录下),如果存在,将其删除掉,创建新的文件

  

  Dummy Sampler自定义写入request和response信息。(涉及函数__UUID、__iterationNum)

  

  将该响应信息中id、name、password提取出来,定义为新的变量。

  

  将提取出来的数据写入该文件中。

  OK,我已经运行过一遍了,看看写入数据是否成功。

  

  我的/bin目录下是生成了该文件,打开数据是否写入:

  

  可以看到是写入成功了。

  Setup Group Thread中做创建文件和数据写入工作。

  bzm - Concurrency Thread Group----------该线程组大致就是一个测试setup线程组中的数据过程。

  

  该线程组下进行以参数化的方式读取生成的文件:

  

  

  OK,Beanshell几乎用于处理复杂业务逻辑,例如生成随机手机号码、随机身份证号、加密、解密等业务。其灵活之处更在于可以实例化外部java文件。

  

Jmeter(二十)Beanshell or JSR223的更多相关文章

  1. Jmeter(二十) - 从入门到精通 - JMeter监听器 -下篇(详解教程)

    1.简介 监听器用来监听及显示JMeter取样器测试结果,能够以树.表及图形形式显示测试结果,也可以以文件方式保存测试结果,JMeter测试结果文件格式多样,比如XML格式.CSV格式.默认情况下,测 ...

  2. Jmeter(二十二) - 从入门到精通 - JMeter断言 - 下篇(详解教程)

    1.简介 断言组件用来对服务器的响应数据做验证,常用的断言是响应断言,其支持正则表达式.虽然我们的通过响应断言能够完成绝大多数的结果验证工作,但是JMeter还是为我们提供了适合多个场景的断言元件,辅 ...

  3. Jmeter(二十四) - 从入门到精通 - JMeter函数 - 中篇(详解教程)

    1.简介 在性能测试中为了真实模拟用户请求,往往我们需要让提交的表单内容每次都发生变化,这个过程叫做参数化.JMeter配置元件与前置处理器都能帮助我们进行参数化,但是都有局限性,为了帮助我们能够更好 ...

  4. Jmeter(二十)_Mock接口

    首先解释一下什么是mock接口. Mock通常是指,在测试一个对象时,我们构造一些假的对象来模拟与其交互.而这些Mock对象的行为是我们事先设定且符合预期.通过这些Mock对象来测试对象在正常逻辑,异 ...

  5. Jmeter(二十四)_服务器性能监控

    下载插件 1.访问网址http://jmeter-plugins.org/downloads/all/,下载三个文件.其中JMeterPlugins-Standard和JMeterPlugins-Ex ...

  6. Jmeter(二十五)_Xpath关联

    在Jmeter中,除了正则表达式可以用作关联,还有一种方式也可以做关联,那就是 XPath Extractor.它是利用xpath提取出关键信息,传递变量. 具体用法 添加一个后置处理器-XPath ...

  7. Jmeter(二十六)_数据驱动测试

    花了一点时间做了一个通用的执行引擎,好处就是我不用再关注测试脚本的内容,而是用测试用例的数据去驱动我们执行的方向.(这个只适合单个接口的测试,具体运用到接口自动化时,还是要靠手动去编写脚本!) 首先我 ...

  8. Jmeter(二十九)_dotnet搭建本地接口服务

    这里使用的服务名为Bookshelf,在github上,自行下载.要运行此服务,需要.Net Core SDK 2.1或更高版本.如果尚未安装,从.Net Core官方网站下载并安装. 在本地克隆项目 ...

  9. Jmeter(二十八)_Docker+Jmeter+Gitlab+Jenkins+Ant(容器化的接口自动化持续集成平台)

    这套接口自动化持续集成环境已经部署差不多了,现在说说我的设计思路 1:利用Docker容器化Gitlab,Jenkins,Jmeter,Ant,链接如下 Docker_容器化gitlab Docker ...

  10. Jmeter(二十二)_脚本上传Gitlab

    Docker部署接口自动化持续集成环境第四步,代码上传到远程仓库! 接上文:Ubuntu部署jmeter与ant Gitlab在容器中部署好了之后,本地直接打开.我们可以在里面创建项目,上传脚本. 新 ...

随机推荐

  1. !!!!---linux常见问题和解决方案--我的

    -------------------------------------------------------------磁盘 ---------------------------文件.目录1.删除 ...

  2. SQL Server 并发死锁解决案例备忘

    SET @sql = ' SET TRANSACTION ISOLATION LEVEL REPEATABLE READ; SET DEADLOCK_PRIORITY 10 BEGIN TRAN DE ...

  3. spring获取jdbc链接底层原理

    获取连接池的连接二种逻辑 1.一个事务中,一个连接 (底层逻辑:threadlocal存储  里面是map: key是数据源,value:链接) map存储应该是为多数据源使用的2.没有事务的serv ...

  4. oracle重做日志文件硬盘坏掉解决方法

    rman target/ list backup; list backup summary; 删除数据库数据文件夹下的log日志,例如/u01/app/oracle/oradata/ORCL下的所有后 ...

  5. VM安装系统时提示硬件不支持(unsupported hardware detected)

    修改一下虚拟机配置,把CD/DVD中使用的autoinst.iso替换成需要安装的系统镜像文件 然而,后面发现还是会报这个错,不过,却可以正常安装下去.但是如果不修改这里的话,安装系统时会出错

  6. python基础(六)——mysql的使用

    //验证是否安装mysqldb,这个是用于python连接mysql数据库的接口,而不是我们平时用的mysql import MySQLdb 安装MySQLdb,请访问 http://sourcefo ...

  7. <--------------------------构造方法------------------------------>

    1 构造方法 初始化阶段 给对象的属性进行赋值 构造方法 什么是构造方法 : 字面 方法构建时 就使用的方法 对象创建的时候就使用的方法 作用:对象的属性值初始化2 如何用构造方法 修饰符 构造方法名 ...

  8. SpringBoot2

    2018.3月Spring Boot2.0发布,是Spring Boot1.0发布4年之后第一次重大修订.Spring Boot2.0版本经历了 17 个月的开发,有 215 个不同的使用者提供了超过 ...

  9. python ord()与chr()用法以及区别

    ord()函数主要用来返回对应字符的ascii码,chr()主要用来表示ascii码对应的字符他的输入时数字,可以用十进制,也可以用十六进制. >>> ord("a&quo ...

  10. DP-动态规划算法实例:拿糖果问题

    拿糖果问题 问题描述 妈妈给小B买了N块糖!但是她不允许小B直接吃掉. 假设当前有M块糖,小B每次可以拿P块糖,其中P是M的一个不大于根号下M的质因数.这时,妈妈就会在小B拿了P块糖以后再从糖堆里拿走 ...