JMeter负载测试入门教程

已有 6454人阅读此文 - - 经验分享

本教程是关于JMeter的。我们将会涉及到的要点如下:

  • 我们会解释JMeter是用来干什么的。

  • JMeter是如何设计和实现的以及涉及到哪些技术。

  • 如何正确的安装和配置它。

  • 它的用户界面(UI)的基本功能。

  • 详细介绍如何配置不同的测试计划。

  • 展示如何分析它的输出结果。

  • 最后我们会提到一些重要的最佳实践。

本文所提到的所有示例的配置和实现环境是: Java 8 update 0.20,Eclipse Luna 4.4, JMeter 2.11 和MySQL Community Server 5.6.21.

1. 简介

JMeter是一个应用程序,它提供了多种功能,使得可以通过不同的技术和协议来配置和执行负载、性能和压力测试。

它能够模拟各种不同类型的请求,来访问各种数据库、FTP、HTTP、HTTPS或者其它类型服务器。

让我们还是先来简要解释一下上面提到的这些概念:

  • 负载测试:这种类型的测试会测试系统或应用程序在承载它们被设计和实现时设定的最大值的极限情况如何响应。这种测试用来衡量在极端条件下系统和应用程序的表现。

  • 性能测试:这些测试用来检查系统在性能方面的表现,也就是,在特定的负载下,系统会如何响应以及它的稳定性。

  • 压力测试:这些测试会采用比系统设计之初更多的数据或资源从而超出各模块的承受值,并试图击溃、压垮系统。

JMeter最初被设计用于测试web应用程序,但是后来它的功能扩展到其它测试领域;现在它能够用来测试几乎任何类型的程序,也可以用于在你的应用中执行功能测试。

2. 涉及到的技术

JMeter是Java桌面应用程序,它的UI是使用Java Swing API实现的。基于这两点,JMeter是跨平台的,可以运行在任何安装了Java虚拟机的机器上:Windows、Linux、Mac。

其框架能够支持多个线程和线程组的并发操作执行,这在配置压力和负载测试时会非常有用。它非常易于扩展,并有大量可用的插件。

