JMeter 性能测试实战(第2版)(txt+pdf+epub+mobi电子书下载)


发布时间:2020-10-10 17:10:45

点击下载

作者:(美) 巴约·艾林勒(Bayo Erinle 译 黄鹏

出版社:人民邮电出版社有限公司

格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT

JMeter 性能测试实战(第2版)

JMeter 性能测试实战(第2版)试读:

前言

性能测试是一种评估在给定的工作负载下系统或应用的响应速度、可靠性、吞吐量、互操作性以及可扩展性的测试。这对任何软件产品的成功运行和维护来说都是不可缺少的关键部分。同时性能测试也是衡量应用是否可以支持更大用户群的重要手段。

JMeter是一个免费、开源、跨平台的性能测试工具,于20世纪90年代后期面世。这是一个成熟、健全且具有高度可扩展性的工具。JMeter有大量的用户,并提供了大量用于测试的插件。

这是一本基于如何根据测试需求使用JMeter的实践指南。本书首先简单介绍了性能测试,然后快速进入正题,包括录制测试脚本、监控系统资源,同时扩展介绍了JMeter的几个元件,以及使用云进行测试,通过插件扩展JMeter的功能等。在这个过程中,你将会编写部分代码,学习使用Vagrant、Tomcat这些工具,并学习在测试工作中需要用到的所有相关知识。

无论你是开发人员还是测试人员,本书都介绍了一些非常重要的知识,这些知识对你将来从事的测试工作会有很大帮助。本书内容

第1章介绍性能测试的基础知识以及JMeter的安装和配置。

第2章介绍如何录制你的第一个JMeter测试脚本,并分析JMeter测试脚本的细节。

第3章介绍表单提交的细节。该章讨论各种HTML表单元素(复选框、单选按钮、文件上传和下载等),以及JSON数据与XML的处理。

第4章介绍会话管理,包括使用Cookie和URL重写两种方式。

第5章介绍如何监控测试执行过程中的系统资源活动,并讨论如何启动一个服务器以及通过插件扩展JMeter。

第6章深入探究如何使用云进行性能测试。该章将会介绍Vagrant和AWS这类工具,并探索目前已有的云测试平台BlazeMeter和Flood.io。

第7章介绍一些有用的小贴士,并给出在JMeter使用方面非常有效的方法和建议。阅读本书需要做什么准备

为了能够成功运行本书中提供的示例代码,你需要准备:● 一台计算机;● JMeter(参见Apache网站);● Java运行环境(Java Runtime Environment, JRE)或Java开发工

具包(Java Development Kit, JDK),参见Oracle网站。

此外,针对第5章,你还需要准备Tomcat(参见Apache网站)。

针对第6章,你还需要准备:● Vagrant;● 1个AWS账号;● 1个BlazeMeter账号;● 1个Flood.io账号。

书中也会结合以上所需设置提供一些其他有用的网站。本书读者对象

本书主要的目标读者是开发人员和测试人员。如果你是一位对性能测试感兴趣并想接触性能测试的开发人员,你会发现本书非常有用,通过练习本书中的实例,你将大幅度提升测试技能。

本书对测试人员也会非常有益,本书将指导他们解决在测试现代Web应用程序过程中遇到的实际问题,本书提供的丰富知识将使他们成为更优秀的测试人员。此外,在他们的实际测试工作中,本书中涉及的测试工具将随时派上大用场。本书约定

本书采用以下版式约定。

代码块如下所示。name=firstName0lastName0name_g=2name_g0="firstName":"Larry","jobs":[{"id":1,"description":"Doctor"}],"lastName":"Ellison"name_g1=Larryname_g2=Ellisonserver=jmeterbook.aws.af.cm

当我们希望突出代码块中的某些部分时,相关行或相关代码将会加粗,如下所示。name=firstName0lastName0name_g=2name_g0="firstName":"Larry","jobs":[{"id":1,"description":"Doctor"}],"lastName":"Ellison"name_g1=Larryname_g2=Ellisonserver=jmeterbook.aws.af.cm

所有的命令行输入和输出都将如下所示。vagrant ssh n1cd /opt/apache-jmeter-2.12/bin./jmeter --version 表示警告或重要的提醒。 表示提示和技巧。读者反馈

非常欢迎读者的反馈。请让我们知道你对本书的看法——不论是否喜欢。读者反馈对我们非常重要,可以帮助我们开发更多符合市场需求的选题。

可以通过发送邮件至feedback@packtpub.com提供反馈,请在反馈信息中说明本书的书名。

如果你有兴趣写书,请查看packtpub网站上的作者指南。勘误

尽管我们已经努力确保内容的准确性,但是错误是不可避免的。如果你发现了本书中的错误(也许是文字或代码的错误),并且能提交勘误,我们将非常感谢。这不仅可以使其他读者少走弯路,还可以帮助我们改进本书随后的版本。如果你发现任何错误,请访问packtpub网站,选择你的图书,单击Errata Submission Form链接,然后输入错误的具体内容,从而提交勘误。一旦你提交的勘误被确认,这条勘误信息将上传至我们的网站或添加至本书Errata部分已有的勘误表中。

通过访问packtpub网站,输入书名,可以查看之前提交的勘误。勘误信息将会出现在Errata部分。版权

因特网上图书的版权问题从来就没间断过。Packt非常重视版权和授权。如果你在因特网上发现任何盗版的Packt图书,请把网址或网站名称发送给我们,便于我们及时采取补救措施。

如果怀疑是盗版书,请通过copyright@packtpub.com联系我们。

非常感谢你为保护我们的版权所做的努力,我们也将尽力提供有价值的 内容。问题

关于本书的任何问题,都可以通过questions@packtpub.com联系我们,我们将尽全力解答你的问题。服务与支持

本书由异步社区出品,社区(https://www.epubit.com/)为您提供后续服务。提交勘误

作者和编辑尽最大努力来确保书中内容的准确性,但难免会存在疏漏。欢迎您将发现的问题反馈给我们,帮助我们提升图书的质量。

当您发现错误时,请登录异步社区,按书名搜索,进入本书页面,单击“提交勘误”,输入勘误信息,单击“提交”按钮即可(见下图)。本书的作者和编辑会对您提交的勘误进行审核,确认并接受后,您将获赠异步社区的100积分。积分可用于在异步社区兑换优惠券、样书或奖品。与我们联系

我们的联系邮箱是contact@epubit.com.cn。

如果您对本书有任何疑问或建议,请您发邮件给我们,并请在邮件标题中注明本书书名,以便我们更高效地做出反馈。

如果您有兴趣出版图书、录制教学视频,或者参与图书翻译、技术审校等工作,可以发邮件给我们;有意出版图书的作者也可以到异步社区在线提交投稿(直接访问www.epubit.com/selfpublish/submission即可)。

如果您所在学校、培训机构或企业想批量购买本书或异步社区出版的其他图书,也可以发邮件给我们。

如果您在网上发现有针对异步社区出品图书的各种形式的盗版行为,包括对图书全部或部分内容的非授权传播,请您将怀疑有侵权行为的链接发邮件给我们。您的这一举动是对作者权益的保护,也是我们持续为您提供有价值的内容的动力之源。关于异步社区和异步图书“异步社区”是人民邮电出版社旗下IT专业图书社区,致力于出版精品IT技术图书和相关学习产品,为作译者提供优质出版服务。异步社区创办于2015年8月,提供大量精品IT技术图书和电子书,以及高品质技术文章和视频课程。更多详情请访问异步社区官网https://www.epubit.com。“异步图书”是由异步社区编辑团队策划出版的精品IT专业图书的品牌,依托于人民邮电出版社近30年的计算机图书出版积累和专业编辑团队,相关图书在封面上印有异步图书的LOGO。异步图书的出版领域包括软件开发、大数据、AI、测试、前端、网络技术等。异步社区微信服务号第1章 性能测试基础

软件性能测试用于评估计算机、网络、软件系统或设备的速度或效率。这个过程涉及实验室中的定量测试,比如,测量某个系统功能的响应时间或者每秒百万条指令(Millions of Instructions Per Second,MIPS)的数值。——维基百科

考虑一个案例分析。Baysoft Training是一家正在不断崛起的初创企业,重新定义了如何通过软件为IT领域内各行业的人群提供更多培训。这家公司为了达到这个目标,推出了一系列的产品,包括在线的课程、线上培训,以及线下的培训。该公司的旗舰产品之一TrainBot是一个纯粹用于培训课程的网站应用,旨在帮助客户达成职业生涯的目标。只要注册一个账号,客户就能够在上面学习一系列在线课程。1.1 事故

之前一段时间,TrainBot仍在进行内部测试,并且暂时只开放给少量客户,所以流量一直在可承受范围内。所有功能都运转正常,系统响应也非常快。为了庆祝TrainBot的发布并推广自己的在线培训课程,Baysoft Training公司将所有的培训课程以二五折销售。然而,这次促销给TrainBot造成了一次远远超出公司预期的流量涌入。Web流量达到之前的300%,运行状况越来越糟糕。网络资源也开始无法正常访问,服务器CPU和内存的占用率达到90%~95%,数据库服务器由于高的I/O速率和大量争用问题勉强正常运行。结果,大部分Web请求的响应开始变慢,大部分第一次访问TrainBot的客户完全无法访问网站。之后没过多久,服务器因为不堪重负而彻底崩溃。1.2 后果

这对Baysoft Training公司总部来说是一个漫长的夜晚。这一切是怎么发生的?是否可以避免?为什么应用和系统无法承受这样的负载?为什么不对系统与应用做足够的性能和压力测试?是应用的问题、系统资源的问题还是两者共有的问题?管理层将工程师团队聚集到会议室,希望得到这些问题的答案,工程师团队包括软件开发工程师、网络和系统工程师、负责质量保证(Quality Assurance,QA)的测试工程师以及数据库管理员。房间里充满了相互指责和抱怨。在一阵头脑风暴后,整个团队意识到应该确定之后需要怎么做。应用和系统资源应该经过全面而严格的测试。这包括应用的各个方面以及所有支撑的系统资源,包括但不限于基础设施、网络、数据库、服务器和负载均衡器。这个测试应该可以帮助研发团队发现性能的瓶颈并解决问题。1.3 性能测试

性能测试是一种评估在指定工作负载下系统或应用的响应能力、可靠性、吞吐量、互操作性以及可扩展性的测试。性能测试也可以定义为一种评估计算机、网络、软件应用或设备的速度或效率的过程。可以对软件应用、系统资源、目标应用元件、数据库等进行性能测试。通常测试会包含一个自动化的测试套件,该测试套件能够很容易地反复模拟各种正常值、峰值以及异常负载的情况。这种形式的测试可以评估一个系统或应用是否能达到供应商所声明的规格要求。测试过程可以比较应用在速度、数据传输率、吞吐量、带宽、效率或可靠性等方面的变化。性能测试也作为评估瓶颈和单点故障的诊断工具。通常性能测试在一个可控的环境下进行,与压力测试同时进行。性能测试也是评估系统或应用在恶劣条件下仍能保持一定级别效率的能力的过程。

为什么如此麻烦?从Baysoft的例子中我们就可以看出,为什么这么多公司会花大力气来进行性能测试了。如果在发布之前做了充足有效的性能测试,TrainBot可能就不会变成一团糟,进而演变成一场灾难了。

接下来,我们将继续探究有效的性能测试的其他优点。

从宏观上看,性能测试可节约成本,树立公司的品牌。性能测试的实施标志着软件应用的发布已经准备就绪,网络和系统资源充足,架构稳定,应用的可扩展性强等。在发布应用之前收集评估应用和系统资源的性能特性,可以帮助提前解决问题,并为项目干系人提供有价值的反馈,帮助他们做出关键的战略决策。

性能测试覆盖了几乎所有范围,例如:● 评定应用和系统产品成熟度;● 根据性能基准(例如,每秒事务处理量、每日页面浏览量、每日

注册量等)对系统进行评估;● 对比多个系统或不同系统配置下的性能特性;● 识别影响性能的资源瓶颈;● 辅助性能和系统调优;● 帮助识别系统吞吐量级别。

几乎所有领域之间都互相关联,几乎每一方面都关系到项目干系人的整体目标。然而,在正式进入性能测试之前,让我们先了解一下性能测试实施过程的几个关键活动。● 定义验收标准:负载下应用的各个模块可接受的性能标准是什

么?具体来说,需要定义好响应时间、吞吐量,以及资源利用率

目标和约束条件。在特定页面渲染完成之前最终用户需要等待多

长时间?响应时间通常是用户所关注的,吞吐量与业务相关,资

源利用率与系统相关。因此,响应时间、吞吐量和资源利用率都

是性能测试的关键指标。验收标准通常由项目干系人确定,测试

过程中通常需要持续关注,标准也可能要根据实际情况进行调

整。● 定义测试环境:熟悉物理测试环境和产品环境对一次成功的测试

执行来说非常关键。需要明确的东西包括硬件、软件,以及测试

环境下的网络设置,这将有助于制订有效的测试计划并从一开始

就识别出测试风险。大多数情况下,在测试周期内需要反复查看

这些配置并实时进行调整。● 规划并设计测试用例:(如果有条件的话)先了解应用的使用方

式,再确定各种场景下真实的使用场景(包括变化)。例如,如

果应用中有一个用户注册模块,通常一天会有多少个用户进行注

册呢?所有的注册是否同时发生?还是分散的?通常一小时内有

多少人用户登录?以上这些问题都将帮助你在做测试计划时考虑

周全。尽管如此,肯定存在因为被测应用尚未投产使用所以暂时

没有使用模式信息的情况。此时,应该向项目干系人了解具体的

业务流程,尽可能使测试计划接近实际情况。● 准备测试环境:配置测试环境、工具和资源对运行计划完成的测

试场景来说是前提。为测试环境配备监控资源的装置,对有效分

析结果非常重要。根据实际情况,有些公司可能会建立一个独立

的团队,专门负责配置测试工具,同时其他团队负责其他配置,

例如,资源监控,有些公司会让一个团队负责所有这些配置。● 准备测试计划:使用测试工具录制计划好的测试场景。不少免费

和商业测试工具都可以非常好地完成这个工作,每一个工具都有

优点和 缺点。

可用的工具包括Load Runner(HP公司的产品)、NeoLoad、

LoadUI、Galting、WebLOAD、WAPT、Loadster、LoadImpact、

Retional Performance Tester、Testing Anywhere、OpenSTA、

LoadStorm、The Grinder、Apache Benchmark和HttpPerf等。其

中一些工具是商业工具,其他一些在成熟度、可移植性和可扩展

性方面都不如JMeter。以HP的Load Runner为例,尽管它能够提

供更优秀的图表接口和监控功能,但如果不额外购买许可证,模

拟线程的数量被限制在250以内,并且相对来说比较昂贵。

Gatling是这个领域的新生代,免费且看起来前途光明。Gatling目

前处于初期阶段,致力于弥补JMeter的一些短板,包括用更简单

的测试领域特定语言(Domain-Specific Language,DSP)来替

代JMeter冗长的XML,以及使用更美观、更易于理解的HTML格

式的报告等。然而,只有少量用户愿意使用Gatling来替代JMeter,

并且不是所有人都习惯用Gatling的特定语言Scala来建立测试计

划。Gatling可能会更受程序员的青睐。

本书中我们选择使用JMeter来进行演示,读者从本书书名应该能

看出这一点。● 运行测试:脚本录制完成后,在轻量负载下运行测试计划,验证

测试脚本和输出结果的正确性。如果测试脚本里输入的测试数据

用于模拟真实数据(后面的章节会讲到),也需要验证测试数据。

在测试计划执行过程中另外一个需要关注的点是服务器日志。通

常可以通过监控服务器的资源监控代理获取这些日志。重点需要

关注警告和错误。例如,出现频度高的错误可能代表测试脚本、

被测应用或系统资源有问题,也可能三者都有问题。● 分析结果、报告和重测试:检查每一次成功执行的结果,识别需

要解决的瓶颈。瓶颈可能与系统、数据库或应用有关。出现系统

相关的瓶颈可能需要调整基础设施,例如,增加应用的可用内存,

降低CPU使用率,增大或减小线程池,调整数据库连接池大小,

调整网络设置等。出现数据库相关的瓶颈需要分析被测应用中的

数据库I/O操作、高级查询,分析SQL查询,增加索引,执行数

据采集,改变表中的页大小和锁等。最后,出现应用相关的瓶颈

可能需要重构应用元件,降低应用内存使用率,减少数据库中的

读取/写入等。识别到的瓶颈问题解决后,应该重新运行测试并

和之前的运行比较。为了跟踪哪些调整解决了特定瓶颈问题,按

顺序同一时间只做一个调整至关重要。换句话说,一旦进行了调

整,就应该重新按照测试计划运行一次并与之前的测试结果进行

比较,看这次调整对结果产生了正面还是负面的影响。这个过程

将一直重复,直到达到项目要求的性能指标。

性能测试中的关键活动如图1-1所示。图1-1 性能测试中的关键活动

性能测试通常需要各个角色合作完成,包括业务干系人、企业架构师、开发人员、测试人员、数据库管理员、系统管理员以及网络管理员。要在测试实施中获得准确、有效的测试结果,这些角色的相互合作是非常必要的。在不断的调优过程中监控网络占用率、数据库I/O、等待时间、高级查询以及调用次数可以帮助找到瓶颈或找到值得进一步关注的区域。1.4 性能测试和调优

性能测试和调优的关系非常紧密。通常,端到端的测试会揭示系统或应用的瓶颈,这些瓶颈导致无法达到项目要求的目标。一旦发现瓶颈问题,大多数团队随后会进行各种调优,以提升应用性能。

调优工作包括但不限于以下内容:● 调整系统资源设置;● 优化数据库查询;● 减少应用的调用次数,有时需要重新设计有问题的模块并调整架

构;● 扩展应用和提高数据库服务器性能;● 减少应用资源占用量;● 优化和重构代码,包括消除冗余和缩短执行时间。

即使应用性能已达标,如果团队希望削减使用的系统资源数量,减少硬件数量或进一步提升系统性能,则也需要进行调优。

经过调整(或一系列调整),重新执行测试以查看性能是否因此而提高。即使性能结果已达到可接受的目标,这个过程仍会继续。测试-调优循环的结果通常会产生一个基线。1.4.1 基线

基线是为评估系统或应用连续调整的效果而获取性能指标数据的过程。除为了对比性能而特意变化的特征和配置之外,保持相同的特征和配置对于有效对比某个调整(或一系列调整)在性能调优中的正面作用非常重要。对于系统设置或应用的调整之后,对应的测试结果可以与基线结果比较,以确定调整是否有意义。在收集基线数据时需要考虑如下几点。● 基线数据应该是应用程序特定的。● 可以为系统、应用或者模块建立基线。● 基线数据是指标数据/结果。● 基线数据不应该过于概括。● 随时间变化可能需要重新定义基线数据。● 基线数据可以当作共享的参考框架。● 基线数据应该是可重用的。● 基线数据可以帮助识别性能的变化。1.4.2 负载和压力测试

负载测试是给系统加压并测量其响应的过程,主要用于确定系统能承受的最大负荷。压力测试是通过给系统施加比正常情况下高出很多的负载并判定其响应能力的过程。压力测试与性能测试有所区别,性能测试的唯一目的是确定系统的响应和有效性,即系统有多快。因为都关注负载对系统响应的影响,所以性能测试通常几乎都会和压力测试同时进行。1.5 性能测试工具——JMeter

前面几节介绍了性能测试的基础。性能测试的其中一部分就是测试工具。你通过什么工具给系统或应用加压呢?从免费工具到商业解决方案,非常多的测试工具可以完成这个工作。然而,本书重点关注的是JMeter,由Apache软件基金会发布的一款免费、开源、跨平台的桌面应用。JMeter从1998年问世以来的历史变更可通过它的官方网站查看,经过变迁,它已经成为一款成熟、功能健全且可信赖的测试工具。成本原因也促进了JMeter的广泛使用。小公司通常不会为商业测试工具支付费用,而且这些商业测试工具还有各种限制,例如,对同时并发的用户数有限制。我第一次接触JMeter正是因为这个限制。当时我在一个小公司工作,公司购买了一个商业测试工具,但是在测试过程中,为了模拟真实的测试计划,我们需要并发的用户数超出了许可的限制。而JMeter是完全免费的,我们试用了JMeter,它免费提供的大量功能真的让我们喜出望外。

以下是JMeter的部分功能。● 支持各种不同服务器类型,包括Web(HTTP和HTTPS)、SOAP、

数据库、LDAP、JMS、邮件以及本地命令或shell脚本的性能测

试。● 可以在各种操作平台间移植。● 具有真正的多线程框架,允许通过多个线程发出并发的请求和通

过单独的线程组向不同功能发出并发的请求。● 具有图形用户界面(Graphical User Interface, GUI)。● 支持通过HTTP代理录制服务器。● 支持缓存和离线分析/测试结果回放。● 在测试过程中测试结果实时可见。

JMeter可以模拟应用上多个并发的用户请求,这可以帮你达到本章前面提到的目标,例如,获取基线、识别瓶颈等。

JMeter将帮助你回答类似以下问题。● 如果50个用户并发访问应用,应用是否仍能响应?● 在负载为200个用户的情况下应用是否可用?● 在负载为250个用户的情况下系统消耗多少资源?● 在系统中活跃用户达到1000个的情况下吞吐量如何?● 应用中不同的元件在负载下的响应时间如何?

然而,不应该把JMeter和浏览器混淆(更多内容请参考第2章以及第3章)。JMeter无法执行所有浏览器支持的操作,尤其是JMeter无法执行HTML页面中的JavaScript代码,也无法像浏览器那样提交HTML页面。然而,通过各种监听器,你可以查看HTML格式的请求和响应,但是时间控制不会包含在任何请求中。此外,同一台机器上的并发用户数有限制。这依赖于机器性能(如内存、处理器个数等)以及运行的测试场景。根据我们的经验,在一台拥有2.2GHz处理器和8GB RAM的机器上可以支持250~250个并发用户。1.6 安装和运行JMeter

现在,安装和运行JMeter。安装

通过JMeter的包文件安装它非常简单。最好在有防火墙的企业环境中或非管理员特权的机器上安装JMeter。首先,可以通过Apache网站获取最新发布的二进制文件。编写此书时,最新发布的版本是2.12。Apache网站也提供了扩展名为.zip和.tar的安装包,可以选择扩展名是.zip的文件,但如果你喜欢.tgz文件,也可以免费下载。

下载完成后,将文件解压到指定的目录下。在本书中,这个文件解压的目标路径将指定为JMETER_HOME。确保JDK/JRE正确安装并设置了JAVA_HOME环境变量。所有准备工作完成后,就可以开始运行JMeter了。

图1-2展示了JMeter安装目录的结构。图1-2 JMeter安装目录的结构

以下是图1-2展示的Apache-JMeter-2.12的部分目录。● bin:该目录包含启动和执行其他JMeter操作的可执行文件。● docs:该目录包含用户指南。● extras:该目录包含各种使用样例,例如,通过JMeter和bean

shell脚本调用Apache Ant构建工具。● lib:该目录包含JMeter所需的JAR包(也可以添加其他的JAR包,

然后在JMeter里使用,这部分内容将在后面介绍)。● printable_docs:这里面是一些可打印的文件。1.安装Java JDK

根据以下步骤安装Java JDK。(1)访问Oracle网站。(2)下载与你的系统适配的Java JDK(非JRE)。编写本书时,最新版本是JDK1.8(update 20),这也是本书中所使用的版本。(3)双击可执行文件,并根据屏幕上的提示逐步操作。 

在Windows系统中,JDK的默认安装目录是Program Files。这本来是没问题的,唯一的问题是这个目录名称包含空格,在设置路径或通过命令行运行像JMeter这种依赖JDK的程序时可能会有问题。因此,建议修改JDK的默认安装路径,例如修改为C:\tools\jdk。2.设置JAVA_HOME

以下是在Windows和UNIX操作系统上设置JAVA_HOME环境变量的 步骤。1)在Windows系统下设置JAVA_HOME

出于讲解需要,假设你已经在C:\tools\jdk中安装了JDK。(1)进入控制面板。(2)单击“系统”,打开“系统属性”对话框。(3)在“系统属性”对话框中,单击“高级”选项卡,并单击“环境变量”按钮,打开“环境变量”对话框。(4)把“变量名”设置为JAVA_HOME。“变量值”设置为“C:\tools\jdk”。(5)选中Path(在“系统变量”下面,位于界面中部)。(6)单击“编辑”按钮。(7)在已有的Path值(如果有的话)末尾添加%JAVA_HOME%/bin。2)在UNIX系统下设置JAVA_HOME

