[关闭]
@xuemingdeng 2016-12-15T10:12:35.000000Z 字数 3327 阅读 691

书评:实战Apache JMeter

摘要:

JMeter已经成为负载测试方面不可或缺的测试工具,它为那些包含Web前端、JVM服务器和一堆NoSQL或关系型数据库的多层架构应用程序提供了很多功能。这本书作为学习指南可以帮助读者克服JMeter的学习曲线。

正文:

要点:

  • 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

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注