上海架构师集结!4月25-26日,全球架构师峰会首次落地上海,吴翰清、汪源、叶绍志等大咖确认出席 了解详情
写点什么

书评:实战 Apache JMeter

2017 年 2 月 05 日

要点

  • JMeter 是 Apache 的一款开源的负载测试工具
  • 通过实例学习 JMeter 的指南并不多
  • 可以从 Leanpub 下载这本书的电子版,也可以从 Amazon 购买纸质版
  • InfoQ 对这本书做了评价,并跟作者讨论了关于书和 JMeter 的话题

JMeter 是一个负载测试 Java 工具库,它是 Apache 军团成员里被埋没的英雄之一。JMeter 在 Java 1.1 时代发布,已经成为负载测试方面不可或缺的测试工具,它为那些包含 Web 前端、JVM 服务器和一堆 NoSQL 或关系型数据库的多层架构应用程序提供了很多功能。

《实战 Apache JMeter》是 Sai Matam 和 Jagdeep Jain 的一本新作,可以从 Leanpub 下载电子版,或者从 Amazon 购买纸质版。这本书填补了 JMeter 学习指南的空白,它通过平白清晰的笔调和大量截屏图片来降低学习 JMeter 的难度。这本书适合各个级别的开发人员。

这本书的内容是这样组织的:

它首先以一个自动化性能测试案例作为开场,这个案例主要测试应用程序汇率转换功能的响应时间,并绘制出相关的性能曲线。紧接着 JMeter 作为行业中坚力量出场解决测试问题。

接下来介绍性能测试的相关理论,以及一些最佳实践,然后提供了一个使用 JMeter 的测试样例,读者可以自己根据样例动手体验 JMeter。

后面的几章开始深入 JMeter,分别介绍了如何创建和录制 JMeter 测试计划,如何为测试负载分配线程组(测试入口),如何为请求创建预处理器,如何为测试序列创建控制器,如何使用计时器模拟用户的点击动作,如何创建各种服务器负载样本取样器,如何创建响应断言,如何创建响应监听器,如何创建后置处理器以便从响应中抽取数据,以及如何为测试套件定义属性和变量。

基于这几章的内容,接下来介绍在 GUI 模式和非 GUI 模式下进行分布式测试,然后介绍测试最佳实践、问题诊断、插件的使用以及其它一些经验之谈。

最后是一些综合案例学习和一个性能仪表盘的教程。

整本书有 400 多页,不过它包含了大量图片,所以可以很快读完这本书。

这本书的前言部分说明了性能负载测试的重要性:

很多公司总是在关键时刻才开始进入性能测试,然后工程团队被要求在极短的时间内完成性能测试。

InfoQ 针对该书内容与作者 Sai Matam 和 Jagdeep Jain 进行了交谈。

InfoQ:这是一本很详尽的指南,你们为什么会想到要写这么一本书呢?

Matam & Jain:我们所在的性能工程团队要求我们对一个 SaaS Web 应用程序进行调优,于是我们使用 JMeter 作为性能测试工具。我们在为一些测试用例编写测试脚本时总是碰到困难,我们需要一些 JMeter 的指南来帮我们度过难关。有些现成的资源(书或网页)会为我们提供了一些提示,不过它们并没有提供太多的细节。在万般无奈之下,我们想到了要写这样的一本书,把我们在编写 JMeter 测试用例过程中遇到的问题和解决方案聚合起来,作为本书的内容。我们想要这本书尽可能地详尽,里面的例子不会漏掉任何中间步骤。

InfoQ:在负载测试的计划阶段,JMeter 会析出检测器的开销吗?还是说这只是设计器的工作?

Matam & Jain:响应时间的计算是从请求离开 JMeter 之时到接收到服务器的响应为止。JMeter 本身不会带来多少的开销,所以测试是非常准确的。在测试运行过程中,结果会被累计起来。为了不对测试结果产生影响,结果要到测试结束之后才开始被处理,包括图表的绘制。类似的,当 JMeter 运行在分布式模式下时,普通节点的测试结果会被聚合到主节点上,在测试结束时才进行处理。用户负载是通过线程来模拟的,而线程的可用数量会受到系统的限制。执行测试的工程师在运行 JMeter 时需要对 CPU 和内存进行监控。把负载控制在 60% 以下是比较理想的,这样可以确保不会出现额外的开销。

InfoQ:JMeter 似乎无法跟持续集成环境一起使用,比如 Jenkins 或 Bamboo。这里面有什么原因吗?

Matam & Jain:我们在书里提到,把性能测试作为持续集成的一个环节是非常重要的,在案例学习部分也提到了这一点。我们认为可以把关于这个问题的讨论也加入到书中。不过,我们现在把注意力放在了核心的内容上。

InfoQ:除了性能测试,JMeter 也提供了一些重要的功能测试特性。你们为什么没有介绍这方面的内容呢?

Matam & Jain: JMeter 不是为功能测试而生的。它虽然也可以用来做功能测试,不过不是最理想的。功能测试包含了单元测试和端到端的集成测试,已经有很多现成的工具可以用来做功能测试,而 JMeter 仅局限于那些网络相关的功能测试。而且,如果你要用 JMeter 作功能测试,那么就要重新组织测试脚本了,因为需要加入很多“断言”来验证响应消息。在这本书里,我们假设在进行性能测试之前,已经通过了功能测试。

InfoQ:你们为什么要开发那些应用程序样例呢?只是为了这本书吗?