出于讲解需要,假设你已经在/opt/tools/jdk中安装了JDK。(1)打开一个终端窗口。(2)导入JAVA_HOME=/opt/tools/jdk。(3)导入PATH=$PATH:$JAVA_HOME。

建议将这个设置添加到shell配置文件(对于bash用户是.bash_profile;对于zsh用户是.zshrc)中,这样就不用每次打开新的终端窗口时都需要重新设置一遍。3.运行JMeter

JMeter安装好后,JMETER_HOME下的bin目录下包含了所有可执行脚本。根据JMeter所在的操作系统,要么在UNIX/Linux系列操作系统上执行shell脚本(.sh文件),要么在Windows系列操作系统上执行批处理脚本(.bat文件)。 

把JMeter文件另存为扩展名为.jmx的XML文件。本书中把JMeter文件称为测试脚本或JMX文件。

这些脚本包括以下几个。● jmeter.sh:这个脚本用于启动JMeter GUI(默认)。● jmeter-n.sh:这个脚本用于非GUI模式启动JMeter(以JMX文件

作为输入)。● jmeter-n-r.sh:这个脚本用于远程以非GUI模式启动JMeter。● jmeter-t.sh:这个脚本用于在GUI中打开一个JMX文件。● jmeter-server.sh:这个脚本用于在服务器模式下启动JMeter(在

以远程方式测试多台服务器时这将开启主节点)。● mirror-server.sh:这个脚本用于启动JMeter的镜像服务器。● shutdown.sh:这个脚本用于正常关闭一个正在运行的非GUI的实

