jMeter - 快速指南
jMeter - 概述
在详细介绍 JMeter 之前,让我们首先了解一些与应用程序测试相关的术语。
性能测试- 此测试在给定的基础设施配置下设置了最佳的性能预期。它还在测试过程的早期强调在应用程序投入生产之前是否需要进行任何更改。
负载测试- 该测试基本上用于在设计运行的最高负载下测试系统。
压力测试- 此测试试图通过压倒系统资源来破坏系统。
什么是JMeter?
JMeter是一款可以对不同协议或技术进行负载测试、面向性能的业务(功能)测试、回归测试等的软件。
Apache 软件基金会的Stefano Mazzocchi是 JMeter 的原始开发人员。他编写它主要是为了测试 Apache JServ(现在称为 Apache Tomcat 项目)的性能。Apache 后来重新设计了 JMeter 以增强 GUI 并添加功能测试功能。
JMeter 是一个具有图形界面的 Java 桌面应用程序,使用 Swing 图形 API。因此,它可以在任何接受 Java 虚拟机的环境/工作站上运行,例如 Windows、Linux、Mac 等。
JMeter 支持的协议是 -
Web - HTTP、HTTPS 站点“web 1.0”web 2.0(ajax、flex 和 flex-ws-amf)
Web 服务 - SOAP / XML-RPC
通过 JDBC 驱动程序的数据库
目录 - LDAP
通过 JMS 的面向消息传递的服务
服务 - POP3、IMAP、SMTP
FTP服务
JMeter 功能
以下是 JMeter 的一些功能 -
作为一个开源软件,它可以免费使用。
它有一个简单直观的 GUI。
JMeter 可以对许多不同的服务器类型进行负载和性能测试 - Web - HTTP、HTTPS、SOAP、通过 JDBC 的数据库、LDAP、JMS、邮件 - POP3 等。
它是一个独立于平台的工具。在 Linux/Unix 上,可以通过单击 JMeter shell 脚本来调用 JMeter。在 Windows 上,可以通过启动 jmeter.bat 文件来调用它。
它具有完整的 Swing 和轻量级组件支持(预编译的 JAR 使用包 javax.swing.* )。
JMeter 以 XML 格式存储其测试计划。这意味着您可以使用文本编辑器生成测试计划。
其完整的多线程框架允许多个线程并发采样,并允许单独的线程组同时采样不同的功能。
它具有高度可扩展性。
它还可用于执行应用程序的自动化和功能测试。
JMeter 是如何工作的?
JMeter 模拟一组用户向目标服务器发送请求,并返回统计信息,通过表格、图表等显示目标服务器/应用程序的性能/功能。
看一下下图,它描述了 JMeter 的工作原理 -
jMeter - 环境
JMeter 是一个 Java 框架,因此第一个要求是在您的计算机上安装 JDK。
系统要求
JDK | 1.6或以上。 |
---|---|
记忆 | 没有最低要求。 |
磁盘空间 | 没有最低要求。 |
操作系统 | 没有最低要求。 |
第 1 步:验证 Java 安装
首先,验证您的系统中是否安装了Java。打开控制台并根据您正在使用的操作系统执行以下java命令之一。
操作系统 | 任务 | 命令 |
---|---|---|
Windows | 打开命令控制台 | c:\> java -版本 |
Linux | 打开命令终端 | $ java -版本 |
苹果 | 打开终端 | 机器:〜约瑟夫$ java -版本 |
如果您的系统中安装了 Java,您将根据您正在使用的操作系统获得适当的输出。
操作系统 | 输出 |
---|---|
Windows |
java版本“1.7.0_25” Java(TM) SE 运行时环境(版本 1.7.0_25-b15) Java HotSpot(TM) 64 位服务器 VM(内部版本 23.25-b01,混合模式) |
Linux |
java版本“1.7.0_25” Java(TM) SE 运行时环境(版本 1.7.0_25-b15) Java HotSpot(TM) 64 位服务器 VM(内部版本 23.25-b01,混合模式) |
苹果 |
java版本“1.7.0_25” Java(TM) SE 运行时环境(版本 1.7.0_25-b15) Java HotSpot(TM) 64 位服务器 VM(内部版本 23.25-b01,混合模式) |
如果您尚未安装 Java,请从www.oracle.com/technetwork/java/javase/downloads/index.html安装 Java 软件开发工具包 (SDK) 。我们假设 Java 1.7.0_25 作为本教程的安装版本。
第二步:设置Java环境
将JAVA_HOME环境变量设置为指向计算机上安装 Java 的基本目录位置。例如 -
操作系统 | 输出 |
---|---|
Windows | 设置环境变量JAVA_HOME为C:\Program Files\Java\jdk1.7.0_25 |
Linux | 导出 JAVA_HOME=/usr/local/java-current |
苹果 | 导出 JAVA_HOME=/Library/Java/Home |
将 Java 编译器位置附加到系统路径。
操作系统 | 输出 |
---|---|
Windows | 追加字符串;C:\Program Files\Java\jdk1.7.0_25\bin 到系统变量 Path 的末尾。 |
Linux | 导出路径=$PATH:$JAVA_HOME/bin/ |
苹果 | 不需要 |
如上所述,使用java -version命令验证 Java 安装。
第三步:下载JMeter
从https://jmeter.apache.org/download_jmeter.cgi下载最新版本的 JMeter 。在本教程中,我们下载了apache-jmeter-2.9并将其复制到 C:\>JMeter 文件夹中。
目录结构应如下所示 -
- 阿帕奇-jmeter-2.9
- 阿帕奇-jmeter-2.9\bin
- apache-jmeter-2.9\docs
- apache-jmeter-2.9\extras
- 阿帕奇-jmeter-2.9\lib\
- apache-jmeter-2.9\lib\ext
- apache-jmeter-2.9\lib\junit
- apache-jmeter-2.9\printable_docs
如果需要,您可以重命名父目录(即 apache-jmeter-2.9),但不要更改任何子目录名称。
第 4 步:运行 JMeter
下载JMeter后,进入bin目录。在本例中,它是/home/manisha/apache-jmeter-2.9/bin。现在单击以下内容 -
操作系统 | 输出 |
---|---|
Windows | jmeter.bat |
Linux | jmeter.sh |
苹果 | jmeter.sh |
短暂暂停后,应该会出现 JMeter GUI,这是一个 Swing 应用程序,如下面的屏幕截图所示 -
这是该工具的主页和默认页面。
jMeter - 构建测试计划
什么是测试计划?
测试计划可以被视为运行测试的容器。它定义了要测试的内容以及如何进行测试。完整的测试计划由一个或多个元素组成,例如线程组、逻辑控制器、样本生成控制器、侦听器、计时器、断言和配置元素。一个测试计划必须至少有一个线程组。
编写测试计划
按照下面给出的步骤编写测试计划 -
第 1 步:启动 JMeter 窗口
单击/home/manisha/apache-jmeter-2.9/bin/jmeter.sh打开 JMeter 窗口。JMeter 窗口将显示如下 -
这是一个普通的空白 JMeter 窗口,没有添加任何其他元素。它包含两个节点 -
测试计划节点- 是保存真实测试计划的地方。
工作台节点- 它只是提供一个在不使用时临时存储测试元素的位置,用于复制/粘贴目的。当您保存测试计划时,工作台项目不会随之保存。
第 2 步:添加/删除元素
通过右键单击测试计划节点并从“添加”列表中选择新元素,可以将元素(将在下一章测试计划元素中讨论)添加到测试计划中。
或者,您可以从文件加载元素并通过选择“合并”或“打开”选项添加它。
例如,让我们将线程组元素添加到测试计划中,如下所示 -
要删除元素,请确保选择该元素,右键单击该元素,然后选择“删除”选项。
第 3 步:加载并保存元素
从文件加载元素 -
- 右键单击要添加加载元素的现有树元素。
- 选择合并。
- 选择保存元素的文件。
- JMeter 会将元素合并到树中。
默认情况下,JMeter 不保存元素,您需要显式保存它。
保存树元素 -
- 右键单击该元素。
- 选择将选择另存为...选项。
JMeter 将保存所选元素及其下面的所有子元素。默认情况下,JMeter 不保存元素,您需要如前所述显式保存它。
步骤 4:配置树元素
测试计划中的任何元素都可以使用 JMeter 右侧框架中的控件进行配置。这些控件允许您配置特定测试元素的Behave。例如,线程组可以配置为多个用户、启动周期等,如下所示 -
第 5 步:保存测试计划
您可以使用“文件”菜单中的“保存”或“将测试计划另存为...”来保存整个测试计划。
第 6 步:运行测试计划
您可以通过单击“运行”菜单项中的“开始” (Control + r) 来运行测试计划。当 JMeter 开始运行时,它会在菜单栏下方部分的右端显示一个小绿色框。
绿色框左侧的数字是活动线程数/线程总数。这些仅适用于本地运行的测试;它们不包括使用客户端-服务器模式时在远程系统上启动的任何线程。
第 7 步:停止测试计划
您可以通过两种方式停止测试 -
使用停止(Control + '.')。如果可能的话,它会立即停止线程。
使用关机(Control + ',')。它请求线程在任何当前工作结束时停止。
jMeter - 测试计划元素
JMeter 测试计划由下面讨论的测试元素组成。测试计划至少包含一个线程组。在每个线程组中,我们可以放置一个或多个其他元素的组合 - 采样器、逻辑控制器、配置元素、侦听器和计时器。每个采样器前面可以有一个或多个预处理器元素,后面可以有后处理器元素和/或断言元素。让我们详细看看这些元素 -
线程组
线程组元素是测试计划的起点。顾名思义,线程组元素控制 JMeter 在测试期间将使用的线程数。我们还可以通过线程组控制以下内容 -
设置线程数
设置斜坡上升时间
设置测试迭代次数
线程组控制面板如下所示 -
线程组面板包含以下组件 -
采样器错误后要采取的操作- 如果测试执行期间发生任何错误,您可以让测试 -
继续测试中的下一个元素
Stop Thread停止当前线程。
完全停止测试,以防您想在继续运行之前检查错误。
线程数- 模拟服务器应用程序的用户或连接数。
Ramp-Up period定义 JMeter 使所有线程运行所需的时间。
循环计数- 定义执行测试的次数。
调度程序复选框- 一旦选择,调度程序配置部分将出现在控制面板的底部。
调度程序配置- 您可以配置运行测试的开始和结束时间。
控制器
JMeter 有两种类型的控制器 -采样器和逻辑控制器。
采样器
采样器允许 JMeter 向服务器发送特定类型的请求。它们模拟用户对来自目标服务器的页面的请求。例如,如果您需要对 HTTP 服务执行 POST、GET 或 DELETE,则可以添加 HTTP 请求采样器。
一些有用的采样器是 -
- HTTP请求
- FTP 请求
- JDBC 请求
- Java请求
- SOAP/XML 请求
- RPC 请求
以下屏幕截图显示了 HTTP 请求采样器控制面板 -
逻辑控制器
逻辑控制器可让您控制线程中采样器的处理顺序。逻辑控制器可以更改来自其任何子元素的请求的顺序。一些示例是:ForEach 控制器、While 控制器、循环控制器、IF 控制器、运行时控制器、交错控制器、吞吐量控制器和运行一次控制器。
以下屏幕截图显示了循环控制器控制面板 -
以下列表包含 JMeter 提供的所有逻辑控制器 -
- 简单控制器
- 循环控制器
- 一次唯一的控制器
- 交错控制器
- 随机控制器
- 随机顺序控制器
- 吞吐量控制器
- 运行时控制器
- 如果控制器
- 同时控制器
- 开关控制器
- 对于每个控制器
- 模块控制器
- 包括控制器
- 交易控制器
- 录音控制器
测试片段
测试片段是一种特殊类型的元素,与线程组元素放置在同一级别。它与线程组的区别在于,除非被模块控制器或 Include_Controller 引用,否则它不会被执行。该元素纯粹用于测试计划中的代码重用。
听众
侦听器允许您以表格、图形、树或某些日志文件中的简单文本的形式查看采样器的结果。当执行 JMeter 的 Sampler 组件时,它们提供对 JMeter 收集的有关测试用例的数据的可视化访问。
侦听器可以添加到测试中的任何位置,包括直接添加到测试计划下。他们只会从等于或低于其级别的元素收集数据。以下列表包含 JMeter 提供的所有监听器 -
- 结果保存配置示例
- 完整结果图
- 图表结果
- 样条可视化工具
- 断言结果
- 查看结果树
- 综合报告
- 查看表中的结果
- 简单的数据写入器
- 监控结果
- 分布图(阿尔法)
- 聚合图
- 梅勒展示台
- BeanShell 监听器
- 总结报告
定时器
默认情况下,JMeter 线程发送请求,而不会在每个采样器之间暂停。这可能不是您想要的。您可以添加一个计时器元素,它允许您定义每个请求之间等待的时间段。
以下列表显示了 JMeter 提供的所有计时器 -
- 恒定定时器
- 高斯随机定时器
- 统一随机定时器
- 恒定吞吐量定时器
- 同步定时器
- JSR223时间
- 豆壳时间
- BSF时间
- 泊松随机时间
以下屏幕截图显示了恒定定时器控制面板 -
断言
断言允许您对使用采样器发出的请求的响应进行一些验证测试。使用断言,您可以证明您的应用程序返回了正确的数据。JMeter 会在断言失败时突出显示。
以下列表包含 JMeter 提供的所有断言 -
- 豆壳断言
- BSF断言
- 比较断言
- JSR223 断言
- 响应断言
- 持续时间断言
- 尺寸断言
- XML断言
- BeanShell 断言
- MD5Hex 断言
- HTML 断言
- XPath 断言
- XML 模式断言
以下屏幕截图显示了响应断言控制面板 -
配置元素
配置元素允许您创建供采样器使用的默认值和变量。它们用于添加或修改采样器发出的请求。
它们在它们所属范围的开始处执行,位于同一范围内的任何采样器之前。因此,只能从配置元素所在的分支内部访问配置元素。
以下列表包含 JMeter 提供的所有配置元素 -
- 柜台
- CSV 数据集配置
- FTP 请求默认值
- HTTP 授权管理器
- HTTP 缓存管理器
- HTTP Cookie 管理器
- HTTP代理服务器
- HTTP 请求默认值
- HTTP 标头管理器
- Java 请求默认值
- 密钥库配置
- JDBC 连接配置
- 登录配置元素
- LDAP 请求默认值
- LDAP 扩展请求默认值
- TCP 采样器配置
- 用户定义变量
- 简单的配置元素
- 随机变量
预处理器元素
预处理器元素是在采样器执行之前运行的元素。它们通常用于在示例请求运行之前修改其设置,或更新未从响应文本中提取的变量。
以下列表包含 JMeter 提供的所有预处理器元素 -
- HTML 链接解析器
- HTTP URL 重写修饰符
- HTTP用户参数修饰符
- 用户参数
- JDBC预处理器
- JSR223预处理器
- 正则表达式用户参数
- BeanShell 预处理器
- BSF 预处理器
后处理器元件
后处理器在采样器完成执行后执行。此元素最常用于处理响应数据,例如检索特定值以供以后使用。
以下列表包含 JMeter 提供的所有后处理器元素 -
- 正则表达式提取器
- XPath 提取器
- 结果状态操作处理程序
- JSR223后处理器
- JDBC后处理器
- BSF 后处理器
- CSS/JQuery 提取器
- BeanShell 后处理器
- 调试后处理器
测试元素的执行顺序
以下是测试计划元素的执行顺序 -
- 配置元素
- 预处理器
- 定时器
- 采样器
- 后处理器(除非 SampleResult 为 null)
- 断言(除非 SampleResult 为 null)
- 侦听器(除非 SampleResult 为 null)
jMeter - 网络测试计划
让我们构建一个简单的测试计划来测试网页。我们在 Apache JMeter 中编写了一个测试计划,以便我们可以测试 URL - www.tutorialspoint.com显示的网页的性能。
启动JMeter
单击/home/manisha/apache-jmeter-2.9/bin/jmeter.sh打开 JMeter 窗口。JMeter 窗口如下所示 -
重命名测试计划
在名称文本框中将测试计划节点的名称更改为Sample Test。您需要将焦点更改为工作台节点,然后返回到测试计划节点以查看所反映的名称。
添加线程组
现在我们在窗口中添加第一个元素。我们添加一个线程组,它是所有其他元素(如采样器、控制器和侦听器)的占位符。我们需要一个这样我们就可以配置要模拟的用户数量。
在 JMeter 中,所有节点元素都是使用上下文菜单添加的。
右键单击要添加子元素节点的元素。
选择适当的选项进行添加。
右键单击示例测试(我们的测试计划)→ 添加→ 线程(用户)→ 线程组。因此,线程组被添加到测试计划(示例测试)节点下。
将线程组命名为Users。对于我们来说,此元素意味着用户访问TutorialsPoint 主页。
添加采样器
我们需要在线程组(用户)中添加一个采样器。与之前添加线程组的操作一样,这次我们将右键单击“线程组(用户)”节点的上下文菜单,然后选择“添加”→“采样器”→“HTTP 请求”选项来添加 HTTP 请求采样器。
它将在线程组(用户)节点下添加一个空的 HTTP 请求采样器。让我们配置这个节点元素 -
名称- 我们将更改名称以反映我们想要实现的操作。我们将其命名为Visit TutorialsPoint Home Page
服务器名称或 IP - 在这里,我们必须输入 Web 服务器名称。在我们的例子中是www.tutorialspoint.com。(http://部分没有写这只是服务器的名称或其IP)
协议- 我们将保留此空白,这意味着我们希望 HTTP 作为协议。
路径- 我们将路径输入为 /(斜杠)。这意味着我们想要服务器的根页面。
添加监听器
我们现在将添加一个侦听器。让我们在线程组(用户)节点下添加查看结果树侦听器。它将确保采样器的结果可在此侦听器节点元素中查看。
添加监听器 -
打开上下文菜单
右键单击线程组(用户)
选择“添加”→“侦听器”→“查看结果树”选项
运行测试计划
现在完成所有设置,让我们执行测试计划。对于线程组(用户)的配置,我们保留所有默认值。这意味着 JMeter 将只执行一次采样器。它类似于单个用户,只能使用一次。
这类似于用户使用 JMeter 采样器通过浏览器访问网页。要执行测试计划,请从菜单中选择“运行”,然后选择“启动”选项。
Apache JMeter 要求我们在实际开始测试之前将测试计划保存在磁盘文件中。如果您想多次运行测试计划,这一点很重要。您也可以选择运行它而不保存。
查看输出
我们将线程组的设置保留为单线程(仅限一个用户)并循环 1 次(仅运行一次),因此我们将在查看结果树监听器中获得单个事务的结果。
上述结果的详细信息是 -
名称“Visit TutorialsPoint Home Page”的绿色表示成功。
JMeter 已经存储了 Web 服务器发送的所有标头和响应,并准备好以多种方式向我们显示结果。
第一个选项卡是采样器结果。它显示 JMeter 数据以及 Web 服务器返回的数据。
第二个选项卡是“请求”,它显示作为请求的一部分发送到 Web 服务器的所有数据。
最后一个选项卡是响应数据。在此选项卡中,侦听器以文本格式显示从服务器接收的数据。
这只是一个简单的测试计划,仅执行一个请求。但 JMeter 的真正优势在于发送相同的请求,就好像许多用户正在发送它一样。要测试具有多个用户的 Web 服务器,我们需要更改线程组(用户)设置。
jMeter - 数据库测试计划
在本章中,我们将了解如何创建一个简单的测试计划来测试数据库服务器。出于测试目的,我们使用 MYSQL 数据库服务器。您可以使用任何其他数据库进行测试。MYSQL的安装和建表请参考MYSQL教程。
安装 MYSQL 后,请按照以下步骤设置数据库 -
创建一个名为“tutorial”的数据库。
创建表tutorials_tbl。
将记录插入到tutorials_tbl中,如下所示 -
mysql> use TUTORIALS; Database changed mysql> INSERT INTO tutorials_tbl ->(tutorial_title, tutorial_author, submission_date) ->VALUES ->("Learn PHP", "John Poul", NOW()); Query OK, 1 row affected (0.01 sec) mysql> INSERT INTO tutorials_tbl ->(tutorial_title, tutorial_author, submission_date) ->VALUES ->("Learn MySQL", "Abdul S", NOW()); Query OK, 1 row affected (0.01 sec) mysql> INSERT INTO tutorials_tbl ->(tutorial_title, tutorial_author, submission_date) ->VALUES ->("JAVA Tutorial", "Sanjay", '2007-05-06'); Query OK, 1 row affected (0.01 sec) mysql>
将适当的 JDBC 驱动程序复制到/home/manisha/apache-jmeter-2.9/lib。
创建 JMeter 测试计划
让我们从/home/manisha/apache-jmeter-2.9/bin/jmeter.sh启动 JMeter 。
添加用户
要创建线程组,
右键单击测试计划。
选择添加 → 线程(用户)→ 线程组。
因此,线程组被添加到“测试计划”节点下。
将此线程组重命名为JDBC Users。
我们不会更改线程组的默认属性。
添加 JDBC 请求
现在我们已经定义了用户,是时候定义他们将要执行的任务了。在此部分中,指定要执行的 JDBC 请求。
右键单击 JDBC 用户元素。
选择添加 → 配置元素 → JDBC 连接配置。
设置以下字段(我们使用称为教程的 MySQL 数据库) -
绑定到池的变量名称。这需要唯一地标识配置。JDBC Sampler 使用它来识别要使用的配置。我们将其命名为test。
数据库 URL - jdbc:mysql://localhost:3306/tutorial。
JDBC驱动程序类:com.mysql.jdbc.Driver。
用户名:根。
密码:root 的密码。
屏幕上的其他字段保留为默认值,如下所示 -
现在添加一个引用上面定义的 JDBC 配置池的 JDBC 请求。选择 JDBC 用户元素。
单击鼠标右键以获取“添加”菜单
选择添加 → 采样器 → JDBC 请求。
选择这个新元素以查看其控制面板。
编辑属性,如下所示 -
绑定到池的变量名称。这需要唯一标识配置。JDBC Sampler 使用它来识别要使用的配置。将其命名为test。
名称 - 学习。
输入池名称 - test(与配置元素中的相同)。
查询类型 - 选择语句。
输入 SQL 查询字符串字段。
创建监听器
现在添加监听器元素。该元素负责将 JDBC 请求的所有结果存储在文件中并呈现数据的可视化模型。
选择 JDBC 用户元素
添加查看结果树侦听器(添加 → 侦听器 → 查看结果树)。
保存并执行测试计划
现在将上述测试计划保存为db_test.jmx。使用“运行”→“开始”选项执行此测试计划。
验证输出
在最后一张图中,您可以看到选择了两条记录。
jMeter - FTP 测试计划
在本章中,我们将了解如何使用 JMeter 测试 FTP 站点。让我们创建一个测试计划来测试 FTP 站点。
重命名测试计划
单击 /home/manisha/apache-jmeter-2.9/bin/jmeter.sh 打开 JMeter 窗口
单击“测试计划”节点。
将此测试计划节点重命名为 TestFTPSite。
添加线程组
添加一个线程组,它是所有其他元素(如采样器、控制器和侦听器)的占位符。
右键单击 TestFTPSite(我们的测试计划)
选择添加 → 线程(用户)→ 线程组。线程组将添加到测试计划 (TestFTPSite) 节点下。
修改线程组的默认属性以适应我们的测试,如下所示 -
名称- FTP 用户
线程数(用户) - 4
加速周期- 保留默认值 0 秒。
循环计数- 1
添加采样器 - FTP 请求
现在我们已经定义了用户,是时候定义他们将要执行的任务了。添加 FTP 请求元素。我们添加两个 FTP 请求元素,一个用于检索文件,另一个用于将文件放在 ftp 站点上。
选择 FTP 用户元素。
右键单击鼠标按钮以获取“添加”菜单
选择添加 → 采样器 → FTP 请求。
在树中选择 FTP 请求元素。
编辑以下属性,如下所示 -
在此元素中输入以下详细信息 -
名称- FTP 请求获取
服务器名称或 IP - 184.168.74.29
远程文件- /home/manisha/sample_ftp.txt
本地文件-sample_ftp.txt
选择获取(RETR)
用户名- manisha
密码- manisha123
现在添加另一个 FTP 请求,如上所示,并编辑属性,如以下屏幕截图所示 -
在此元素中输入以下详细信息 -
名称- FTP 请求放置
服务器名称或 IP - 184.168.74.29
远程文件- /home/manisha/examplefile.txt
本地文件- /home/manisha/work/examplefile.txt
选择放置(STOR)
用户名- manisha
密码- manisha123
添加监听器
您需要添加到测试计划中的最后一个元素是侦听器。该元素负责将 FTP 请求的所有结果存储在文件中并呈现数据的可视化模型。
选择 FTP 用户元素。
通过选择“添加”>“侦听器”>“查看结果树”来添加“查看结果树”侦听器。
运行测试计划
现在将上述测试计划保存为ftpsite_test.jmx。使用“运行”→“开始”选项执行此测试计划。
查看输出
在监听器中可以看到以下输出。
可以看到每个FTP请求发出了4次请求,测试成功。GET 请求检索到的文件存储在 /bin 文件夹中。在我们的例子中,它是/home/manisha/apache-jmeter-2.9/bin/。对于 PUT 请求,文件上传到路径/home/manisha/。
jMeter - Web服务测试计划
在本章中,我们将学习如何创建测试计划来测试 Web 服务。出于测试目的,我们创建了一个简单的 Web 服务项目并将其部署在本地 Tomcat 服务器上。
创建网络服务项目
为了创建 Web 服务项目,我们使用了 Eclipse IDE。首先在com.tutorialspoint.ws包下编写服务端点接口HelloWorld。HelloWorld.java 的内容如下 -
package com.tutorialspoint.ws; import javax.jws.WebMethod; import javax.jws.WebService; import javax.jws.soap.SOAPBinding; import javax.jws.soap.SOAPBinding.Style; //Service Endpoint Interface @WebService @SOAPBinding(style = Style.RPC) public interface HelloWorld { @WebMethod String getHelloWorldMessage(String string); }
该服务有一个getHelloWorldMessage方法,它接受一个 String 参数。
接下来,在com.tutorialspoint.ws包下创建实现类HelloWorldImpl.java。
package com.tutorialspoint.ws; import javax.jws.WebService; @WebService(endpointInterface="com.tutorialspoint.ws.HelloWorld") public class HelloWorldImpl implements HelloWorld { @Override public String getHelloWorldMessage(String myName) { return("Hello "+myName+" to JAX WS world"); } }
现在让我们通过创建 Endpoint 发布者在本地发布此 Web 服务并在服务器上公开该服务。
发布方法有两个参数 -
端点 URL 字符串。
实现者对象,在本例中是 HelloWorld 实现类,它在由上面参数中提到的 URL 标识的端点处公开为 Web 服务。
HelloWorldPublisher.java 的内容如下 -
package com.tutorialspoint.endpoint; import javax.xml.ws.Endpoint; import com.tutorialspoint.ws.HelloWorldImpl; public class HelloWorldPublisher { public static void main(String[] args) { Endpoint.publish("http://localhost:9000/ws/hello", new HelloWorldImpl()); } }
修改 web.xml 内容,如下所示 -
<?xml version = "1.0" encoding = "UTF-8"?> <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/j2ee/dtds/web-app_2_3.dtd"> <web-app> <listener> <listener-class> com.sun.xml.ws.transport.http.servlet.WSServletContextListener </listener-class> </listener> <servlet> <servlet-name>hello</servlet-name> <servlet-class>com.sun.xml.ws.transport.http.servlet.WSServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>hello</servlet-name> <url-pattern>/hello</url-pattern> </servlet-mapping> <session-config> <session-timeout>120</session-timeout> </session-config> </web-app>
要将此应用程序部署为 Web 服务,我们需要另一个配置文件sun-jaxws.xml。该文件的内容如下 -
<?xml version = "1.0" encoding = "UTF-8"?> <endpoints xmlns = "http://java.sun.com/xml/ns/jax-ws/ri/runtime" version = "2.0"> <endpoint name = "HelloWorld" implementation = "com.tutorialspoint.ws.HelloWorldImpl" url-pattern = "/hello"/> </endpoints>
现在所有文件都已准备就绪,目录结构将如下图所示 -
现在创建该应用程序的 WAR 文件。
选择项目→右键→导出→WAR文件。
将其保存为Tomcat 服务器的webapps文件夹下的hello.war文件。
现在启动 Tomcat 服务器。
服务器启动后,您应该能够使用 URL 访问 Web 服务 - http://localhost:8080/hello/hello
创建 JMeter 测试计划
现在让我们创建一个测试计划来测试上述 Web 服务。
重命名测试计划
单击 /home/manisha/apache-jmeter2.9/bin/jmeter.sh 打开 JMeter 窗口。
单击测试计划节点。
将此测试计划节点重命名为 WebserviceTest。
添加线程组
添加一个线程组,它是所有其他元素(如采样器、控制器和侦听器)的占位符。
右键单击 WebserviceTest(我们的测试计划)→ 添加→ 线程(用户)→ 线程组。线程组将添加到测试计划 (WebserviceTest) 节点下。
接下来,让我们修改线程组的默认属性以适应我们的测试。以下属性已更改 -
名称- 网络服务用户
线程数(用户) - 2
加速周期- 保留默认值 0 秒。
循环计数- 2
添加采样器 - SOAP/XML-RPC 请求
现在我们已经定义了用户,是时候定义他们将要执行的任务了。
我们将添加 SOAP/XML-RPC 请求元素 -
右键单击鼠标按钮以获取“添加”菜单。
选择添加 → 采样器 → SOAP/XML-RPC 请求。
在树中选择 SOAP/XML-RPC 请求元素
编辑以下属性,如下图所示 -
在此元素中输入以下详细信息 -
名称 - SOAP/XML-RPC 请求
URL - http://localhost:8080/hello/hello?wsdl
Soap/XML-RPC 数据- 输入以下内容
<soapenv:Envelope xmlns:soapenv = "http://schemas.xmlsoap.org/soap/envelope/" xmlns:web = "http://ws.tutorialspoint.com/"> <soapenv:Header/> <soapenv:Body> <web:getHelloWorldMessage> <arg0>Manisha</arg0> </web:getHelloWorldMessage> </soapenv:Body> </soapenv:Envelope>
添加监听器
您需要添加到测试计划中的最后一个元素是侦听器。该元素负责将 HTTP 请求的所有结果存储在文件中并呈现数据的可视化模型。
选择 Web 服务用户元素。
通过选择“添加”→“侦听器”→“查看结果树”来添加“查看结果树”侦听器。
运行测试计划
现在将上述测试计划保存为test_webservice.jmx。使用“运行”→“开始”选项执行此测试计划。
查看输出
在监听器中可以看到以下输出。
在最后一张图中,您可以看到响应消息“Hello Manisha to JAX WS world”。
jMeter - JMS 测试计划
在本章中,我们将学习如何编写一个简单的测试计划来测试Java消息服务(JMS)。JMS 支持两种类型的消息传递 -
点对点消息传递- 队列消息传递通常用于发送者期望响应的事务。消息系统与普通的 HTTP 请求有很大不同。在 HTTP 中,单个用户发送请求并获取响应。
主题消息传递- 主题消息通常称为发布/订阅消息传递。主题消息传递通常用于消息由生产者发布并由多个订阅者消费的情况。
让我们看一下每一个的测试示例。测试 JMS 的先决条件是 -
我们在示例中使用 Apache ActiveMQ。有各种 JMS 服务器,例如 IBM WebSphere MQ(以前称为 MQSeries)、Tibco 等。从Apache ActiveMQ 网站的二进制文件下载它。
解压存档,进入解压目录,然后从命令控制台运行以下命令来启动 ActiveMQ 服务器 -
.\bin\activemq start
您可以通过访问以下地址的管理界面来验证 ActiveMQ 服务器是否已启动: http://localhost:8161/admin/。如果要求身份验证,请输入用户 ID 和密码admin。屏幕类似如下所示 -
现在将activemq-all-xxxjar(XXX取决于版本)从ActiveMQ解压目录复制到/home/manisha/apache-jmeter-2.9/lib。
通过上述设置,让我们构建测试计划 -
jMeter - 监控测试计划
在本章中,我们将讨论如何使用 JMeter 创建测试计划来监控网络服务器。监视器测试的用途如下 -
监视器对于压力测试和系统管理很有用。
与压力测试一起使用,监视器提供有关服务器性能的附加信息。
监视器可以更轻松地查看服务器性能和客户端响应时间之间的关系。
作为一种系统管理工具,监视器提供了一种从一个控制台监视多个服务器的简单方法。
我们需要Tomcat 5或以上版本来进行监控。出于测试目的,我们将监控 Tomcat 7.0.42 服务器。您可以测试任何支持 Java 管理扩展 (JMX) 的 Servlet 容器。让我们编写一个测试用例来监控 Tomcat 服务器。让我们首先设置我们的 tomcat 服务器。
设置 Tomcat 服务器
我们首先打开Tomcat服务状态。为此,请编辑用户的配置文件<TOMCAT_HOME>/conf/tomcat-users.xml。该文件包含一个 tomcat-users 部分(已注释),如下所示 -
<tomcat-users> <!-- <role rolename = "tomcat"/> <role rolename = "role1"/> <user username = "tomcat" password = "tomcat" roles = "tomcat"/> <user username = "both" password = "tomcat" roles = "tomcat,role1"/> <user username = "role1" password = "tomcat" roles = "role1"/> --> </tomcat-users>
我们需要更改此部分以添加管理角色、manager、manager-gui 并分配用户“admin”。修改后的文件如下 -
<tomcat-users> <role rolename = "manager-gui"/> <role rolename = "manager-script"/> <role rolename = "manager-jmx"/> <role rolename = "manager-status"/> <user username = "admin" password = "admin" roles = "manager-gui,manager-script,manager-jmx,manager-status"/> </tomcat-users>
现在启动 tomcat 服务器 <TOMCAT_HOME>/bin/startup.sh(对于 Linux)和 <TOMCAT_HOME>/bin/startup.bat(对于 Windows)。启动后,通过在浏览器中输入以下链接来检查 Tomcat 监控是否正常工作 -
http://localhost:8080/manager/status?XML=true
浏览器中会出现一个身份验证窗口。输入关联的 tomcat 登录名和密码(在我们的例子中是 admin)。然后,浏览器显示 Tomcat 的执行状态如下:
从上面的屏幕截图中,我们可以注意到一些事情 -
在 URL 中,请注意XML = true(注意区分大小写)允许清晰显示 JMeter 运行所需的监控 Tomcat。
另请注意,默认有两个连接器。AJP 连接器通常与 mod_jk Apache HTTPD 前端模块和 HTTP 连接器配合使用,HTTP 连接器是通过端口 8080 直接访问 Tomcat 的常用连接器。
编写 JMeter 测试计划
让我们通过编写测试计划来监控 Tomcat 服务器 -
重命名测试计划
单击 /home/manisha/apache-jmeter2.9/bin/jmeter.sh 打开 JMeter 窗口。
单击测试计划节点。
添加线程组,如下一步中所述。
添加线程组
右键单击测试计划→添加→线程(用户)→线程组。线程组将添加到测试计划节点下。
将循环计数更改为永远(或某个较大的数字),以便生成足够的样本。
HTTP 授权管理器
通过选择添加 → 配置元素 → HTTP 授权管理器,将 HTTP 授权管理器添加到线程组元素。此元素管理浏览器请求的身份验证以查看 Tomcat 服务器状态。
选择 HTTP 授权管理器。
编辑以下详细信息 -
用户名- admin(取决于 tomcat-users.xml 文件中的配置)
密码- admin(取决于 tomcatusers.xml 文件中的配置)
其他字段留空。
添加采样器-HTTP 请求
现在我们已经定义了用户,是时候定义他们将要执行的任务了。我们添加 HTTP 请求元素。
右键单击鼠标按钮以获取“添加”菜单。
选择添加 → 采样器 → HTTP 请求。
然后,选择树中的 HTTP 请求元素。
编辑以下属性,如下图所示 -
在此元素中输入以下详细信息 -
名称- 服务器状态
服务器名称或 IP - localhost
端口- 8080
路径- /manager/status
参数- 添加一个名为“XML”的大写请求参数。给它一个小写的“true”值。
可选任务- 检查采样器底部的“用作监视器”。
添加恒定计时器
要定期请求服务器的状态,请添加一个常量计时器,该计时器将允许每个请求之间有一个时间间隔。通过选择“添加”→“计时器”→“常量计时器”,将计时器添加到该线程组。
在“线程延迟”框中输入 5000 毫秒。一般来说,使用短于 5 秒的间隔可能会增加服务器的压力。在生产环境中部署监视器之前,了解可接受的间隔是多少。
添加监听器
您需要添加到测试计划中的最后一个元素是侦听器。我们添加两种类型的侦听器。第一个将结果存储在文件中,第二个显示结果的图形视图。
选择线程组元素。
添加简单数据写入器监听器 添加 → 监听器 → 简单数据写入器。
指定输出文件的目录和文件名(在我们的示例中为 /home/manisha/work/sample.csv)
让我们通过选择测试计划元素添加→侦听器→监视结果来添加另一个侦听器。
运行测试计划
现在将上述测试计划保存为monitor_test.jmx。使用“运行”→“开始”选项执行此测试计划。
查看输出
结果将保存在 /home/manisha/work/sample.csv 文件中。您还可以在监视器结果侦听器中看到图形结果,如下图所示。
请注意,该图的两侧都有标题。左边是百分比,右边是死亡/健康。如果内存线快速上下波动,则可能表明存在内存抖动。在这些情况下,最好使用 Borland OptimizeIt 或 JProbe 来分析应用程序。您希望看到的是负载、内存和线程的常规模式。任何不稳定的Behave通常都表明性能不佳或存在某种错误。
jMeter - 听众
侦听器提供对 JMeter 在 JMeter 运行时收集的有关测试用例的信息的访问。听众收集的结果或信息可以以以下形式显示 -
- 树
- 桌子
- 图表
- 日志档案
当指定一个时,所有侦听器都会将相同的原始数据写入输出文件。
默认配置
要保存的默认项目可以通过以下两种方式之一定义 -
在jmeter.properties(或 user.properties)文件中。该文件位于JMeter 的/bin文件夹中。要更改默认格式,请在 jmeter.properties 中找到以下行 -
jmeter.save.saveservice.output_format=
通过使用配置弹出窗口,如以下屏幕截图所示 -
JMeter 将测试运行的结果创建为 JMeter 文本日志 (JTL)。这些通常称为 JTL 文件,因为这是默认扩展名 - 但可以使用任何扩展名。
如果使用相同的输出文件名运行多个测试,则 JMeter 会自动在文件末尾附加新数据。
侦听器可以将结果记录到文件中,但不能记录到 UI 中。它旨在通过消除 GUI 开销来提供一种有效的数据记录方法。
当运行时 -
GUI 模式- 使用监听器简单数据编写器
非 GUI 模式- -l 标志可用于创建数据文件。
如果有大量样本,侦听器可能会使用大量内存。为了最大限度地减少所需的内存量,请使用 CSV 格式的简单数据写入。
CSV 日志格式
CSV 日志格式取决于在配置中选择的数据项。仅指定的数据项记录在文件中。列的出现顺序是固定的,如下所示 -
场地 | 描述 | 值示例 |
---|---|---|
时间戳 | 自 1970 年 1 月 1 日以来的毫秒数 | 1354223881017 |
过去 | 以毫秒为单位 | 1858年 |
标签 | 采样器标签 | HTTP请求 |
响应码 | 例如200、404 | 200 |
响应消息 | 例如,好的 | 好的 |
线程名 | 线程组 1-1 | |
数据类型 | 例如文本 | 文本 |
成功 | 对或错 | 真的 |
失败消息 | 如果有的话 | |
字节 | 样本中的字节数 | 34908 |
grp线程 | 该线程组中的活动线程数 | 1 |
所有线程 | 所有组中的活动线程总数 | 1 |
网址 | http://tutorialspoint.com | |
文件名 | 如果使用“将响应保存到文件” | |
潜伏 | 首次响应时间 | 132 |
编码 | UTF-8 | |
样本数 | 样本数量(1,除非聚合多个样本) | 1 |
错误计数 | 错误数(0 或 1,除非聚合多个样本) | 0 |
主机名 | 样本的生成位置 | 笔记本电脑Manisha |
空闲时间 | “空闲”时间的毫秒数(通常为 0) | |
变量 | 如果指定 |
保存响应数据
如果需要,可以将响应数据保存在 XML 日志文件中。但是它不允许保存大文件和图像。在这种情况下,请使用后处理器 Save_Responses_to_a_file。这会为每个样本生成一个新文件,并将文件名与样本一起保存。然后,文件名可以包含在示例日志输出中。重新加载示例日志文件时,如有必要,将从文件中检索数据。
加载(读取)响应数据
要查看现有结果文件,您可以使用文件“浏览...”按钮来选择文件。如有必要,只需创建一个虚拟测试计划,其中包含适当的侦听器。
保存监听器 GUI 数据
JMeter 能够将任何侦听器保存为 PNG 文件。为此,
通过选择“编辑”→“另存为图像”来选择左侧面板中的侦听器。出现一个文件对话框。
输入所需的名称。
拯救听者。
jMeter - 功能
JMeter 函数和用户变量
JMeter 函数是特殊值,可以填充测试树中任何 Sampler 或其他元素的字段。
函数调用如下所示 -
${__functionName(var1,var2,var3)}
_functionName匹配函数的名称。例如${__threadNum}。
如果函数参数包含逗号,请确保使用“\”对其进行转义,如下所示 -
${__time(EEE\, d MMM yyyy)}
变量引用为 -
${VARIABLE}
功能一览
下表列出了一组松散地分为不同类型的函数 -
功能类型 | 姓名 | 评论 |
---|---|---|
信息 | 线程数 | 获取线程号。 |
信息 | 采样器名称 | 获取采样器名称(标签)。 |
信息 | 机器IP | 获取本机IP地址。 |
信息 | 机器名称 | 获取本地机器名称。 |
信息 | 时间 | 以各种格式返回当前时间。 |
信息 | 日志 | 记录(或显示)消息(并返回值)。 |
信息 | 登录 | 记录(或显示)一条消息(空返回值)。 |
输入 | 来自文件的字符串 | 从文件中读取一行。 |
输入 | 文件转字符串 | 读取整个文件。 |
输入 | CSV读取 | 从 CSV 分隔文件中读取。 |
输入 | X路径 | 使用 XPath 表达式从文件中读取。 |
计算 | 柜台 | 生成一个递增的数字。 |
计算 | 积分和 | 添加 int 数字。 |
计算 | 长和 | 添加长数字。 |
计算 | 随机的 | 生成一个随机数。 |
计算 | 随机字符串 | 生成一个随机字符串。 |
计算 | 通用唯一标识符 | 生成随机类型 4 UUID。 |
脚本编写 | 豆壳 | 运行 BeanShell 脚本。 |
脚本编写 | JavaScript | 处理 JavaScript (Mozilla Rhino)。 |
脚本编写 | 杰克斯尔、杰克斯尔2 | 评估 Commons Jexl 表达式。 |
特性 | 财产 | 阅读属性。 |
特性 | 磷 | 读取属性(速记方法)。 |
特性 | 设置属性 | 设置 JMeter 属性。 |
变量 | 分裂 | 将字符串拆分为变量。 |
变量 | V | 评估变量名称。 |
变量 | 评估 | 计算变量表达式。 |
变量 | 评估变量 | 计算存储在变量中的表达式。 |
细绳 | regex函数 | 使用正则表达式解析先前的响应。 |
细绳 | escapeOroRegexpCha |