Jmeter(二十)Beanshell or JSR223

有关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:
Jmeter(二十)Beanshell or JSR223
 图上标注了五部分内容,几乎除了名称和注释以外的所有部分,都是十分重要的内容。来进行一一解读:

先贴官方文档:
Jmeter(二十)Beanshell or JSR223
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的示例,大家有兴趣可以去看看):
  Jmeter(二十)Beanshell or JSR223
 使用随机函数Random作为一个随机响应数据。
 Jmeter(二十)Beanshell or JSR223
  将Dummy Sampler的响应结果以及响应数据保存至“Response_data”变量中。

添加Beanshell Sampler进行使用该变量:
  Jmeter(二十)Beanshell or JSR223
  将Response_data的变量信息打印至日志;

将Label打印至日志;

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

为直观,添加一个Debug Sampler查看变量读取情况:
  Jmeter(二十)Beanshell or JSR223
  响应的随机数为56
  Jmeter(二十)Beanshell or JSR223
在上方的Beanshell Sampler定义的Response Code和message。
Jmeter(二十)Beanshell or JSR223
 Debug Sampler的变量读取是正确的。
 Jmeter(二十)Beanshell or JSR223
  日志面板中打印出的Response data以及Label名称。

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

一个将数据写入文件的小Demo:
  Jmeter(二十)Beanshell or JSR223
判断目录下有没有该文件(此处默认为/bin目录下),如果存在,将其删除掉,创建新的文件
  Jmeter(二十)Beanshell or JSR223
Dummy Sampler自定义写入request和response信息。(涉及函数__UUID、__iterationNum)
Jmeter(二十)Beanshell or JSR223
将该响应信息中id、name、password提取出来,定义为新的变量。
Jmeter(二十)Beanshell or JSR223
将提取出来的数据写入该文件中。

OK,我已经运行过一遍了,看看写入数据是否成功。  
Jmeter(二十)Beanshell or JSR223
 我的/bin目录下是生成了该文件,打开数据是否写入:
 Jmeter(二十)Beanshell or JSR223
  可以看到是写入成功了。

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

bzm - Concurrency Thread Group----------该线程组大致就是一个测试setup线程组中的数据过程。
  Jmeter(二十)Beanshell or JSR223
 该线程组下进行以参数化的方式读取生成的文件:
 Jmeter(二十)Beanshell or JSR223
Jmeter(二十)Beanshell or JSR223
OK,Beanshell几乎用于处理复杂业务逻辑,例如生成随机手机号码、随机身份证号、加密、解密等业务。其灵活之处更在于可以实例化外部java文件。

Jmeter(二十)Beanshell or JSR223

上面是我收集的一些视频资源,在这个过程中帮到了我很多。如果你不想再体验一次自学时找不到资料,没人解答问题,坚持几天便放弃的感受的话,可以加入我们群【902061117】,里面有各种软件测试资源和技术讨论。
Jmeter(二十)Beanshell or JSR223

当然还有面试,面试一般分为技术面和hr面,形式的话很少有群面,少部分企业可能会有一个交叉面,不过总的来说,技术面基本就是考察你的专业技术水平的,hr面的话主要是看这个人的综合素质以及家庭情况符不符合公司要求,一般来讲,技术的话只要通过了技术面hr面基本上是没有问题(也有少数企业hr面会刷很多人)
我们主要来说技术面,技术面的话主要是考察专业技术知识和水平,上面也是我整理好的精选面试题。
加油吧,测试人!如果你需要提升规划,那就行动吧,在路上总比在起点观望的要好。事必有法,然后有成。
资源不错就给个推荐吧~