例。● stoptest.sh:这个脚本用于立即关闭一个正在运行的非GUI的实

例。

要在UNIX/Linux系统上启动JMeter,首先打开一个shell终端,切换到JMETER_HOME/bin目录,然后运行如下命令。./jmeter.sh

在Windows系统下运行如下命令。jmeter.bat

稍后在配置代理服务器时,将能看到JMeter的GUI。可以花点时间研究一下GUI。把鼠标指针悬停在每一个图标上面,可以看到这个图标的功能。JMeter团队已经把GUI设计得非常出色了。大多数图标与你之前使用过的相似,这将降低你的学习成本并缩短适应时间。部分图标(如停止和关闭)目前是禁用的,直到场景设置完结/测试正在进行时才启用。在下一章中,当录制我们的第一个测试脚本时,我们将会学习GUI的更多细节。

在终端窗口中,你可能会看到Java 8的一些警告,一些Java选项(PermSize和MaxPerSize)可能被忽略。不用惊慌。JDK 8有着更出色的内存管理功能,一些之前用于启动JMeter的默认的Java选项不再是必要的了,所以可以忽略它。可以从Dzone网站和InfoQ网站了解更多信息。 

JVM_ARGS环境变量可用于覆盖jmeter.bat或jmeter.sh脚本里的JVM设置。可以参考如下例子。export JVM_ARGS="-Xms1024m -Xmx1024m -Dpropname= propvalue"1)命令行选项

