有几个选项可用于执行自定义JMeter脚本并扩展基线JMeter功能。查看最流行的扩展机制,比较性能并分析哪一个是最好的。

这是乐队之战,JMeter风格。

Beanshell V. JSR223 V. Java Request Sampler

在我们之前的帖子中,   JMeter Performance和Tuning Tips  ( 由fantastik Philipe Mouwad编写) 我们建议使用JSR 223 + Groovy进行脚本编写。这是最好的选择,因为Groovy脚本可以编译成本机Java代码(假设满足一些要求),因此Groovy脚本执行性能几乎与Java代码一样快。

因此,如果你准备使用一次脚本,快速脏(例如在测试开始时阅读配置文件),欢迎使用Beanshell / Javascript /无论你喜欢什么。

但是,如果您要通过脚本进行一些广泛的负载测试(即从计算数据构建大量HTTP请求),则需要考虑Groovy或自定义Java请求或JMeter Sampler。

为了进行比较,我们将使用相同的简单代码生成1Mb随机字母数字字符串。

 
 

比较指标将使用10个用户x 100次迭代收集,会话持续时间为1小时(标准BlazeMeter会话长度),负载生成将通过执行上述代码从单个JMeter控制台完成,并演示以下引擎的关键性能指标:

  • Beanshell(原样)

  • JSR223(Groovy作为语言,启用了编译缓存)

  • Java(作为JMeter Java Request Sampler)

在负载生成器端包含相关的CPU / RAM成本(BlazeMeter控制台)

测试将使用以下环境:

  • 测试类型 - JMeter测试(沙盒)

  • 线程 - 每个线程组10个线程

  • 服务器类型 - 大

  • 会话时间 - 1小时

  • 引擎 - 仅限控制台

  • 服务器 - 1

  • 每个引擎的线程 - 10

  • 加速 - 没有加速

  • 迭代 - 100

  • 服务器操作系统 - Linux

  • 服务器CPU - 2x

  • Java 7 x64 1.7.0_03

  • JVM参数 - -server -Xms3072m -Xmx6144m -XX:NewSize = 64m -XX:MaxNewSize = 128m -XX:MaxTenuringThreshold = 2 -Dsun.rmi.dgc.client.gcInterval = 600000 -Dsun.rmi.dgc.server.gcInterval = 600000 -XX:PermSize = 64m -XX:MaxPermSize = 64m

 

Beanshell采样器

组态

对于Beanshell,不需要先决条件,一切都可以开箱即用。我们所需要做的就是添加一个Beanshell Sampler并粘贴1Mb随机字符串生成代码。将测试脚本上传到BlazeMeter的测试仪表板并设置适当的线程,迭代和持续时间后,我们得到以下结果:

加载测试结果

JSR233采样器

组态

如上所述,对于脚本,建议使用JSR233 + Groovy。JMeter不附带Groovy,需要单独下载。开始:

  1. Groovy网站下载区下载最新的groovy二进制包

  2. 在“embeddable”分发文件夹下找到groovy-all - $ {VERSION} .jar并将其放到JMeter / lib文件夹中。或者将其上传到“文件”区域中的BlazeMeter,BlazeMeter会将其放入相应的位置

  3. 将JSR233 Sampler添加到Thread Group,将“groovy”指定为Language

  4. 将编译缓存键设置为唯一的

  5. 将1Mb随机字符串生成代码粘贴到脚本区域

重要提示:

•  使用.groovy文件而不是将Groovy代码保留在采样器中。但是,如果需要在采样器中直接使用代码,请确保已设置编译缓存密钥。如果您有> 1 JSR233 Sampler - 请确保它们使用不同的密钥

•  不要在Groovy脚本中将任何变量引用为$ {VAR}。使用vars.get(“VAR”)或JSR233 Sampler的Parameters节

加载测试结果

Java请求

组态

Java Request是您自己的JavaSamplerClient实现,所有描述的方法都应该有适当的代码。绝对最小值是runTest()方法的覆盖,但如果您打算参数化Java Request,则需要提供适当的逻辑来读取输入和请求流的条件解释,以确定Sampler是否通过。

通过Java Request生成1Mb随机字符串的示例代码如下所示:

 

编译类需要放在JMeter安装的/ lib / ext文件夹中,最好是.jar形式,这样JMeter可以自动拾取它,否则你需要修改JMeter类路径。

使用BlazeMeter时,只需将.jar文件与您的脚本和其他扩展程序(如果有的话)一起上传,BlazeMeter引擎就会将其取出。

2013/12/05 11:09:38 INFO - BlazeMeter:BlazeMeter启动脚本完成

2013/12/05 11:09:39 INFO - jmeter.protocol.java.sampler.JavaSampler:创建的类:com.blazemeter.JavaRequest

加载测试结果

结论

建议将Beanshell用于一次性活动,例如在单线程setUp线程组中的某处读取配置文件,或者在不存在使用替代方法的情况下。

JSR233 / Groovy是脚本编写的合理选择,但只有“编译”功能。

获胜者是......... Java Request,提供卓越的性能和前沿的生产力!

