1.简介

Apache JMeter是一个基于Java的开源工具,使您可以在应用程序上执行功能,负载,性能和回归测试。应用程序可以在Web服务器上运行,也可以是独立的。它支持在包含静态和动态资源的客户端 - 服务器和Web模型上进行测试。它支持各种用于进行测试的协议,包括HTTP,HTTPS,JDBC,FTP,JMS,LDAP,SOAP等。

快速浏览一些功能:

  • 它提供了一个全面的基于GUI的工作台来玩测试。它还允许您在非GUI模式下工作。JMeter也可以移植到服务器上,允许在分布式环境中执行测试。
  • 它提供了模板概念,它是各种方案或协议的预定义测试计划,可直接用于创建所需的测试计划。
  • 它使您能够使用强大的功能(如线程组,控制器,采样器,监听器等)在结构上构建测试计划。
  • 它通过有效的日志记录提供调试和错误监控。
  • 它通过变量的概念支持参数化测试。
  • 它支持创建不同风格的测试计划,包括Web,数据库,FTP,LDAP,Web服务,JMS,监视器等。
  • 它允许通过将不同的JMeter实例作为跨节点的服务器运行并从单个客户端应用程序访问来进行远程测试。
  • 它为您提供实时测试结果,涵盖延迟,吞吐量,响应时间,活动线程等指标。
  • 它使您能够基于正则表达式和许多其他功能执行测试。

1.1。什么是BeanShell?

BeanShell是一种用Java编写的脚本语言。它是JSR-274规范的一部分。它在某种程度上是通过提供脚本功能来扩展主流Java语言。它是一个嵌入式解释器,可识别强类型Java语法和脚本功能,如shell命令,松散类型和方法闭包(作为对象的功能)。BeanShell有助于快速开发和测试Java应用程序。可以将其用于快速或快速原型设计或快速测试小功能或过程。该脚本也可以嵌入Java代码中,并使用Interpreter API调用。

BeanShell还可以用作配置语言,因为它支持创建基于Java的变量,如字符串,数组,映射,集合和对象。它还支持所谓的脚本变量或松散类型的变量。BeanShell脚本也可以在外部文件中以独立模式编写,然后可以由Java程序加载和执行。BeanShell还提供了类似shell编程的UNIX概念。您可以在GUI shell中以交互方式提供BeanShell命令,并立即查看输出。

有关BeanShell的更多详细信息,请参阅官方网站http://www.beanshell.org

1.2。JMeter Beanshell组件

JMeter提供了以下可用于编写BeanShell脚本的组件

  • BeanShell采样器
  • BeanShell预处理器
  • BeanShell PostProcessor
  • BeanShell断言
  • BeanShell监听器
  • BeanShell计时器

这些组件中的每一个都允许您编写脚本来进行测试。JMeter将根据组件的生命周期顺序执行脚本。例如,它首先调用PreProcessor然后调用Sampler,然后调用PostProcessor,依此类推。可以使用具有特定含义和上下文的线程局部变量在这些组件之间传递数据。每个组件都为您提供可在相应脚本中使用的预定义变量。

下表显示了BeanShell组件使用的一些常见变量:

变量名 描述
ctx 它包含有关包含采样器及其结果的当前线程的上下文信息。
vars 这是存储在同一线程中BeanShell组件使用的映射中的线程局部变量集。
props 这些变量作为属性从存储在类路径中的外部文件(jmeter.properties)加载。
prev 它保留了采样器的最后结果
data 它保存服务器响应数据

2. BeanShell示例

我们现在将演示在JMeter中使用BeanShell。我们将采用一个简单的排序数组的测试用例。我们将定义以随机顺序存储的5个字母(a,b,c,d,e)的数组。我们将对数组的内容进行排序并将其转换为字符串。转换后,我们将删除不需要的字符并打印最终的字符串值。它应该将输出设为'abcde'。
我们将使用以下BeanShell组件来实现我们的测试用例:

  • BeanShell PreProcessor - 该组件将定义或初始化我们的数组。
  • BeanShell Sampler - 该组件将对数组进行排序并将其转换为字符串。
  • BeanShell PostProcessor - 该组件将从字符串中删除不必要的字符。
  • BeanShell断言 - 该组件将断言我们的测试结果(带有排序内容的字符串)。

在安装JMeter之前,请确保已安装JDK 1.6或更高版本。使用此处的链接下载最新版本的JMeter 。在撰写本文时,JMeter的当前版本是2.13。要安装,只需将存档解压缩到您希望安装JMeter的主目录中。将JAVA_HOME环境变量设置为指向JDK根文件夹。解压缩归档后,导航到<JMeter_Home> / bin文件夹并运行该命令jmeter。对于Windows,您可以使用命令窗口运行。这将打开JMeter GUI窗口,允许您构建测试计划。

2.1。配置BeanShell采样器