当以错误的选项运行JMeter时会显示使用信息。可用选项如下。./jmeter.sh - -h, --helpprint usage information and exit-v, --versionprint the version information and exit-p, --propfilethejmeter property file to use-q, --addpropadditionalJMeter property file(s)-t, --testfilethejmeter test(.jmx) file to run-l, --logfile the file to log samples to-j, --jmeterlogfilejmeter run log file (jmeter.log)-n, --nonguirun JMeter in nongui mode

以上只是其中一部分命令行选项(非完整列表),可以使用相关命令查看完整列表。本书后面会介绍其他的选项,但是也不会全部介绍。2)JMeter的环境变量

因为JMeter是100%的纯Java应用,所以它能够实现大部分测试用例。然而,有时可能需要引入非默认的第三方库中的功能或自己开发的其他功能。因此,JMeter提供了两个路径来放置第三方库,使通过环境变量可自动引入。● JMETER_HOME/lib:这里主要是一些实用的JAR文件。● JMETER_HOME/lib/ext:这里主要是JMeter的一些元件和插件。

所有定制开发的JMeter元件都应该放在lib/exe目录中,同时第三

方库(JAR文件)应该放在lib目录中。3)配置代理服务器

如果你工作的地方设置了企业级防火墙,你可能需要通过配置代理服务器地址和端口号来使用JMeter。JMeter提供了启动时的附加命令行参数来达到这个目的。部分参数如下。● -H:用于指定代理服务器主机名或IP地址。● -P:用于指定代理服务器端口。● -u:用于指定安全模式下的代理服务器用户名。● -a:用于指定安全模式下的代理服务器密码,示例如下所示。./jmeter.sh -H proxy.server –P 7567 -u username -a password