JMeter是Apache软件基金会的成员,并且是完全免费和开源的(http://www.apache.org/licenses/)。

3. 本文主要讲些什么?

本文主要针对那些对JMeter没有任何了解的开发人员和软件工程师,可以作为他们学习使用JMeter的入门教程。

本文还提供了一些示例来演示不同场景下如何配置和运行测试计划。在接下来的章节中,我们会了解到如何安装JMeter、如何配置、运行、存储和分析不同类型测试计划的结果。

4. 安装

安装和运行JMeter,请遵循以下步骤:

  • 首先,你必须安装Java环境。你需要安装JRE1.6及以上的版本。具体安装步骤,只需到Oracle下载页面安装和你系统对应的安装包即可:http://www.oracle.com/technetwork/java/javase/downloads/index.html.

  • 设置环境变量JAVA_HOME指向你的Java安装目录的根目录。Windows下设置如:

  • JAVA_HOME=C:Program FilesJavajdk1.8.0_20


添加Java的编译路径到系统路径(System Path). Windows下的设置,

添加如下:或者你安装的任何Java版本。

  • C:Program FilesJavajdk1.7.0_25bin

到系统环境变量Path的最后。

  • 检查确认Java已经安装正确,可以在命令行输入命令:

  • java -version

  • 应该可以看到类似如下输出:

  • java version "1.8.0_20"
    Java(TM) SE Runtime Environment (build 1.8.0_20-b26)
    Java HotSpot(TM) 64-Bit Server VM (build 25.20-b23, mixed mode)
  • 最新版本JMeter下载地址:http://jmeter.apache.org/download_jmeter.cgi

  • 解压JMeter到目录 C:>JMeter for example (Windows下路径).

  • JMeter的目录结构大致如下所示:

  • apache-jmeter-2.9
    
    apache-jmeter-2.9bin
    
    apache-jmeter-2.9docs
    
    apache-jmeter-2.9extras
    
    apache-jmeter-2.9lib
    
    apache-jmeter-2.9libext
    
    apache-jmeter-2.9libjunit
    
    apache-jmeter-2.9printable_docs


  • 启动JMeter,以Windows为例,进入目录 C:jmeterapache-jmeter-2.11bin 运行 jmeter.bat.

  • 你应该会看到类似下图的JMeter GUI的启动界面:

main screen

5. GUI 概述

JMeter GUI非常的直观、易于使用;常见的文件操作菜单如新建、打开、保存、另存为等,一些特定的菜单如启动/停止测试计划和进入配置项。每个测试计划、线程组和测试计划节点(后面的章节会详细讲解)在单击右键时都会显示不同的上下文菜单选项。

JMeter也提供了很多的本地化语言,可以很方便的更改UI的显示语言。

正如我们前面提到过的,GUI非常直观、易于使用,为每一个菜单和按钮提供了通俗易懂的提示信息。JMeter如此的广泛使用,除了它本身的高质量之外,这种易用性也是很重要的一个原因,理解并学习其使用方法确实是非常的简单。

6. 可用的请求类型

JMeter可以支持几乎任何类型系统的测试,但是一般而言,以下几种协议是开箱支持的:

  • Functional test using JUnit and Java applications.

  • Web:HTTP, HTTPS网站 ‘web 1.0′ web 2.0 (ajax, flex 和flex-ws-amf:我们在后面的章节会介绍如何测试一个潜在的网页以及它的响应。

  • Web Services: SOAP / XML-RPC.

  • 通过JDBC驱动程序驱动的数据库测试。JMeter支持几乎所有的数据库类型,你只需要准备一个合适的驱动程序、将它放在JMeter安装目录的相应目录下。本文接下来的示例中我们使用MySQL。

  • 目录服务: LDAP.

  • 通过JMS测试面向消息的服务

  • 基于POP3, IMAP, SMTP的邮件服务.

  • FTP 服务.

  • 基于JUnit和Java应用的功能测试。

7. 测试计划和组件

基本来说,JMeter的使用分为以下几部分:创建、配置和执行测试计划,分析其结果。测试计划是一组基于远程服务器(或客户端)、遵循特定指令执行的请求集合。

在一个测试计划的配置中,你可以指定输入参数、输出参数,也可以指定用来判定这个测试计划是否执行成功必须满足的基本条件。

JMeter的测试计划由多个不同组件组成。下面列出一些其中最重要的组件,并附有它们在JMeter UI的配置方法和主要用途:

7.1 线程组

线程组基本来说是一组不同的测试计划元素的组合。它的‘根’是测试计划,而它是用来控制基本的全局参数设置的。

创建一个测试计划,你需要首先创建一个线程组,然后设置它的线程数、准备时长(ramp-up period)、循环次数和失败时的响应:

  • 线程数(Number of threads):执行测试计划时需要使用的线程数量,这个参数在压力测试和负载测试中非常重要。

  • 准备时长(Ramp-up period):JMeter用来启动所有线程的耗时。

  • 循环次数(Loop count):迭代次数,即该测试需要被执行的总次数。

  • 失败时的响应(Error behavior):出错的情况下如何响应:停止当前线程,停止整个测试,继续……

线程组也有开始和结束时间的设置项。选中“调度器”的复选框,会出现一个包含调度器参数的面板,在其中可以设置开始和结束时间。

这些设置完成后,你可以开始在线程组中加入一些其它测试计划元素,如取样器、监听器和定时器。我们会在接下来的章节解释这些概念。

7.2 取样器

取样器用来发送请求到不同类型的服务器。它们是测试计划的基本元素,所有的其它工作都围绕它们展开:执行请求(基于已保存的设置),这些请求会产生一个或多个响应结果以供后面的组件分析。

JMeter中可用取样器的列表如下(本教程中会提到其中部分内容):

  • 访问日志取样器

  • AJP取样器

  • Bean shell取样器

  • BSF取样器

  • 调试取样器

  • FTP取样器

  • HTTP取样器

  • Java取样器

  • JDBC取样器

  • JMS取样器

  • JSR223取样器

  • JUnit取样器

  • LDAP取样器

  • 邮件阅读器取样器

  • MongoDB取样器

  • OS进程取样器

  • SMTP取样器

  • SOAP

  • TCP取样器

  • 测试操作

从上面的列表我们可以看到,有很多不同类型的取样器;这个列表是不完整的,因为还存在很多由不同JMeter插件实现的取样器。每个取样器的配置项取决于它执行的请求,这就意味着,有些取样器具有某些共性的设置,而另一些则因为其请求的性质而具有完全不同的设置。

7.3 逻辑控制器

逻辑控制器用于在线程组内控制不同取样器的执行顺序。JMeter中所有可用的逻辑控制器如下:

  • 简单控制器

  • 循环控制器

  • 单次执行控制器

  • 交替控制器

  • 随机控制器

  • 随机顺序控制器

  • 吞吐量控制器

  • 运行时控制器

  • If控制器

  • While控制器

  • Switch控制器

  • ForEach控制器

  • 模块控制器

  • 包含(Include)控制器

  • 事务控制器

  • 录制控制器

7.4 监听器

监听器提供了多种方法来查看取样器中的请求所产生的结果。监听器可以转换结果并输出为表格、结果树或纯文本日志文件。

可以在测试计划的任意位置添加监听器,但是它们只能从取样器中收集和它们本身对应或以下级别的数据并解析。

JMeter中可用监听器如下:

  • 取样结果保存配置

  • 整体图形结果

  • 图形结果

  • 花键可视化(Spline Visualizer)

  • 断言结果

  • 查看结果树

  • 聚合报告

  • 用表格查看结果

  • 简单数据写入器

  • 监视器结果

  • 分布图(阿尔法)

  • 聚合图形

  • 邮件观察仪

  • BeanShell监听器

  • 概要报告

7.5 定时器

定时器用来定义请求之间的延迟间隔。如果不指定的话,JMeter会在当前请求执行完毕后,立即执行下一个请求,而没有任何等待时间。

JMeter中的可用定时器:

  • 固定定时器

  • 高斯随机定时器

  • 统一随机定时器

  • 固定吞吐量定时器

  • 同步定时器

  • JSR223定时器

  • BeanShell定时器

  • BSF定时器

  • 泊松(Poisson)随机定时器

7.6 断言

断言用来判断取样器请求响应的结果是否如用户所期望,是否正确。基本上,断言类似于单元测试中的断言,用来校验被测试应用的响应结果。你可以为每个测试计划单独设定哪种断言起作用。

JMeter中的可用断言如下:

  • Bean Shell 断言

  • BSF 断言

  • 比较断言

  • JSR223断言

  • 响应结果断言

  • 持续时间断言

  • 大小(size)断言

  • XML断言

  • MD5Hex Assertion

  • HTML断言

  • XPath断言

  • XML模式断言

7.7 配置元件

你可以使用配置元素向取样器请求传递不同的参数。使用配置元件,可以定义变量(动态改变的),后面的取样器都可以使用它们。它们的执行开始时间是在所属节点的最开始,早于取样器执行,所以取样器可以正确的使用这些变量。

JMeter中可用配置元件如下:

  • 计数器

  • CSV数据集配置

  • FTP请求缺省值

  • HTTP授权管理器

  • HTTP缓存管理器

  • HTTP Cookie管理器

  • HTTP代理管理器

  • HTTP请求缺省值

  • HTTP信息头管理器

  • Java请求缺省值

  • Keystore配置库

  • JDBC连接配置

  • 登录配置元件/素

  • LDAP请求缺省值

  • LDAP扩展请求缺省值

  • TCP取样器配置

  • 用户自定义变量

  • 简单配置元件

  • 随机变量

7.8 前置处理器

前置处理器是先于取样器执行的一些元素(或者说动作、断言或其它任何基本的东西)。它们可以从响应中提取变量,以供后面执行的取样器使用。

前置处理器中可以使用的元素如下:

  • HTML链接解析器

  • HTTP URL 重写修饰符

  • HTTP用户参数修饰符

  • 用户参数

  • JDBC前置处理器

  • JSR223 前置处理器

  • RegEx用户参数

  • BeanShell 前置处理器

  • BSF 前置处理器

7.9 后置处理器

后置处理器是取样器执行完毕后执行的一些元素。它可以用来处理响应数据并提取结果值以供后面的其它组件使用。

后置处理器中的可用元素:

  • 正则表达式提取器

  • XPath 提取器

  • 结果状态操作句柄

  • JSR223 后置处理器

  • JDBC 后置处理器

  • BSF 后置处理器

  • CSS/JQuery 提取器

  • BeanShell 后置处理器

  • Debug 后置处理器

8. 测试计划元素的执行顺序

测试计划中的元素是有序的,并且总是按下列方式执行:

1 –  配置元件
2 – 前置处理器
3 – 定时器
4 – 取样器
5 – 后置处理器(只在有有效结果时执行)
6 – 断言(只在有有效结果时执行)
7 – 监听器(只在有有效结果时执行)

这里要说一个比较好的实践,就是一个测试计划可以包含一个或多个测试计划,另一种常见做法是按照功能或技术上的逻辑关系进行分组。

9. 启动/停止测试计划

启动测试计划,只需点击 “运行” 按钮:

start

如果要启动测试,同时跳过所有的中断,可以点击按钮 "无中断运行"

start no pauses点击"停止" 按钮来停止测试:

stop

也可以设置禁止某些测试计划运行,只需要在对应的测试计划上右键选择“Disable”:

enable disable test plan

如上图所见,被禁止执行的测试计划显示为灰色而且不能执行,但是可以修改和重新配置。



以上介绍了jmeter的基本情况,接下来会针对 web测试计划,数据库测试计划,junit测试计划以及录制测试进行分别介绍。


期待你一针见血的评论,Come on!