写点什么

书评:实战 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:144294
用户头像

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

关注

评论

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

10分钟白嫖我的常用的在线工具网站清单

Guide哥

设计 在线工具 工具类网站 PDF

这可能是 Markdown 写微信公众号的一款神器了!

JackTian

效率工具 markdown markdown编辑器 markdownnice 神器

python实现·十大排序算法之桶排序(Bucket Sort)

南风以南

Python 排序算法 桶排序

2020年5月30日 泛型程序设计

瑞克与莫迪

k6新崛起的性能测试工具

IT民工仁兄

DevOps 性能 性能测试

SpringBoot之多模块开发

北漂码农有话说

不忘初心,继续努力

一周思进

ARTS 打卡计划

2020亚洲南京第十三届人工智能机器人服务展览会

南京专业智博会

展览会 论坛会 博览会 智博会

ARTS打卡-01

Geek_yansheng25

ARTS 打卡计划

PageHelper

BitSea

分布式锁🔒是个啥❓ 其实就这么点事

山中兰花草

Java redis 后端 分布式锁 开发

Wireshark的使用与数据分析(一)

姬翔

使用 PCA 进行降维可视化,了解特征分布

黄大路

数据挖掘 数据分析 可视化

恭喜你,赢得了爱情长跑的胜利

小天同学

爱情 兄弟 祝福

2020年南京第十三届物联网应用展览会

南京专业智博会

展览会 论坛会 博览会 智博会

如何优雅地实现泛型类的类型参数化

KAMI

Java 编程 反射 泛型

面试都在问的微服务、服务治理、RPC、下一代微服务框架... 一文带你彻底搞懂!

柠檬橙

微服务 后台开发 架构设计

2020年亚洲南京大数据产业展览会

南京专业智博会

展览会 论坛会 博览会 智博会

设计模式:建造者设计模式

毛佳伟🐳

ARTS-week-1

youngitachi

ARTS 打卡计划 arts

你真的清楚 Nginx 指令的规则吗?

子杨

nginx 运维

原创 面试官:你说对MySQL事务很熟?那我问你10个问题

柠檬橙

MySQL 数据库

Jupyter最佳实践

pydata

原创 | 使用JUnit、AssertJ和Mockito编写单元测试和实践TDD (十二)编写测试-简单测试

编程道与术

Java 编程 TDD 单元测试 JUnit

【CSS】为什么a标签的伪类选择器要注意书写顺序?

学习委员

CSS html css3 前端 Web

Java 底层基础笔记(一)硬件

奈何花开

Java Linux 计算机基础

2020年南京第十三届智慧停车展会

南京专业智博会

展览会 博览会 智博会 展览会论坛会

2020亚洲智能家居全屋智能展会-南京站

南京专业智博会

展览会 论坛会 博览会 智博会

Markdown 几行字符就可以生成思维导图了!

JackTian

markdown 思维导图 markdown语法 markdown编辑器 Markmap

如何衡量产品需求效果

黄大路

产品经理 产品设计 运营

2020南京第十三届智慧工地装备展览会

南京专业智博会

展览会 论坛会 博览会 智博会

InfoQ 极客传媒开发者生态共创计划线上发布会

InfoQ 极客传媒开发者生态共创计划线上发布会

书评:实战Apache JMeter-InfoQ