在Windows平台下,运行jmeter.bat文件。 

不要把这里提到的代理服务器和JMeter内置的HTTP代码服务器混淆,内置的HTTP代理服务器用于录制HTTP或HTTPS的浏览器会话。在下一章中录制第一个测试场景时,会介绍相关内容。

JMeter GUI如图1-3显示。图1-3 JMeter GUI4)以非GUI模式运行

如上所述,JMeter也可以以非GUI模式运行。在你希望远程运行或希望通过减少运行GUI的额外开支优化测试系统时,这是非常必要的。通常可以通过默认GUI模式准备测试脚本并在低负载条件下运行,但是高负载情况下应该以非GUI模式运行。

可以使用以下命令行选项。● -n:表示以非GUI模式运行。● -t:指定JMX测试文件的名称。● -l:指定记录结果的JTL文件的名称。● -j:指定JMeter执行的日志文件的名称。● -r:表示运行由JMeter属性remote_hosts指定的测试服务器。● -R:表示运行指定远程服务器中的测试(例如,-

Rserver1,server2)。

此外,也可以像之前看到的那样使用-H和-P选项指定代理服务主机与 端口,如下所示。./jmeter.sh -n -t test_plan_01.jmx -l log.jtl5)以服务器模式运行

通常在进行分布式测试时会使用服务器模式,这需要使用更多的测试服务器以在系统上产生更大的负载。具体命令如下。在服务器模式下在每个远程服务器(从服务器)上都会启动JMeter,在主服务器上也会启动一个GUI,用于控制所有的从节点。第4章会详细介绍这部分内容。./jmeter-server.sh 