Beanshell vs JSR223 vs Java JMeter脚本:性能关闭你一直在等待!的更多相关文章

  1. Jmeter系类(33) - JSR223(3) | java常用脚本

    Json 相关 解析 Response import groovy.json.JsonSlurper def responseStr = prev.getResponseDataAsString() ...

  2. Jmeter(二十)Beanshell or JSR223

    有关Beanshell和JSR223组件的部分,早就想写一大篇幅随笔进行记录,苦于不知如何去描述这两部分的内容,一直在修改随笔. 介绍一下Beanshell: Beanshell是轻量级Java,支持 ...

  3. JMeter脚本java代码String数组要写成String[] args,不能写成String args[],否则报错。

    JMeter脚本java代码String数组中括号要写在类型关键字后面,不能写在变量名后面.

  4. 3.利用jmeter制作性能脚本

        jmeter录制脚本示例   jmeter手工脚本编写与调试   业务逻辑实现之逻辑控制器   业务脚本参数化实现   jmeter处理cookie   beanshell脚本   ...

  5. lua、groovy嵌入到java中的性能对比(转)

    lua和groovy都是可以嵌入到java中的脚本语言.lua以高性能著称,与C/C++在游戏开放中有较多使用,groovy是一个基于Java虚拟机(JVM)的敏捷动态语言,在jvm下有着不错的性能. ...

  6. 性能测试培训:批量执行Jmeter脚本之ant调用

    性能测试培训:批量执行Jmeter脚本之ant调用   poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.在poptest的load ...

  7. 全网最详细!Centos7.X 搭建Grafana+Jmeter+Influxdb 性能实时监控平台

    背景 日常工作中,经常会用到Jmeter去压测,毕竟LR还要钱(@¥&*...),而最常用的接口压力测试,我们都是通过聚合报告去查看压测结果的,然鹅聚合报告的真的是丑到家了,作为程序猿这当然不 ...

  8. Jmeter(五十四) - 从入门到精通高级篇 - 如何在linux系统下运行jmeter脚本 - 上篇(详解教程)

    1.简介 上一篇宏哥已经介绍了如何在Linux系统中安装Jmeter,想必各位小伙伴都已经在Linux服务器或者虚拟机上已经实践并且都已经成功安装好了,那么今天宏哥就来介绍一下如何在Linux系统下运 ...

  9. 【jmeter】ANT批量执行Jmeter脚本

    一.环境准备: 1.Jdk1.6或以上:命令行输入:java -version,出现如下提示说明安装成功 2.ANT下载:http://ant.apache.org/bindownload.cgi 命 ...

随机推荐

  1. JS高级调试技巧:捕获和分析 JavaScript Error详解

    前端工程师都知道 JavaScript 有基本的异常处理能力.我们可以 throw new Error(),浏览器也会在我们调用 API 出错时抛出异常.但估计绝大多数前端工程师都没考虑过收集这些异常 ...

  2. 解读 CSS 布局之水平垂直居中

    对一个元素水平垂直居中,在我们的工作中是会经常遇到的,也是CSS布局中很重要的一部分,本文就来讲讲CSS水平垂直居中的一些方法.由于我们大搜车的日常工作中已经不再需要理会低版本IE,所以本文所贴出的方 ...

  3. ASP.NET 4.0 页面 ValidateRequest="false" 失效不起作用

    当ASP.NET 2.0升级到 ASP.NET 4.0后,页面的 ValidateRequest="false" 不起作用. 因为 ASP.NET 4.0 请求验证被提前到IHtt ...

  4. 51nod 80分算法题

    1537:见前几篇. 1627:题意:给定n,m的网格(10^5),初始状态为(1,1),你每次可以瞬移到右下方(不可以同行同列逗留)任何一个方格里,求移动到n,m的方案数. 一句话题解:首先很容易想 ...

  5. 4.7 希尔(shell)排序法

    4-7 ShellSort.c #include <stdio.h> #include "4-1 CreateData.c" //生成随机数的函数 #define AR ...

  6. 最近采集写的一个超简单实用的HTML解析类

    1. [文件] HtmlDom.php <?php$oldSetting = libxml_use_internal_errors( true ); libxml_clear_errors(); ...

  7. 分享知识-快乐自己:Hibernate 中Criteria Query查询详解

    1):Hibernate 中Criteria Query查询详解 当查询数据时,人们往往需要设置查询条件.在SQL或HQL语句中,查询条件常常放在where子句中. 此外,Hibernate还支持Cr ...

  8. 华为USG6500系列

    华为USG6500: ssh 登录配置 time-range 相关配置:<USG6000V1>system-view Enter system view, return user view ...

  9. BZOJ1503:[NOI2004]郁闷的出纳员

    浅谈\(splay\):https://www.cnblogs.com/AKMer/p/9979592.html 浅谈\(fhq\)_\(treap\):https://www.cnblogs.com ...

  10. poj1325机器工作——二分图最小点覆盖

    题目:http://poj.org/problem?id=1325 二分图求最大匹配,即为最小点覆盖: 一开始我写得较麻烦,求出最大匹配又去搜增广路,打标记求最小点覆盖: 然而两种方法都没写“ans= ...