JMeter博客系列:JMeter BeanShell示例

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组件的用法以及如何编写测试脚本来执行测试。

原文地址:https://www.cnblogs.com/a00ium/p/10294039.html

时间: 2024-08-02 17:16:29

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

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

关于其他搭建 hexo4快速搭建博客(二)更换主题 hexo4快速搭建博客(三)美化 很全面 收集很多资料 hexo4快速搭建博客(四)写作技巧包含图床和自动变图床的插件 hexo4搭建博客系列(五)优化博客(无坑) 部署到阿里云 hexo4搭建博客系列(六)百度,必应,谷歌收录(无坑) 搭建一个博客不难,但是网上资料好多坑.可能我有些会写错,请在评论指出.但是有经过测试的.我用的版本是 hexo4.0 + NexT7.6版本. 我的个人博客 有阿里云服务器就可以部署上去,没有也可以用githu

搭建自己的技术博客系列(二)把 Hexo 博客部署到 GitHub 上

1.在GitHub上建一个新仓库 ? 2.配置Git的SSH KEY 生成SSH添加到GitHub 回到你的git bash中, git config --global user.name "yourname" git config --global user.email "youremail" 这里的yourname输入你的GitHub用户名,youremail输入你GitHub的邮箱.这样GitHub才能知道你是不是对应它的账户. 可以用以下两条,检查一下你有没

搭建自己的技术博客系列(三)让你的博客拥有评论功能!

给大家介绍一个博客评论神器,Valine. 本来hexo博客用的是gitment,我也非常喜欢,看着逼格就超高呀.无奈我用着bug略多,而且毕竟有github账户的小伙伴似乎并不多.于是我就忍痛准备换评论系统.然后在最近刚刚加入的hexo博客群里,看见了一个神器.也就是本篇主人公--Valine.js. 具体配置就见如下的文章吧.它的定义-- 一款极简的无后端评论系统. 在多说和网易云跟帖相继倒闭的情况下,这个简直是救人一命胜造七级浮屠呀. Valine -- 一款极简的评论系统 Valine官

搭建自己的技术博客系列(五)hexo博客接入busuanzi插件,展示访问量和网站运行时间

busuanzi计数脚本 busuanzi官方指引 一.安装脚本(必选) 要使用不蒜子必须在页面中引入busuanzi.js,目前最新版如下. <script async src="//busuanzi.ibruce.info/busuanzi/2.3/busuanzi.pure.mini.js"></script>不蒜子可以给任何类型的个人站点使用,如果你是用的hexo,打开themes/你的主题/layout/_partial/footer.ejs添加上述脚

协议学习之 vamei博客系列 05 IP协议详解

作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 在粗略了解了IP接力和IP地址后,我们再反过来,看一看IP协议的具体细节和设计哲学. IPv4与IPv6头部的对比 我们已经在IP接力中介绍过,一个IP包分为头部(header)和数据(payload/data)两部分.头部是为了实现IP通信必须的附加信息,数据是IP通信所要传送的信息. 黄色区域 (同名区域) 我们看到,三个黄色区域跨越了IPv4和IPv6.Version(4位

协议学习之 vamei博客系列 02 小喇叭开始广播 (以太网与WiFi协议)

作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! “小喇叭开始广播啦”,如果你知道这个,你一 定是老一辈的人.“小喇叭”是五十年代到八十年代的儿童广播节目.在节目一开始,都会有一段这样的播音:“小朋友,小喇叭开始广播了!” 听到这里,收音机前的小朋友就兴奋起来,准备好听节目了:这一期的内容是以太网(Ethernet)协议与WiFi. 我们在邮差与邮局中说到,以太网和WiFi是连接层的两种协议.在连接层,信息以帧(frame)为单

协议学习之 vamei博客系列 03 IP接力赛 (IP, ARP, RIP和BGP协议)

作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 网络层(network layer)是实现互联网的最重要的一层.正是在网络层面上,各个局域网根据IP协议相互连接,最终构成覆盖全球的Internet.更高层的协议,无论是TCP还是UDP,必须通过网络层的IP数据包(datagram)来传递信息.操作系统也会提供该层的socket,从而允许用户直接操作IP包. IP数据包是符合IP协议的信息(也就是0/1序列),我们后面简称IP数

协议学习之 vamei博客系列 总结

1. 分层: 物理层(physical layer) 所谓的物理层,是指光纤.电缆或者电磁波等真实存在的物理媒介.这些媒介可以传送物理信号,比如亮度.电压或者振幅.对于数字应用来说,我们只需要两种物理信号来分别表示0和1,比如用高电压表示1,低电压表示0,就构成了简单的物理层协议.针对某种媒介,电脑可以有相应的接口,用来接收物理信号,并解读成为0/1序列. 连接层(link layer) 在连接层,信息以帧(frame)为单位传输.所谓的帧,是一段有限的0/1序列.连接层协议的功能就是识别0/1

协议学习之 vamei博客系列 01 网络协议概观

作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 信号的传输总要符合一定的协议(protocol).比如说长城上放狼烟,是因为人们已经预先设定好狼烟这个物理信号代表了“敌人入侵”这一抽象信号.这样一个“狼烟=敌人入侵”就是一个简单的协议.协议可以更复杂,比如摩尔斯码(Morse Code),使用短信号和长信号的组合,来代表不同的英文字母.比如SOS(***---***,  *代表短信号,-代表长信号).这样"***= S, --