Matam & Jain:有两个原因:
1. 通常我们在学习 JMeter 时,测试样例总是把地址指向一些公共网站(比如 Yahoo 或 Google),这样做是不对的。
2. 在学习 JMeter 时,我们可能需要一个可以重定向的 URL 或者一个可以接收 JSON 格式数据的 SOAP 端点或 REST 端点。应用程序样例“dt”就可以满足所有的需求。读者可以使用书中提供的测试脚本,不需要做任何修改。

书中的 Web 应用程序样例是一个虚拟的数码配件网店。我们给它取名“Digital Toys”,简称“dt”。读者可以从 github 上下载代码。这个应用部署起来很简单,只要把它解压,并从命令行启动。书中所有相关的例子都是基于这个应用开发的。

InfoQ:这本书的潜在读者是谁?我们应该如何利用好这本书?

Matam & Jain:这本书适合那些对 JMeter 有一点使用经验的初学者和有经验的工程师。初学者可以先学习本书的前四章,学习怎么录制、创建和运行测试用例。有经验的工程师可以根据需要自行选择特定的样例进行学习。组件相关的章节介绍了 JMeter 的配置和使用,其中手册部分演示了一些特定的用法。性能架构师可以阅读“理论知识”部分和“案例学习”部分,这样有助于他们为公司做好性能测试规划。

InfoQ:有没有哪些性能测试场景是 JMeter 不擅长的?

Matam & Jain: JMeter 采用了插件机制,对新的测试协议提供了支持,所以你要自己花时间去开发插件。如果某个协议不被支持,也没有可用的开源插件,那么就不要使用 JMeter。
JMeter 并不适合用来做底层的协议测试,这些底层测试要求吞吐量接近线缆的传输速度。例如,它就不适合用来做以太网测试,以及那些要求吞吐量达到 100Mbps 或 1Gbps 的底层协议测试。对于此类测试,有其它一些办法。

InfoQ:JMeter 的不足之处有哪些呢?

Matam & Jain: JMeter 在 3.0 之前对报表的支持不是很好。不过在引入了仪表盘之后,这种情况有所缓解。另一方面是关于错误报告。隐蔽的错误消息或者说缺少错误消息给测试脚本的编写带来困难,而且在实际运行测试时也难以观察到错误。不过,这些都是些小问题,JMeter 团队已经在着手解决这些问题。通过恰当地管理测试用例,合理地使用报表和仪表盘,公司可以从性能测试中获得好处,避免把钱花在那些昂贵的工具上。

关于作者

Sai Matam拥有超过 20 年的软件开发经验。他在性能测试和调优方面有很深的造诣,他曾经对 PV 超过几百万的 Java 应用程序和 Web 应用程序做过调优。Sai 的公司 Enablor Inc 为 Web 开发提供定制方案,并提供性能调优服务。

Jagdeep Jain在软件质量保证领域拥有超过 10 年的经验。他拥有计算机科学学位,是自动化测试的坚决拥护者。他是 JMeter 的重度使用者。

查看英文原文: Book Review:Learn Apache JMeter by Example

2017 年 2 月 05 日 16:144313
用户头像

发布了 321 篇内容, 共 108.9 次阅读, 收获喜欢 104 次。

关注

评论

发布
暂无评论
发现更多内容

我家有猫

熊斌

生活方式 七日更 我家有猫

七周七并发模型

田维常

并发

第十周作业

孤星

wildfly 21中应用程序的部署

程序那些事

程序那些事 wildfly wildfly21 应用程序部署 应用程序配置

Week10作业

lggl

作业

从场景出发,日志聚类还可以这么玩

信仰圣光吧丶

AIOPS 日志聚类 日志治理

架构师训练营 大作业(二)

netspecial

极客大学架构师训练营

安全架构:加密与解密

积极&丧

重磅!四部门联合约谈蚂蚁集团!刚刚,约谈的主要内容曝光……

CECBC区块链专委会

金融

区块链的核心技术是什么?

CECBC区块链专委会

区块链

数据仓库的前世今生

数据社

数据仓库 七日更

Java并发底层知识,锁获取超时机制知多少?

码农架构

Java java 并发

框架VS架构,看两者异同

田维常

框架

Flink比Spark好在哪?

数据社

flink spark 七日更

第十周总结

孤星

区块链 链什么?

CECBC区块链专委会

区块链 分布式

Spring 源码学习 10:prepareBeanFactory 和 postProcessBeanFactory

程序员小航

spring 源码 源码阅读

Week10总结

lggl

总结 作业

是的,我又换工作了

Rayjun

工作

安全架构:反垃圾与风控

积极&丧

ARROW阿罗AOW币APP系统软件开发

开發I852946OIIO

系统开发

代理模式

soolaugust

设计模式 代理模式 七日更

用领域驱动设计驱动系统的重构

积极&丧

第五章学习总结

简简单单

Code Review实践

HQ数字卡

Code Review 七日更

架构师训练营第五周作业

zamkai

pagerank算法

橘子皮嚼着不脆

第五周 技术选型作业

简简单单

架构师训练营 大作业(一)

netspecial

极客大学架构师训练营

架构师训练营第十周笔记

李日盛

学习 微服务 DDD

日本准备推行AI婚配,年轻人会为“爱情算法”买单吗?

脑极体

OCR技术的未来发展与演进

OCR技术的未来发展与演进

书评:实战Apache JMeter-InfoQ