如果你希望单个测试结束之后退出服务器,则可以指定JMeter属性server.exitaftertest=true。默认情况下这个属性设置为false。6)重写属性

JMeter提供了两种方式来重写Java、JMeter和日志属性。一种是直接编辑JMETER_HOME/bin目录下的jmeter.properties。第一眼看到这个文件,你会看到大量可重写的属性。正因为如此,JMeter才如此强大和灵活。大多数情况下,不需要重写默认属性,因为通常默认值都是非常合理的。

另一种重写属性的方式是在启动JMeter时直接通过命令行指定。

可用的选项包括以下几个。● -D=:指定Java系统属性的值。● -J=:指定本地JMeter属性。● -G=:指定发送给所有远程服务器的

JMeter属性。● -G:指定发送给所有远程服务器的包含JMeter属

性的文件。● -L=:重写日志设置,在指定优先级建立分

类,示例如下。./jmeter.sh -Duser.dir=/home/bobbyflare/jmeter_stuff \  -Jremote_hosts=127.0.0.1 -Ljmeter.engine=DEBUG 

一旦通过命令行选项对日志系统进行了设置,就无法通过-J标记更新log_level或log_file的属性了。4.在测试执行过程中追踪错误

在测试过程中,JMeter会默认将所有的错误记录在jmeter.log文件里。这个文件位于启动JMeter的文件夹下。就像大多数配置一样,这个日志文件的名字也可以通过jmeter.properties或通过命令行参数-j 配置。如图1-4所示,在运行GUI时,错误数会显示在右上方(用箭头标出),即,位于测试中运行的线程数的左边。单击错误数会直接在GUI的底部显示日志文件的内容。日志文件会清晰地显示测试运行时JMeter的详细情况,帮助你确定错误发生的原因。图1-4 JMeter GUI中显示的错误数5.配置JMeter

