要点
- 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 的重度使用者。
评论