在这个组件中,我们将对数组进行排序。但在我们对数组进行排序之前,需要对其进行初始化。在创建预处理器组件时,您将在下一节中看到初始化例程。我们首先创建BeanShell Sampler组件。我们将编写代码以在初始化例程之后对数组进行排序。右键单击Single User ThreadGroup并选择Add - > Sampler - > BeanShell Sampler

我们将采样器的名称提供为“阵列分类器”。所述复位解释字段值被保留为“假”。只有在配置了多个BeanShell采样器或者在循环中运行采样器时,才需要此字段。true的值将重置并为每个采样器创建一个新的BeanShell解释器实例。false的值将只创建一个BeanShell解释器,它将解释所有已配置采样器的脚本。从性能角度来看,如果长时间运行带有多个采样器的脚本,建议将此字段设置为true。该参数field允许您将参数传递给BeanShell脚本。它通常与外部BeanShell脚本文件一起使用,但如果您在此组件本身中编写脚本,则可以使用Parametersbsh.args变量来获取参数。该Parameters变量将保持的参数作为字符串值(保留空格)。该bsh.args变量将参数保存为字符串数组。对于此示例,我们不会将任何参数传递给脚本。该脚本文件,当你有一个外部文件中定义的脚本的BeanShell领域被使用。需要注意的是,这将覆盖在此组件中内联编写的任何脚本。我们将保留所有BeanShell组件的所有上述字段的默认值。最后的剧本textbox字段允许我们在此组件本身内联编写脚本。它允许您在脚本中使用某些变量。如您所见,此字段中目前没有脚本代码。我们将在预处理器组件中初始化数组后编写代码。

2.2。配置BeanShell预处理器

Beanshell PreProcessor将是您的采样器之前要执行的第一个组件。它成为执行初始化例程的好选择。我们将在此组件中初始化要排序的数组。右键单击Array Sorter sampler并选择Add - > Pre Processors - > BeanShell PreProcessor

我们将该组件命名为“Array Initializer”。让我们看看脚本文本框字段中的代码。首先,我们声明并初始化名为的数组strArray。它是一个松散类型的变量。数组的值不是有序的。然后我们vars通过调用putObject()方法使用变量来存储数组。该vars变量将可用于属于此线程的所有BeanShell组件。我们将vars在'Array Sorter'采样器中获取变量的值并执行排序。在上一节中,我们创建了“数组排序器”采样器,现在我们将在该采样器中编写以下代码来对数组进行排序。单击脚本中的Array Sorter sampler textbox字段写下面的代码:

首先,我们使用变量的getObject()方法获取数组vars。然后我们将使用ArraysJava类进行排序。sort()所述类的方法将我们的数组作为参数并执行排序。然后我们通过调用Arrays.toString()方法将数组转换为字符串。Arrays是JDK提供的实用程序类,用于对数组对象执行某些有用的操作。然后,我们将通过使用SampleResult变量将此排序的字符串作为响应数据。我们的排序字符串如下所示:[a, b, c, d, e]

2.3。配置BeanShell PostProcessor

所述的BeanShell PostProcessor中将去掉不必要的字符,如“[]”。此组件将更像一个过滤器。右键单击Array Sorter sampler并选择Add - > Post Processors - > BeanShell PostProcessor

我们将该组件命名为“Array Filter”。该脚本文本字段包含我们的字符串剥离不必要的字符代码。如果您还记得,Array Sorter采样器将该字符串存储为响应数据。现在我们在这里取使用函数的字符串getResponseDataAsString()中的prev变量。接下来,我们使用类的replace()方法String从字符串中去除'[]'和','字符。我们将该字符串存储在vars变量中。BeanShell Assertion组件现在将使用此字符串来断言最终结果。

2.4。配置BeanShell断言

使用此组件,我们将最终结果值断言为'abcde'。右键单击Array Sorter sampler并选择Add - > Assertions - > BeanShell Assertion

使用该vars变量,我们将获得最终的字符串并将其存储在finalString变量中。然后我们通过检查最终字符串是否包含值'abcde'来断言,然后将Failure变量设置为true并使用FailureMessage变量提供失败消息。可以在启动JMeter GUI的命令窗口中查看测试执行的输出。以下是运行测试后的控制台输出。

3.结论

BeanShell脚本语言为Java语言提供脚本功能。在JMeter中,您可以使用不同的BeanShell组件来编写测试脚本并执行相同的操作。每个组件都配备有用的变量,可以在脚本中使用这些变量来执行控制流程。脚本功能为JMeter测试工具添加了强大而实用的维度。本文的目的是展示常见Beanshell组件的用法以及如何编写测试脚本来执行测试。

 