如果要定制JMeter的默认值,可以编辑JMETER_HOME/bin目录下的jmeter.properties,或复制一份配置文件,并将其重命名(例如,my-jmeter. properties),然后在启动JMeter的时候作为命令行选项指定它。

可配置的部分选项包括以下几个。● xml.parser:用于指定自定义的XML解析器实现方式。默认值是

org. apache.xerces. parsers.SAXParser。这个字段非必填。如果

你发现默认提供的SAX解析器不满足你的使用需求,可以通过这

个选项指定其他的解析器实现方式。例如,可以使用

javax.xml.parsers.SAXParser,将正确的JAR包添加至JMeter的环

境变量中。● remote_hosts:用于指定用逗号分隔的远程JMeter主机列表(根

据需要也可以是host:port)。当在分布式环境中运行JMeter时,

将JMeter远程服务器运行的机器列出来。然后就可以通过该机器

的GUI控制 这些服务器。这个选项只适用于分布式测试并且非必

填。第6章会深入介绍相关内容。● not_in_menu:用于指定你不希望在JMeter菜单中看到的元件列

表。虽然JMeter有如此多元件,但是你可能希望只显示你感兴趣

或经常使用的元件。可以通过这个选项列出它们的类名或类标签(在JMeter的用户界面中显示的字符串),然后这些元件就不会

显示在菜单里。默认值也是可以的,并且根据经验,没必要指定

这个选项,列在这里只是希望你知道有这个选项。这个选项也不

是必  填的。● user.properties:用于指定包含额外JMeter属性的文件的名称。

这些属性可以在初始属性文件之后但是在使用-q和-J选项之前添

加。这个选项非必填。用户属性可以用于提供额外的类路径设置,

例如,通过search_paths属性指定插件路径,通过

user_classpath属性指定JAR文件的路径。此外,这些属性文件

可用于对JMeter元件的日志级别进行精细调整。● search_paths:指定JMeter搜索插件类的路径列表(用分号分隔),例如,额外的取样器。这是对lib.ext目录下的JAR文件的补充。该选项非必填。这个选项非常方便,例如,在你需要扩展JMeter插件而又不希望安装到JMETER_HOME/lib/ext目录下的时候,可以通过这个选项指定额外的插件路径。更多信息可参考第4章。● user.classpath:除了lib目录下的JAR文件之外,还可以通过这个选项指定其他路径,JMeter将从这个路径下寻找工具类。这个选项也是非必填的。● system.properties:指定包含JMeter使用的其他系统属性的文件

名。可用在使用-S和-D选项前添加这些系统属性。这个选项非必

填。该选项通常用于精细地调整各种SSL设置、密钥存储以及认

证。● ssl.provider:如果你想使用内置的Java实现SSL的方式,通过这个选项可以指定实现方式。这个选项非必填。如果出于某些原因,默认内置的SSL的Java实现虽然十分强大,但不适用于你的测试场景,通过这个选项可以指定另外一个实现。根据经验,默认实现始终足够满足要求。

命令行选项按以下顺序处理。● -p profile:指定JMeter使用的自定义属性文件。如果属性文件存

在,会加载并运行对应属性文件。这是可选的。● jmeter.properties文件:JMeter默认的配置文件,文件内包含了各

种比较合理的默认值。在用户指定的自定义的属性文件之后加载

并运行该文件。● -j logfile:可选项,指定JMeter的日志文件。在之前的jmeter.

properties文件后加载并运行对应日志文件。

接下来,初始化日志。

接下来,加载user.properties(如果有)。

接下来,加载system.properties(如果有)。

最后,处理其他命令行选项。1.7 本章小结

本章介绍了性能测试的基础,同时也讨论了一般性能测试中涉及的关键概念和活动。此外,本章还讲述了如何安装JMeter并成功启动它,也探索了部分可用配置,并介绍了JMeter的一些选项,正是这些配置使JMeter成为一款强大的工具。JMeter的强大之处在于免费、成熟、开源、易扩展、可定制、完全扩平台,并且有一个非常强大的插件生态系统,拥有一个庞大的用户社区,具有内置的GUI,支持录制,支持不同测试场景的验证。和其他性能测试工具相比,JMeter有其独到之处。

