JMeter中BeanShell和Java扩展性能之比较

本文版权归xmeter.net 所有。欢迎转载,转载请注明出处。

摘要##

JMeter提供了多种方式来自定义脚本来实现JMeter不支持的功能,常见的方式有插入BeanShell脚本和通过扩展JMeter提供的Java接口,本文通过实现一个简单的功能来比较两种不同的实现方式下对JMeter的性能影响,并对这两种不同的实现方式的使用场景提供推荐。

测试场景##

假设测试脚本需要产生一个长度为1024的随机字符串,字符串产生后将其赋值给一个名为“data”的变量,供后面的Sampler来使用,在本文中使用的是“Dummy Sampler”,该Sampler能让用户手工输入“Request Data”和“Response Data”,使用过程中易于调试和测试。BeanShell版的JMeter测试脚本结构如下。需要注意的是Dummy Sampler不是JMeter标准提供的Sampler,读者如果有兴趣,参见https://jmeter-plugins.org 安装步骤将其安装到你的JMeter中。

完成的测试计划

BeanShell Preprocessor中的代码如下,生成了随机字符串后将值赋值给变量“data”。
BeanShell代码

在Dummy Sampler里的“Response Data”输入框中传入变量“data”,如下图所示。

在Dummy Sampler中使用BeanShell中生成的变量

Java扩展JMeter的实现方式下,测试脚本的基本结构与上类似,如下图所示,不一样的地方是把“BeanShell Preprocessor”替换成了“User Parameters”。

使用扩展function方式生成的测试计划

“User Parameters”下加入一个变量,该变量的值是自定义扩展的一个函数 - “${__MyRandomFunc()}”。

调用自定义的function

该自定义函数MyRandomFunc的实现方式如下所示,具体请参见这篇文章来学习如何扩展自定义函数。

自定义function代码的实现

测试配置##

测试运行之前,将两个测试用例的ThreadGroup的数目设置成100,每个Thread运行100次。
测试机器是在青云上申请的标准虚机:
1)2核CPU*2GB内存
2)20GB硬盘
3)操作系统CentOS 7,64位
4)Java版本是Open JDK 8
5)JMeter版本是3.0

JMeter测试采用非UI方式运行。

测试结果##

BeanShell执行完测试约用了1分18秒左右,控制台打印出的测试结果如下。JMeter进程CPU使用率为137%,内存使用率为14%.

summary + 2802 in 00:00:23 = 120.6/s Avg: 276 Min: 50 Max: 516 Err: 0 (0.00%) Active: 100 Started: 100 Finished: 0
summary + 4138 in 00:00:30 = 138.1/s Avg: 275 Min: 50 Max: 506 Err: 0 (0.00%) Active: 100 Started: 100 Finished: 0
summary = 6940 in 00:00:53 = 130.5/s Avg: 275 Min: 50 Max: 516 Err: 0 (0.00%)
summary + 3060 in 00:00:24 = 125.9/s Avg: 276 Min: 50 Max: 502 Err: 0 (0.00%) Active: 0 Started: 100 Finished: 100
summary = 10000 in 00:01:18 = 129.0/s Avg: 276 Min: 50 Max: 516 Err: 0 (0.00%)

Java扩展JMeter的实现方式执行完测试约用了32秒,控制台打印出的测试结果如下。JMeter进程CPU使用率为50%,内存使用率为5%.

summary + 6544 in 00:00:19 = 348.5/s Avg: 273 Min: 50 Max: 501 Err: 0 (0.00%) Active: 100 Started: 100 Finished: 0
summary + 3456 in 00:00:14 = 252.6/s Avg: 277 Min: 50 Max: 501 Err: 0 (0.00%) Active: 0 Started: 100 Finished: 100
summary = 10000 in 00:00:32 = 308.1/s Avg: 274 Min: 50 Max: 501 Err: 0 (0.00%)

由测试结果可以看到Java扩展JMeter方式下执行时间,CPU、内存占用率比BeanShell方式下占明显的优势。读者需要注意的是Avg,Min和Max指的是“Dummy Sampler”的统计数据,两种使用方式下Dummy Sampler的执行时间都是一样的,而吞吐量后者比前者多了将近1倍,原因就在于测试步骤中的第一步的不同实现方式下,后者比前者快了很多。

使用建议##

BeanShell是JMeter内置的功能,但是由于它是脚本语言,动态加载执行的,因此效率不是很高,不太适合于在经常执行的场景下,比如将BeanShell放在循环内部,不断地被执行。比较适合的应用场景是放在执行一次、或者少数几次的地方,比如在循环外部读取配置文件内容等。

而Java扩展JMeter的实现方式的效率比较高,适合于放在经常执行的测试步骤中,但是由于它不是JMeter内置的功能,扩展起来需要有些工作量,而且部署的时候也比较麻烦(分布式运行的时候需要将自定义的JAR拷贝至所有的机器上)。读者根据自己的使用场景来选择适合自己的自定义脚本的方式。

关于我们##

XMeter成立于2016年,核心团队都来自于IBM,是一家领先技术的性能测试持续集成咨询与服务提供商。我们致力于提供给客户可靠,简单,低成本的性能测试解决方案。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,425评论 4 361
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,058评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,186评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,848评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,249评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,554评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,830评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,536评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,239评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,505评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,004评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,346评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,999评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,060评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,821评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,574评论 2 271
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,480评论 2 267

推荐阅读更多精彩内容

  • 本文版权归xmeter.net所有。欢迎转载,转载请注明出处。原文请参见这里。 摘要 在利用JMeter实施性能测...
    XMeter性能测试云服务阅读 6,501评论 0 3
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,099评论 18 139
  • 一、基本概念 1.测试计划是使用 JMeter 进行测试的起点,它是其它 JMeter 测试元件的容器。 2.线程...
    Leo_0626阅读 2,203评论 0 10
  • 在使用Jmeter进行接口的性能测试时,由于Jmeter 是JAVA应用,对于CPU和内存的消耗比较大,所以,当需...
    燕京博士阅读 4,086评论 0 16
  • 【手写爱情绘本6.0】一个人总是仰望和羡慕着别人的幸福,一回头,却发现自己正被仰望和羡慕着,其实每个人都是幸福的。...
    主播亚东阅读 211评论 0 0