JMeter博客系列:JMeter BeanShell示例的更多相关文章

  1. hexo零基础搭建博客系列(一)

    关于其他搭建 [hexo4快速搭建博客(二)更换主题](https://blog.csdn.net/weixin_41800884/article/details/103750634)[hexo4快速 ...

  2. hexo搭建博客系列(三)美化主题

    文章目录 其他搭建 1. 添加博客图标 2. 鼠标点击特效(二选一) 2.1 红心特效 2.2 爆炸烟花 3. 设置头像 4. 侧边栏社交小图标设置 5. 文章末尾的标签图标修改 6. 访问量统计 7 ...

  3. 渣渣小本求职复习之路每天一博客系列——Unix&Linux入门(5)

    前情回顾:昨天简单地介绍了一下如何使用vi编辑器,例如命令模式和插入模式的切换,以及一些简单命令的讲解. —————————————————————————直接就开始吧———————————————— ...

  4. 渣渣小本求职复习之路每天一博客系列——数据库基础(MySQL)(5)

    前情回顾:昨天学习了MySQL中索引的设计与使用,还了解了一些常见的SQL注入攻击的手段以及防范方法,一般来说,在面试的时候如果不是要求比较高,基本就够用了. 今天碰见一个拿了TP-LINK的offe ...

  5. 渣渣小本求职复习之路每天一博客系列——TCP/IP协议栈(5)

    前情回顾:一篇短短的博客明显不能满足TCP和UDP这两个饥渴的汉子,而且还被应用协议占了一小半的篇幅.在昨天结束之后,相信大家都基本对TCP/IP协议栈的轮廓有一个大概的印象了,能够对整体有所把握. ...

  6. Microsoft SQL Server 混合云博客系列

    Microsoft 云操作系统愿景的核心支柱之一就是借助我们的混合云基础结构改造数据中心.在 Windows Azure 基础结构服务正式发布后的几个月里,我们一直在发布博客,介绍 Windows A ...

  7. flask-admin 快速打造博客 系列一

    前言: 我想分享flask+flask-admin快速打造博客的详细教程,可是发现网易课堂已经有相应的免费课堂了,所以就不打算一点一滴的在这里做笔记,分享这些东西了.所以我主要集中在flask-adm ...

  8. Hexo博客系列(三)-将Hexo v3.x个人博客发布到GitLab Pages

    [原文链接]:https://www.tecchen.xyz/blog-hexo-env-03.html 我的个人博客:https://www.tecchen.xyz,博文同步发布到博客园. 由于精力 ...

  9. Hexo博客系列(二)-在多台机器上利用Hexo发布博客

    [原文链接]:https://www.tecchen.xyz/blog-hexo-env-02.html 我的个人博客:https://www.tecchen.xyz,博文同步发布到博客园. 由于精力 ...

随机推荐

  1. React Native 隐藏组件思路

    In your render function:{ this.state.showTheThing && <TextInput/>} Then just do: this. ...

  2. 数据结构之 字符串---字符串匹配(kmp算法)

    串结构练习——字符串匹配 Time Limit: 1000MS Memory limit: 65536K 题目描述   给定两个字符串string1和string2,判断string2是否为strin ...

  3. 深入理解c语言——‘\0’ ,‘0’, “0” ,0之间的区别

    看来基础还是很重要的,基础不扎实就难以学好c语言,就别说写出高质量的c语言代码了.今天,我就被这个问题折磨的不行了,哈哈,不过现在终于明白了‘\0’ ,‘0’, “0” 之间的区别了.困惑和快乐与你分 ...

  4. 恶心的struts标签,等我毕业设计弄完了,瞧我怎么收拾你。

    1.从java action中到页面中获取变量值的struts标签 获取从bean中定义的对象中属性的值: <s:property value="#request.cardTo.acc ...

  5. win10环境变量path误删(windows找不到文件‘%windir%\systempropertiesadvanced.exe’)的解决办法

    具体步骤如下:1. 首先重新启动电脑,点击开始按钮,选择电源,此时按住键盘上的shift键,再点击“重启”,选择疑难解答->再选择高级选项->再选择启动设置->然后点击重启-> ...

  6. Spring cloud基础模块学习

    1.微服务架构构成 单体架构(通过应用集群和数据库集群来提高性能,多余模块存在浪费) 垂直架构(新的功能模块通过新项目来实现,数据库之间存在交叉关联.存在数据冗余,和单体架构一样通过扩展集群结点,成本 ...

  7. 深度学习之卷积神经网络(CNN)学习

    1.卷积神经网络中卷积的核心意义是什么?每一组卷集核 权重是一个抽特征的滤波器, 从卷集核的角度抽取特征 2.卷积神经网络很好的特性参数共享机制每一个神经元固定一组a x b x c(图像的通道数) ...

  8. cocos2d-x2.2+win7+vs2010+python安装配置

    个人网站http://www.ravedonut.com/ 1.安装vs2010 2.解压cocos2d-x,打开cocos2d-win32.vc2012.sln,编译,然后运行Hellocpp成功即 ...

  9. Flex Builder 装SVN

    由于Flex Builder没有内置SVN支持,很是不便.为了方便,给Flex Builder也装了SVN插件.由于FB基于Eclipse,安装方法都是一样的. 选择 Help -> Soft ...

  10. 学习RESTFul架构

    一.RESTFul介绍 1.一种软件架构风格,设计风格而不是标准,只是提供了一组设计原则和约束条件.它主要用于客户端和服务器交互类的软件.基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机 ...