在下一章中,我们将录制第一个测试场景并继续深入理解JMeter。第2章 录制第一个测试

JMeter内置了一个测试脚本录制器,用于录制测试计划,测试脚本录制器也称作代理服务器。一旦设置成功,测试脚本录制器将会观察你在网站上的各种操作,为它们创建测试请求样本,并最终存储在你的测试计划(即JMX文件)中。此外,有些重要测试场景的录制非常困难,所以JMeter提供了另外一种手动创建测试计划的方式。使用代理录制器录制测试脚本只需要花很少的时间,这将节约大量的时间。

为了录制第一个测试,我们将录制用户通常访问JMeter官方网站的过程。为了使代理服务器能够观察到你的动作,需要配置代理服务器。主要分为如下两步。(1)配置JMeter的HTTP(S)测试脚本录制器。(2)配置浏览器使用的代理。2.1 配置JMeter的HTTP(S)测试脚本录制器

第一步是配置JMeter的代理服务器。整个过程分为以下步骤。(1)启动JMeter。(2)右击Test Plan,选择Add→Threads(User)→Thread Group,添加一个线程组。(3)右击WorkBench,选择Add→Non-Test Elements→HTTP(S) Test Script Recorder,添加HTTP测试脚本录制器。(4)修改端口号为7000(在Global Settings下面)。(5)如果需要,也可以选择其他端口。重要的是,需要选择一个目前没被机器上的已有进程使用的端口。默认端口是8080。(6)在Test plan content部分,从Target Controller下拉框中选择选项Test Plan>Thread Group。(7)使录制的操作面向步骤(2)中创建的线程组。(8)在Test plan content部分,从Grouping下拉框中选择Put each group in a new transaction controller。(9)将一组请求组成一次页面加载。本章后面将进一步探讨该主题。(10)单击Add suggested Excludes(在URL Patterns to Exclude下)。(11)使代理服务器不录制与测试运行无关的请求的一系列元素。这包括JavaScript文件、样式表及图片。庆幸的是,JMeter提供了一个非常方便的按钮,用于排除不需要的元素。(12)单击HTTP(S) Test Script Recorder底部的Start按钮。(13)单击OK按钮,接受Root CA certificate。

经过这些设置之后,代理服务器将在端口7000启动,监控经过这个端口的所有请求,并使用默认录制控制器把这些请求录制到测试计划中。要了解更多细节,请参考图2-1。图2-1 设置JMeter HTTP(S)测试脚本录制器 

在JMeter以前的版本(2.10版之前)中,现在的HTTP(S)测试脚本录制器叫作HTTP代理服务器。

我们已经手动配置好了HTTP(S)测试脚本录制器,JMeter的较新版本 (2.10及之后的版本)为常见的任务提供了一个预先绑定的模板,这使配置容易多了。使用绑定的录制器模板,通过单击几个按钮可以就完成脚本录制器的配置。可以单击工具栏中的New File按钮右边的Templates按钮。然后从SelectTemplate下拉列表中选择Recording。修改端口为你想指定的端口(例如,7000),然后单击Create按钮。具体操作可参考图2-2。图2-2 通过模板录制器配置JMeter HTTP(S)测试脚本录制器2.2 配置浏览器使用的代理

要配置浏览器代理服务器,有几种方式可供选择。本节将介绍最常见的两种方式——使用浏览器扩展程序和修改系统配置。2.2.1 使用浏览器扩展程序

Google Chrome和FireFox有一个活跃的浏览器插件生态系统,可以通过安装插件来扩展浏览器的功能。要设置代理,可以使用FoxyProxy。这个整洁的浏览器插件可以帮助你完成各种代理设置,不会与机器上的系统设置混淆并可以自由切换各种设置。这简化了这个工作。幸运的是,FoxyProxy有Internet Explorer、Chrome和FireFox的插件。如果你正在使用,建议继续用下去。2.2.2 修改系统设置

对于一些更喜欢配置操作系统级别的代理的测试人员,本节提供了在Windows和Mac系统上配置的步骤。

在Windows系统上,按照如下步骤可完成代理设置。(1)单击Start,选择Control Panel。(2)单击Network and Internet。(3)单击Internet Options。(4)在Internet Options对话框,单击Connections标签。(5)单击Local Area Network (LAN) Settings按钮。(6)勾选Use a proxy server for your LAN(These settings will not apply to dial-up or VPN connections)复选框,启用代理服务器,如图2-3所示。(7)在Address文本框中,输入localhost作为IP地址。(8)在Port文本框中,输入7000(与之前你设置的JMeter代理的端口一致)。(9)如果你希望跳过本地IP地址的代理服务器,勾选Bypass proxy server for local addresses复选框。(10)单击OK按钮完成代理配置过程。图2-3 在Windows 7上手动配置代理

在Mac系统上,参考如下步骤配置代理,如图2-4所示。(1)打开System Preferences对话框。(2)单击Network选项。(3)单击Advanced按钮。(4)选择Proxies标签。(5)勾选Web Proxy (HTTP)复选框。(6)在Web Proxy Server文本框中输入localhost。(7)端口设置为7000(与你之前设置的JMeter代理一致)。(8)参考以上步骤配置Secure Web Proxy (HTTPS)。.(9)单击OK按钮。

试读结束[说明:试读内容隐藏了图片]

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载