【JMeter】Groovy和BeanShell脚本的性能比较(转)

比较完常见后置处理器的性能以后,又顺便比较了下GroovyBeanShellhtml

2者都是基于JVM的脚本语言,2者都能直接用Java的语法和类库java

这些国外网站都推荐用Groovy:shell

http://jmeter.apache.org/usermanual/best-practices.html数据库

http://www.ubik-ingenierie.com/blog/magento-performance-toolkit-and-jmeter-best-practices/apache

https://blazemeter.com/blog/beanshell-vs-jsr223-vs-java-jmeter-scripting-its-performancepost

由于JMeter支持的一堆脚本语言里,只有它有预编译性能

 

关于jmeter的中文网站里提到groovy的不多,不知有人比较过预编译带来的速度提高有多大没测试

正好闲着来试一下网站

 


环境:jmeter 2.1三、JDK 1.8u7三、JVM参数历来没动过、win 10 prospa

 

在项目里我就是直接上Groovy的,能够用现成的脚原本测试 :)

生成随机手机号的脚本,注释就不截了

提取到另外一个脚本的公用方法,无关的也不截了

为了效率,用了静态编译(性能比较见这里

每当这脚本有改动,要用groovyc从新编译(生成的class文件跟java同样,用jad反编译就能看到java代码)

其余脚本引用的就是这个class文件

scripts目录加入了jmeter的properties文件里,因此哪里都能引用到这文件

 

为了测试,建立个beanshell脚本文件,就是文本文档把后缀改成.bsh

不知道beanshell风格是怎样,直接套java语法

如今2边作的事是同样的,beanshell脚本还少几回调用

 


 

 

咱们进JMeter,建好以下的测试计划:

暂时用不着的组件先ctrl + t禁用掉

 

先测试最简单的hello world,采样器配置以下:

* 要先下载安装groovy,安装目录下找到embeddable文件夹,把groovy-all-2.x.x.jar拷到jmeter安装目录下的lib文件夹下

而后重启jmeter才能在jsr223的菜单里看到groovy的选项

* cache key随便写点什么,保证惟一就行。直接在下面写脚本时须要写上cache key才有预编译

 

重启jmeter,运行测试1次,看到jmeter的命令行窗口里有了正确的输出

然而2边都慢得离谱,尤为是groovy慢得吓死人

清掉记录再来,预热以后好看点了

以后n次都差很少,groovy历来没低于10毫秒

 

一个hello world都比beanshell慢3~十几倍,这能用吗?

咱们看看拿正经的脚本,跑足够多的次数会怎样


 

 

首先2个采样器的设置以下:

就是填脚本文件的路径和传个变量名给脚本,没啥特别

值得注意的是groovy只要使用了外部脚本文件就有预编译,这时不用填cache key

 

用1个线程循环1次调试经过

 

修改线程组设置为:10个线程,1秒集结(0.1秒来1个),持续60秒,无启动延迟

ctrl + t禁用无关的组件(变灰那些),注意关掉全部监听器,由于接下来要用命令行运行,留着它们会拖累吞吐率

 

关掉界面,用命令行跑测试,结果以下:

BeanShell

 

再进界面改为用jsr223采样器,等爆表的cpu内存占用率回落后再跑,结果以下:

Groovy

留意summary + 的那几行,groovy一开始特别慢,请求耗时的最大值吓死人,以后减小了10倍,最终结果就是

3倍速!

没什么好说的,选Groovy就对了(并且Gradle和Jenkins也用获得它)

 

 


 

PS:

上述测试保存报告文件为csv格式,使用以下设置

大部分数据在这里都用不上,关到剩下最精简的几个

若是用一般的设置,报告文件估计要大5倍不止

就剩4列,彷佛无法再少了

留意耗时最长的通常都是前几回,以后就快了,统计时忽略开头某段时间的数据就好

 

又PS:

上面的生成手机号的脚本是给接口测试用的,性能测试就别当场生成了

先搞好几十万个塞进数据库或csv文件慢慢用吧

相关文章
相关标签/搜索