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 Process

jMeter - 环境

JMeter 是一个 Java 框架,因此首要要求是在您的机器上安装 JDK。

系统要求

JDK 1.6 或更高版本。
内存 没有最低要求。
磁盘空间 没有最低要求。
操作系统 没有最低要求。

步骤 1:验证 Java 安装

首先,验证您的系统中是否安装了 Java。打开您的控制台并根据您正在使用的操作系统执行以下 java 命令之一。

操作系统 任务 命令
Windows 打开命令控制台 c:\> java -version
Linux 打开命令终端 $ java -version
Mac 打开终端 machine: ~ joseph$ java -version

如果您的系统中安装了 Java,您将根据您正在使用的操作系统获得相应的输出。

操作系统 输出
Windows

java version "1.7.0_25"

Java(TM) SE Runtime Environment (build 1.7.0_25-b15)

Java HotSpot(TM) 64-Bit Server VM (build 23.25-b01, mixed mode)

Linux

java version "1.7.0_25"

Java(TM) SE Runtime Environment (build 1.7.0_25-b15)

Java HotSpot(TM) 64-Bit Server VM (build 23.25-b01, mixed mode)

Mac

java version "1.7.0_25"

Java(TM) SE Runtime Environment (build 1.7.0_25-b15)

Java HotSpot(TM) 64-Bit Server VM (build 23.25-b01, mixed mode)

如果您的系统中未安装 Java,请从www.oracle.com/technetwork/java/javase/downloads/index.html安装 Java 软件开发工具包 (SDK)。在本教程中,我们假设 Java 1.7.0_25 为已安装版本。

步骤 2:设置 Java 环境

设置JAVA_HOME环境变量以指向 Java 安装在您机器上的基本目录位置。例如:

操作系统 输出
Windows 将环境变量 JAVA_HOME 设置为 C:\Program Files\Java\jdk1.7.0_25
Linux export JAVA_HOME=/usr/local/java-current
Mac export JAVA_HOME=/Library/Java/Home

将 Java 编译器位置追加到系统路径。

操作系统 输出
Windows 将字符串;C:\Program Files\Java\jdk1.7.0_25\bin 追加到系统变量 Path 的末尾。
Linux export PATH=$PATH:$JAVA_HOME/bin/
Mac 不需要

如上所述,使用java -version命令验证 Java 安装。

步骤 3:下载 JMeter

https://jmeter.apache.org/download_jmeter.cgi下载最新版本的 JMeter。在本教程中,我们下载了apache-jmeter-2.9并将其复制到 C:\>JMeter 文件夹中。

目录结构应如下所示:

  • apache-jmeter-2.9
  • apache-jmeter-2.9\bin
  • apache-jmeter-2.9\docs
  • apache-jmeter-2.9\extras
  • apache-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
Mac jmeter.sh

短暂暂停后,JMeter GUI 应该会出现,这是一个 Swing 应用程序,如下面的屏幕截图所示:

JMeter GUI

这是工具的主页面和默认页面。

jMeter - 构建测试计划

什么是测试计划?

测试计划可以看作是运行测试的容器。它定义了要测试的内容以及如何进行测试。完整的测试计划包含一个或多个元素,例如线程组、逻辑控制器、样本生成控制器、监听器、计时器、断言和配置元素。测试计划必须至少包含一个线程组。

编写测试计划

按照以下步骤编写测试计划:

步骤 1:启动 JMeter 窗口

通过点击/home/manisha/apache-jmeter-2.9/bin/jmeter.sh打开 JMeter 窗口。JMeter 窗口将如下所示:

JMeter GUI

这是一个普通的空白 JMeter 窗口,没有任何额外的元素添加到其中。它包含两个节点:

  • 测试计划节点 - 这是保存实际测试计划的地方。

  • 工作台节点 - 它只是提供了一个临时存储测试元素的地方,这些元素在不用时用于复制/粘贴目的。保存测试计划时,工作台项目不会与其一起保存。

步骤 2:添加/删除元素

可以通过右键点击测试计划节点并从“添加”列表中选择一个新元素来将元素(将在下一章测试计划元素中讨论)添加到测试计划中。

或者,您可以从文件中加载元素并通过选择“合并”或“打开”选项将其添加。

例如,让我们将线程组元素添加到测试计划中,如下所示:

Add Thread Group

要删除元素,请确保选中该元素,右键点击该元素,然后选择“删除”选项。

Remove Element

步骤 3:加载和保存元素

要从文件加载元素:

  • 右键点击要添加加载元素的现有树元素。
  • 选择合并。
  • 选择保存元素的文件。
  • JMeter 将元素合并到树中。

默认情况下,JMeter 不会保存元素,您需要显式保存它。

Load Element

要保存树元素:

  • 右键点击元素。
  • 选择另存为...选项。

JMeter 将保存选定的元素及其下面的所有子元素。默认情况下,JMeter 不会保存元素,您需要像前面提到的那样显式保存它。

步骤 4:配置树元素

测试计划中的任何元素都可以使用 JMeter 右侧框架中提供的控件进行配置。这些控件允许您配置特定测试元素的行为。例如,线程组可以配置为指定数量的用户、预热时间等,如下所示:

Add Thread Group

步骤 5:保存测试计划

您可以使用保存或文件菜单中的“另存为...”来保存整个测试计划。

Save Test Plan

步骤 6:运行测试计划

您可以通过点击运行菜单项中的启动(Control + r)来运行测试计划。当 JMeter 开始运行时,它会在菜单栏正下方的部分右侧显示一个小绿色框。

Run Test Plan

绿色框左侧的数字是活动线程数/总线程数。这些仅适用于本地运行的测试;当使用客户端-服务器模式时,它们不包括在远程系统上启动的任何线程。

步骤 7:停止测试计划

您可以通过两种方式停止测试:

  • 使用停止(Control + '.')。如果可能,它会立即停止线程。

  • 使用关闭(Control + ',')。它请求线程在任何当前工作结束时停止。

jMeter - 测试计划元素

JMeter 测试计划包含下面讨论的测试元素。测试计划至少包含一个线程组。在每个线程组中,我们可以放置一个或多个其他元素的组合:采样器、逻辑控制器、配置元素、监听器和计时器。每个采样器前面可以有一个或多个预处理器元素,后面可以跟有后处理器元素和/或断言元素。让我们详细了解每个元素:

线程组

线程组元素是测试计划的起点。顾名思义,线程组元素控制 JMeter 在测试期间将使用的线程数。我们还可以通过线程组控制以下内容:

  • 设置线程数

  • 设置预热时间

  • 设置测试迭代次数

线程组控制面板如下所示:

Thread Group

线程组面板包含以下组件:

  • 采样器错误后要采取的操作 - 如果在测试执行期间发生任何错误,您可以让测试:

    • 继续到测试中的下一个元素

    • 停止线程以停止当前线程。

    • 停止测试,如果您想在测试继续运行之前检查错误。

  • 线程数 - 模拟用户或到服务器应用程序的连接数。

  • 预热时间 定义 JMeter 启动所有线程需要多长时间。

  • 循环次数 - 定义执行测试的次数。

  • 调度程序复选框 - 选择后,调度程序配置部分将出现在控制面板的底部。

  • 调度程序配置 - 可以配置测试的开始和结束时间。

控制器

JMeter 有两种类型的控制器:采样器逻辑控制器

采样器

采样器允许 JMeter 向服务器发送特定类型的请求。它们模拟用户从目标服务器请求页面的操作。例如,如果需要对 HTTP 服务执行 POST、GET 或 DELETE 操作,则可以添加 HTTP 请求采样器。

一些有用的采样器包括:

  • HTTP 请求
  • FTP 请求
  • JDBC 请求
  • Java 请求
  • SOAP/XML 请求
  • RPC 请求

以下屏幕截图显示了 HTTP 请求采样器控制面板:

Sampler Control Panel

逻辑控制器

逻辑控制器允许您控制线程中采样器的处理顺序。逻辑控制器可以更改来自其任何子元素的请求的顺序。一些例子包括:ForEach 控制器、While 控制器、循环控制器、If 控制器、运行时间控制器、交错控制器、吞吐量控制器和运行一次控制器。

以下屏幕截图显示了循环控制器控制面板:

Logic Controller Panel

以下列表包含 JMeter 提供的所有逻辑控制器:

  • 简单控制器
  • 循环控制器
  • 仅一次控制器
  • 交错控制器
  • 随机控制器
  • 随机顺序控制器
  • 吞吐量控制器
  • 运行时间控制器
  • If 控制器
  • While 控制器
  • 切换控制器
  • ForEach 控制器
  • 模块控制器
  • 包含控制器
  • 事务控制器
  • 录制控制器

测试片段

测试片段是一种特殊类型的元素,放置在与线程组元素相同的级别。它与线程组的区别在于,除非它被模块控制器或包含控制器引用,否则不会执行它。此元素纯粹用于测试计划中的代码重用。

监听器

监听器允许您以表格、图形、树或某些日志文件中的简单文本的形式查看采样器的结果。它们提供了对 JMeter 收集的测试用例数据的可视化访问,因为 JMeter 的采样器组件正在执行。

监听器可以添加到测试中的任何位置,包括直接在测试计划下。它们只会收集其级别或其以下级别元素的数据。以下列表包含 JMeter 提供的所有监听器:

  • 采样结果保存配置
  • 图形完整结果
  • 图形结果
  • 样条可视化器
  • 断言结果
  • 查看结果树
  • 聚合报告
  • 查看结果表
  • 简单数据写入器
  • 监控结果
  • 分布图(alpha)
  • 聚合图
  • 邮件可视化器
  • BeanShell 监听器
  • 摘要报告

定时器

默认情况下,JMeter 线程在每个采样器之间不暂停就发送请求。这可能不是您想要的。您可以添加一个定时器元素,它允许您定义每个请求之间等待的时间段。

以下列表显示了 JMeter 提供的所有定时器:

  • 恒定定时器
  • 高斯随机定时器
  • 均匀随机定时器
  • 恒定吞吐量定时器
  • 同步定时器
  • JSR223 定时器
  • BeanShell 定时器
  • BSF 定时器
  • 泊松随机定时器

以下屏幕截图显示了恒定定时器控制面板:

Constant Timer Panel

断言

断言允许您在使用采样器发出的请求的响应上包含一些验证测试。使用断言,您可以证明您的应用程序正在返回正确的数据。JMeter 会突出显示断言失败的位置。

以下列表包含 JMeter 提供的所有断言:

  • BeanShell 断言
  • BSF 断言
  • 比较断言
  • JSR223 断言
  • 响应断言
  • 持续时间断言
  • 大小断言
  • XML 断言
  • BeanShell 断言
  • MD5Hex 断言
  • HTML 断言
  • XPath 断言
  • XML 架构断言

以下屏幕截图显示了响应断言控制面板:

Response Assertion Panel

配置元件

配置元件允许您创建采样器将使用的默认值和变量。它们用于添加或修改采样器发出的请求。

它们在所属范围的开始处执行,在同一范围内的任何采样器之前执行。因此,配置元件只能从其放置的分支内部访问。

以下列表包含 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 - Web 测试计划

让我们构建一个简单的测试计划来测试网页。我们在 Apache JMeter 中编写一个测试计划,以便我们可以测试 URL 显示的网页的性能:www.tutorialspoint.com

启动 JMeter

通过点击/home/manisha/apache-jmeter-2.9/bin/jmeter.sh打开 JMeter 窗口。JMeter 窗口将如下所示:

JMeter GUI

重命名测试计划

在“名称”文本框中将测试计划节点的名称更改为示例测试。您需要将焦点更改为工作台节点,然后返回到测试计划节点才能看到名称反映出来。

Sample Test

添加线程组

现在我们在窗口中添加我们的第一个元素。我们添加一个线程组,它是所有其他元素(如采样器、控制器和监听器)的占位符。我们需要一个,以便我们可以配置要模拟的用户数量。

在 JMeter 中,所有节点元素都是通过使用上下文菜单添加的。

  • 右键单击要添加子节点元素的元素。

  • 选择合适的选项进行添加。

  • 右键单击示例测试(我们的测试计划)→添加→线程(用户)→线程组。这样,线程组就会添加到测试计划(示例测试)节点下。

Thread Group Added
  • 将线程组命名为用户。对我们来说,此元素表示访问 TutorialsPoint 首页的用户。

Thread Group User

添加采样器

我们需要在我们的线程组(用户)中添加一个采样器。与之前添加线程组的操作一样,这次我们将通过右键单击打开线程组(用户)节点的上下文菜单,并通过选择添加→采样器→HTTP 请求选项来添加 HTTP 请求采样器。

Empty Sampler

它将在线程组(用户)节点下添加一个空的 HTTP 请求采样器。让我们配置此节点元素:

Sampler With Data
  • 名称 - 我们将更改名称以反映我们想要实现的操作。我们将将其命名为访问 TutorialsPoint 首页

  • 服务器名称或 IP - 在这里,我们必须输入 Web 服务器名称。在我们的例子中是www.tutorialspoint.com。(http:// 部分未写入,这只是服务器名称或其 IP)

  • 协议 - 我们将保持为空,这意味着我们希望 HTTP 作为协议。

  • 路径 - 我们将路径键入为 /(斜杠)。这意味着我们想要服务器的根页面。

添加监听器

现在我们将添加一个监听器。让我们在线程组(用户)节点下添加“查看结果树”监听器。它将确保采样器的结果可在此监听器节点元素中查看。

添加监听器的方法如下:

  • 打开上下文菜单

  • 右键单击“线程组(用户)”

  • 选择“添加”→“监听器”→“查看结果树”选项

Listener

运行测试计划

现在,在完成所有设置后,让我们执行测试计划。在线程组(用户)的配置中,我们保留所有默认值。这意味着 JMeter 只会执行一次采样器。这类似于单个用户只执行一次操作。

这类似于用户通过浏览器访问网页,使用 JMeter 采样器。要执行测试计划,请从菜单中选择“运行”,然后选择“启动”选项。

在实际开始测试之前,Apache JMeter 会要求我们将测试计划保存到磁盘文件。如果您想多次运行测试计划,这一点很重要。您也可以选择不保存直接运行。

Save the Test Plan

查看输出

我们已将线程组的设置保留为单个线程(仅一个用户)并循环 1 次(仅运行一次),因此我们将在“查看结果树”监听器中获得单个事务的结果。

View Result

上述结果的详细信息如下:

  • 访问 TutorialsPoint 首页名称旁边的绿色表示成功。

  • JMeter 已存储 Web 服务器发送的所有标头和响应,并准备以多种方式向我们显示结果。

  • 第一个选项卡是“采样器结果”。它显示 JMeter 数据以及 Web 服务器返回的数据。

  • 第二个选项卡是“请求”,它显示作为请求的一部分发送到 Web 服务器的所有数据。

Request Tab

最后一个选项卡是“响应数据”。在此选项卡中,监听器以文本格式显示从服务器接收到的数据。

Response Tab

这只是一个简单的测试计划,它只执行一个请求。但 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 用户

Thread Group Added

我们不会更改线程组的默认属性。

添加 JDBC 请求

现在我们定义了用户,是时候定义他们将执行的任务了。在本节中,指定要执行的 JDBC 请求。

  • 右键单击“JDBC 用户”元素。

  • 选择添加”→“配置元件”→“JDBC 连接配置”

  • 设置以下字段(我们使用名为 tutorial 的 MySQL 数据库):

    • 绑定到池的变量名称。这需要唯一地标识配置。JDBC 采样器使用它来识别要使用的配置。我们将其命名为test

    • 数据库 URL:jdbc:mysql://:3306/tutorial。

    • JDBC 驱动程序类:com.mysql.jdbc.Driver。

    • 用户名:root。

    • 密码:root 的密码。

屏幕上的其他字段保留默认值,如下所示:

JDBC Configuration Pool

现在添加一个 JDBC 请求,它引用上面定义的 JDBC 配置池。选择“JDBC 用户”元素。

  • 单击鼠标右键以获取“添加”菜单

  • 选择添加”→“采样器”→“JDBC 请求”。

  • 选择此新元素以查看其控制面板。

  • 编辑属性,如下所示:

    • 绑定到池的变量名称。这需要唯一地标识配置。JDBC 采样器使用它来识别要使用的配置。命名为test

    • 名称:Learn。

    • 输入池名称:test(与配置元素中相同)。

    • 查询类型:Select 语句。

    • 输入 SQL 查询字符串字段。

JDBC Request

创建监听器

现在添加监听器元素。此元素负责将所有 JDBC 请求的结果存储到文件中,并呈现数据的可视化模型。

  • 选择“JDBC 用户”元素

  • 添加“查看结果树”监听器(添加”→“监听器”→“查看结果树”)。

JDBC Test Listener

保存并执行测试计划

现在将上述测试计划保存为db_test.jmx。使用运行”→“启动”选项执行此测试计划。

验证输出

JDBC Test Output1

JDBC Test Output2

JDBC Test Output3

在最后一张图片中,您可以看到选择了两个记录。

jMeter - FTP 测试计划

在本节中,我们将学习如何使用 JMeter 测试 FTP 站点。让我们创建一个测试计划来测试 FTP 站点。

重命名测试计划

  • 通过单击 /home/manisha/apache-jmeter-2.9/bin/jmeter.sh 打开 JMeter 窗口

  • 单击“测试计划”节点。

  • 将此“测试计划”节点重命名为 TestFTPSite。

添加线程组

添加一个线程组,它是所有其他元素(如采样器、控制器和监听器)的占位符。

  • 右键单击 TestFTPSite(我们的测试计划)

  • 选择“添加”→“线程(用户)”→“线程组”。“线程组”将添加到“测试计划”(TestFTPSite)节点下。

  • 修改线程组的默认属性以适合我们的测试,如下所示:

    • 名称:FTPusers

    • 线程数(用户):4

    • Ramp-Up 期间:保留 0 秒的默认值。

    • 循环次数:1

FTP Test Users

添加采样器:FTP 请求

现在我们定义了用户,是时候定义他们将执行的任务了。添加 FTP 请求元素。我们添加了两个 FTP 请求元素,一个用于检索文件,另一个用于将文件放到 FTP 站点上。

  • 选择“FTP 用户”元素。

  • 右键单击鼠标以获取“添加”菜单

  • 选择“添加”→“采样器”→“FTP 请求”。

  • 在树中选择“FTP 请求”元素。

  • 编辑以下属性,如下所示:

FTP Request Get

在此元素中输入以下详细信息:

  • 名称:FTP 请求获取

  • 服务器名称或 IP:184.168.74.29

  • 远程文件:/home/manisha/sample_ftp.txt

  • 本地文件:sample_ftp.txt

  • 选择获取(RETR)

  • 用户名:manisha

  • 密码:manisha123

现在像上面一样添加另一个 FTP 请求,并编辑属性,如下面的屏幕截图所示:

FTP Request Put

在此元素中输入以下详细信息:

  • 名称:FTP 请求放置

  • 服务器名称或 IP:184.168.74.29

  • 远程文件:/home/manisha/examplefile.txt

  • 本地文件:/home/manisha/work/examplefile.txt

  • 选择放置(STOR)

  • 用户名:manisha

  • 密码:manisha123

添加监听器

您需要添加到测试计划中的最后一个元素是监听器。此元素负责将所有 FTP 请求的结果存储到文件中,并呈现数据的可视化模型。

  • 选择“FTP 用户”元素。

  • 通过选择“添加”>“监听器”>“查看结果树”添加“查看结果树”监听器。

FTP Test Listener

运行测试计划

现在将上述测试计划保存为ftpsite_test.jmx。使用运行”→“启动”选项执行此测试计划。

查看输出

监听器中可以看到以下输出。

FTP Get Result1

FTP Test Result2

FTP Put Result

FTP Get Result

您可以看到对每个 FTP 请求都进行了四个请求,并且测试成功。GET 请求的检索文件存储在 /bin 文件夹中。在我们的例子中,它是/home/manisha/apache-jmeter-2.9/bin/。对于 PUT 请求,文件上传到路径/home/manisha/

jMeter - Web服务测试计划

在本节中,我们将学习如何创建测试计划以测试 Web 服务。为了测试目的,我们创建了一个简单的 Web 服务项目并将其部署到本地 Tomcat 服务器上。

创建 Web 服务项目

要创建 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");
   }
}

现在让我们通过创建端点发布者并在服务器上公开服务来在本地发布此 Web 服务。

publish 方法接受两个参数:

  • 端点 URL 字符串。

  • 实现者对象,在本例中为 HelloWorld 实现类,它作为 Web 服务公开,位于上述参数中提到的 URL 标识的端点。

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("https://: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>

现在所有文件都准备就绪,目录结构将如下面的屏幕截图所示:

WebService Dir structure
  • 现在创建此应用程序的 WAR 文件。

  • 选择项目→右键单击→导出→WAR 文件。

  • 将其保存为hello.war文件,放在 Tomcat 服务器的webapps文件夹下。

  • 现在启动 Tomcat 服务器。

  • 服务器启动后,您应该能够使用以下 URL 访问 Web 服务:https://:8080/hello/hello

创建 JMeter 测试计划

现在让我们创建一个测试计划来测试上述 Web 服务。

重命名测试计划

  • 通过单击 /home/manisha/apache-jmeter2.9/bin/jmeter.sh 打开 JMeter 窗口。

  • 单击“测试计划”节点。

  • 将此“测试计划”节点重命名为 WebserviceTest。

WS Test Plan

添加线程组

添加一个线程组,它是所有其他元素(如采样器、控制器和监听器)的占位符。

  • 右键单击 WebserviceTest(我们的测试计划)→添加”→“线程(用户)”→“线程组”。“线程组”将添加到“测试计划”(WebserviceTest)节点下。

  • 接下来,让我们修改线程组的默认属性以适合我们的测试。更改以下属性:

    • 名称:Web 服务用户

    • 线程数(用户):2

    • Ramp-Up 期间:保留 0 秒的默认值。

    • 循环次数:2

WS Test Users

添加采样器:SOAP/XML-RPC 请求

现在我们定义了用户,是时候定义他们将执行的任务了。

我们将添加 SOAP/XML-RPC 请求元素:

  • 右键单击鼠标以获取“添加”菜单。

  • 选择“添加”→“采样器”→“SOAP/XML-RPC 请求”。

  • 在树中选择“SOAP/XML-RPC 请求”元素

  • 编辑以下属性,如下图所示:

  • 在此元素中输入以下详细信息:

    • 名称:SOAP/XML-RPC 请求

    • URL:https://: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>
WS Test request

添加监听器

您需要添加到测试计划中的最后一个元素是监听器。此元素负责将所有 HTTP 请求的结果存储到文件中,并呈现数据的可视化模型。

  • 选择“Web 服务用户”元素。

  • 通过选择“添加”→“监听器”→“查看结果树”添加“查看结果树”监听器。

WS Test request

运行测试计划

现在将上述测试计划保存为test_webservice.jmx。使用“运行”→“启动”选项执行此测试计划。

查看输出

监听器中可以看到以下输出。

WS Sample Result

WS Result Request

WS Response Data

在最后一张图片中,您可以看到响应消息“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服务器是否已启动https://:8161/admin/。如果要求进行身份验证,则输入用户 ID 和密码为admin。屏幕类似于如下所示:

ActiveMQ Server
  • 现在将activemq-all-x.x.x.jar(XXX取决于版本)从ActiveMQ解压缩目录复制到/home/manisha/apache-jmeter-2.9/lib。

有了上述设置,让我们构建以下测试计划:

jMeter - 监控测试计划

在本章中,我们将讨论如何使用JMeter创建测试计划来监控Web服务器。监控测试的用途如下:

  • 监控器对于压力测试和系统管理很有用。

  • 与压力测试一起使用时,监控器提供了有关服务器性能的更多信息。

  • 监控器使更容易查看服务器性能与客户端响应时间之间的关系。

  • 作为系统管理工具,监控器提供了一种简单的方法来从一个控制台监控多个服务器。

我们需要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监控是否有效:

https://:8080/manager/status?XML=true

浏览器中会出现一个身份验证窗口。输入关联的Tomcat登录名和密码(在本例中为admin)。然后,浏览器显示Tomcat的执行状态,如下所示:

Tomcat Manager Status

从上面的屏幕截图中,我们可以注意到一些事情:

  • 在URL中,请注意XML = true(注意大小写敏感性)允许清晰显示JMeter功能所需的Tomcat监控信息。

  • 还要注意,有两个默认连接器。AJP连接器通常与mod_jk Apache HTTPD前端模块一起使用,而HTTP连接器是通过端口8080直接访问Tomcat的常用连接器。

编写JMeter测试计划

让我们通过编写测试计划来监控Tomcat服务器:

重命名测试计划

  • 通过单击 /home/manisha/apache-jmeter2.9/bin/jmeter.sh 打开 JMeter 窗口。

  • 单击“测试计划”节点。

  • 添加线程组,如下一步所述。

添加线程组

  • 右键单击测试计划→添加→线程(用户)→线程组。线程组将添加到测试计划节点下。

  • 将循环次数更改为永远(或某个较大的数字),以便生成足够的样本。

Monitor Test Users

HTTP 授权管理器

  • 通过选择添加→配置元素→HTTP授权管理器,将HTTP授权管理器添加到线程组元素。此元素管理浏览器请求查看Tomcat服务器状态时所需的身份验证。

  • 选择HTTP授权管理器。

  • 编辑以下详细信息:

    • 用户名 − admin(取决于tomcat-users.xml文件中的配置)

    • 密码 − admin(取决于tomcatusers.xml文件中的配置)

    • 其他字段保持为空。

HTTP Authorization Manager

添加采样器-HTTP请求

现在我们已经定义了用户,是时候定义他们将执行的任务了。我们添加HTTP请求元素。

  • 右键单击鼠标以获取添加菜单。

  • 选择添加→采样器→HTTP请求。

  • 然后,在树中选择HTTP请求元素。

  • 编辑以下属性,如下图所示:

  • 在此元素中输入以下详细信息:

    • 名称 − 服务器状态

    • 服务器名称或IP − localhost

    • 端口 − 8080

    • 路径 − /manager/status

    • 参数 − 添加一个名为“XML”(大写)的请求参数。为其提供一个“true”(小写)的值。

    • 可选任务 − 在采样器的底部选中“用作监控器”。

Monitor Test Sampler

添加恒定定时器

要定期请求服务器的状态,请添加一个恒定定时器,它将允许每个请求之间的时间间隔。通过选择添加→定时器→恒定定时器,将定时器添加到此线程组。

线程延迟框中输入5000毫秒。通常,使用小于5秒的间隔可能会给服务器带来压力。在您在生产环境中部署监控器之前,请了解可接受的间隔。

Monitor Constant Timer

添加监听器

您需要添加到测试计划中的最后一个元素是监听器。我们添加两种类型的监听器。一种将结果存储在文件中,另一种显示结果的图形视图。

  • 选择线程组元素。

  • 添加一个简单数据写入器监听器添加→监听器→简单数据写入器。

  • 指定输出文件的目录和文件名(在本例中,为/home/manisha/work/sample.csv)

Monitor Simple Data Writer
  • 让我们通过选择测试计划元素添加→监听器→监控结果来添加另一个监听器。

Monitor Results

运行测试计划

现在将上述测试计划保存为monitor_test.jmx。使用运行→启动选项执行此测试计划。

查看输出

结果将保存在/home/manisha/work/sample.csv文件中。您还可以在监控结果监听器中看到图形结果,如下面的图像所示。

Monitor Test Result1

Monitor Test Result2

请注意,图形在图形的两侧都有标题。左侧是百分比,右侧是死/健康。如果内存线快速上下波动,则可能表示内存抖动。在这些情况下,最好使用Borland OptimizeIt或JProbe对应用程序进行分析。您希望看到的是负载、内存和线程的常规模式。任何不稳定的行为通常都表示性能低下或某种错误。

jMeter - 监听器

监听器提供对JMeter在运行时收集的测试用例信息进行访问。监听器收集的结果或信息可以以以下形式显示:

  • 表格
  • 图形
  • 日志文件

当指定一个输出文件时,所有监听器都会将相同的基本数据写入输出文件。

默认配置

要保存的默认项目可以通过以下两种方式之一定义:

  • jmeter.properties(或user.properties)文件中。此文件位于JMeter的/bin文件夹中。要更改默认格式,请在jmeter.properties中找到以下行:

jmeter.save.saveservice.output_format=
  • 使用以下屏幕截图中显示的配置弹出窗口:

JMeter Config PopUp

JMeter创建测试运行的结果作为JMeter文本日志(JTL)。这些通常称为JTL文件,因为这是默认扩展名,但可以使用任何扩展名。

如果使用相同的输出文件名运行多个测试,则JMeter会自动将新数据追加到文件的末尾。

监听器可以将结果记录到文件,但不能记录到UI。它旨在通过消除GUI开销来提供一种有效的数据记录方法。

在以下模式下运行时:

  • GUI模式 − 使用监听器简单数据写入器

  • 非GUI模式 − 可以使用-l标志创建数据文件。

如果样本很多,监听器可能会使用大量内存。为了最大程度地减少所需的内存量,请将简单数据写入与CSV格式一起使用。

CSV日志格式

CSV日志格式取决于配置中选择了哪些数据项。只有指定的数据项记录在文件中。列的出现顺序是固定的,如下所示:

字段 描述 值示例
timeStamp 自1970年1月1日以来的毫秒数 1354223881017
elapsed 以毫秒为单位 1858
label 采样器标签 HTTP 请求
responseCode 例如200、404 200
responseMessage 例如OK OK
threadName 线程组1-1
dataType 例如text text
success true或false true
failureMessage 如果有
bytes 样本中的字节数 34908
grpThreads 此线程组中活动线程的数量 1
allThreads 所有组中活动线程的总数 1
URL https://tutorialspoint.com
Filename 如果使用了“将响应保存到文件”
latency 首次响应时间 132
encoding utf-8
SampleCount 样本数量(1,除非多个样本聚合) 1
ErrorCount 错误数量(0或1,除非多个样本聚合) 0
Hostname 生成样本的位置 LaptopManisha
IdleTime '空闲'时间(毫秒数)(通常为0)
Variables 如果指定

保存响应数据

如果需要,响应数据可以保存在 XML 日志文件中。但是它不允许保存大型文件和图像。在这种情况下,请使用后处理器 Save_Responses_to_a_file。这会为每个样本生成一个新文件,并将文件名与样本一起保存。然后,文件名可以包含在样本日志输出中。当重新加载样本日志文件时,如果需要,将从文件中检索数据。

加载(读取)响应数据

要查看现有的结果文件,您可以使用“浏览...”按钮选择文件。如有必要,只需创建一个包含相应监听器的虚拟测试计划。

保存监听器 GUI 数据

JMeter 能够将任何监听器保存为 PNG 文件。为此,

  • 通过选择“编辑”→“另存为图像”在左侧面板中选择监听器。将出现一个文件对话框。

  • 输入所需名称。

  • 保存监听器。

jMeter - 函数

JMeter 函数和用户变量

JMeter 函数是特殊值,可以填充测试树中任何采样器或其他元素的字段。

  • 函数调用如下所示:

${__functionName(var1,var2,var3)}
  • _functionName 与函数名称匹配。例如 ${__threadNum}

  • 如果函数参数包含逗号,则确保使用“\”对其进行转义,如下所示:

${__time(EEE\, d MMM yyyy)}
  • 变量引用如下:

${VARIABLE}

函数列表

下表列出了按类型大致分组的一组函数:

函数类型 名称 注释
信息 threadNum 获取线程号。
信息 samplerName 获取采样器名称(标签)。
信息 machineIP 获取本地机器的 IP 地址。
信息 machineName 获取本地机器名称。
信息 time 以各种格式返回当前时间。
信息 log 记录(或显示)消息(并返回该值)。
信息 logn 记录(或显示)消息(空返回值)。
输入 StringFromFile 从文件读取一行。
输入 FileToString 读取整个文件。
输入 CSVRead 从 CSV 分隔符文件中读取。
输入 XPath 使用 XPath 表达式从文件读取。
计算 counter 生成递增的数字。
计算 intSum 添加整数。
计算 longSum 添加长整数。
计算 Random 生成随机数。
计算 RandomString 生成随机字符串。
计算 UUID 生成随机类型 4 UUID。
脚本 BeanShell 运行 BeanShell 脚本。
脚本 javaScript 处理 JavaScript(Mozilla Rhino)。
脚本 jexl, jexl2 评估 Commons Jexl 表达式。
属性 property 读取属性。
属性 P 读取属性(简写方法)。
属性 setProperty 设置 JMeter 属性。
Variables split 将字符串拆分为变量。
Variables V 评估变量名称。
Variables eval 评估变量表达式。
Variables evalVar 评估存储在变量中的表达式。
字符串 regexFunction 使用正则表达式解析上一个响应。
字符串 escapeOroRegexpChars 引用 ORO 正则表达式使用的元字符。
字符串 char 从数字列表生成 Unicode 字符值。
字符串 unescape 处理包含 Java 转义字符(例如 \n 和 \t)的字符串。
字符串 unescapeHtml 解码 HTML 编码的字符串。
字符串 escapeHtml 使用 HTML 编码对字符串进行编码。
字符串 TestPlanName 返回当前测试计划的名称。
  • 函数有两种:

    • 用户定义的静态值(或变量)

    • 内置函数

  • 用户定义的静态值允许用户定义变量,以便在编译测试树并提交以运行时替换为其静态值。

  • 变量不能嵌套;即 ${Var${N}} 不起作用。

  • __V(变量)函数(2.2 之后的版本)可以用来做到这一点:${__V(Var${N})}。

  • 这种类型的替换无需函数即可实现,但不太方便且不直观。

函数和变量的用法

函数和变量可以写入任何测试组件的任何字段。

以下函数在测试计划中效果很好:

  • intSum
  • longSum
  • machineName
  • BeanShell
  • javaScript
  • jexl
  • random
  • time
  • 属性函数
  • 日志函数

在测试计划中使用的函数有一些限制。在处理函数时,JMeter 线程变量尚未完全设置,因此作为参数传递的变量名称将不会设置,并且变量引用将不起作用。因此,split()regex() 以及变量评估函数将不起作用。threadNum() 函数将不起作用,并且在测试计划级别没有意义。

引用变量和函数

  • 引用测试元素中的变量是通过用 '${' 和 '}' 括起变量名称来完成的。

  • 函数以相同的方式引用,但按照惯例,函数的名称以“__”开头,以避免与用户值名称冲突。

  • 某些函数需要参数来配置它们,这些参数以逗号分隔的形式放在括号中。如果函数不带参数,则可以省略括号。例如:

${__BeanShell(vars.put("name"\,"value"))}
  • 或者,您可以将脚本定义为变量,例如在测试计划上:

SCRIPT     vars.put("name","value")
  • 然后可以按如下方式引用脚本:

${__BeanShell(${SCRIPT})}

函数助手对话框

函数助手对话框可从 JMeter 的“选项”选项卡访问。

  • 使用函数助手,您可以从下拉菜单中选择一个函数,并为其参数分配值。表中的左列提供了参数的简要描述,右列是您为该参数编写值的地方。不同的函数需要不同的参数。

  • 完成此操作后,单击“生成”按钮,将生成相应的字符串,您可以将其复制粘贴到测试计划中的任何需要的位置。

预定义变量

JMeter 内部定义了一些变量。它们是:

  • COOKIE_cookiename - 包含 cookie 值。

  • JMeterThread.last_sample_ok - 上一个样本是否正常 - true/false。注意 - 这是在运行后处理器和断言后更新的。

  • START 变量。

预定义属性

JMeter 定义了一些内置属性。这些列在下面。为方便起见,START 属性也复制到具有相同名称的变量中。

  • START.MS - JMeter 启动时间(毫秒)。

  • START.YMD - JMeter 启动时间(yyyyMMdd 格式)。

  • START.HMS - JMeter 启动时间(HHmmss 格式)。

  • TESTSTART.MS - 测试开始时间(毫秒)。

请注意,START 变量/属性表示 JMeter 启动时间,而不是测试开始时间。它们主要用于文件名等。

jMeter - 正则表达式

正则表达式用于根据模式搜索和操作文本。JMeter 通过包含模式匹配软件 Apache Jakarta ORO 来解释在整个 JMeter 测试计划中使用的正则表达式或模式的形式。

通过使用正则表达式,我们当然可以节省大量时间,并在创建或增强测试计划时获得更大的灵活性。当无法或很难预测结果时,正则表达式提供了一种从页面获取信息的方法。

使用表达式的标准用法是从服务器响应中获取会话 ID。如果服务器返回唯一的会话密钥,我们可以使用加载脚本中的表达式轻松获取它。

要在测试计划中使用正则表达式,您需要使用 JMeter 的正则表达式提取器。您可以将正则表达式放置在测试计划中的任何组件中。

值得强调一下响应断言测试元素中使用的包含匹配之间的区别:

  • 包含表示正则表达式至少匹配目标的某些部分,因此 'alphabet' “包含” 'ph.b.',因为正则表达式匹配子字符串 'phabe'。

  • 匹配表示正则表达式匹配整个目标。因此,'alphabet' 由 'al.*t' “匹配”。

假设您要匹配网页的以下部分:

name = "file" value = "readme.txt" 

并且您想提取 readme.txt。合适的正则表达式将是:

name = "file" value = "(.+?)">

以上特殊字符为:

  • () - 这些括起要返回的匹配字符串的部分

  • . - 匹配任何字符

  • + - 一次或多次

  • ? - 第一次匹配成功时停止

创建 JMeter 测试计划

让我们了解一下在正则表达式提取器(一个后处理器元素)中使用正则表达式的用法,方法是编写测试计划。此元素使用正则表达式从当前页面提取文本,以识别所需元素符合的文本模式。

首先,我们编写一个包含人员列表及其电子邮件 ID 的 HTML 页面。我们将其部署到我们的 Tomcat 服务器上。html(index.html)的内容如下:

<html>
   <head>
   </head>
	
   <body>
      <table style = "border: 1px solid #000000;">
		
         <th style = "border: 1px solid #000000;">ID</th>
         <th style = "border: 1px solid #000000;">name</th>
         <th style = "border: 1px solid #000000;">Email</th>
			
         <tr>
            <td id = "ID" style = "border: 1px solid #000000;">3</td>
            <td id = "Name" style = "border: 1px solid #000000;">Manisha</td>
            <td id = "Email" style = "border: 1px solid #000000;">manisha@domain.com</td>
         </tr>
			
         <tr>
            <td id = "ID" style = "border: 1px solid #000000;">4</td>
            <td id = "Name" style = "border: 1px solid #000000;">joe</td>
            <td id = "Email" style = "border: 1px solid #000000;">joe@domain.com</td>
         </tr>
			
      </table>
   </body>
</html>

在将其部署到 Tomcat 服务器上后,此页面将如下面的屏幕截图所示:

HTML Page

在我们的测试计划中,我们将选择人员列表页面上显示的人员表的第一行中的人员。要捕获此人的 ID,让我们首先确定将在其中找到第二行中的人员的模式。

从以下快照中可以看到,第二人的 ID 位于 <td id = "ID"> 和 </td > 之间,并且它是具有此模式的数据的第二行。我们可以使用它来匹配我们想要从中提取信息的精确模式。由于我们想从此页面提取两条信息,即人员 ID 和人员姓名,因此字段定义如下:

HTML Page Source code

启动 JMeter,添加线程组 测试计划 → 添加 → 线程(用户)→ 线程组

接下来添加一个采样器 HTTP 请求,选择测试计划,右键单击 添加 → 采样器 → HTTP 请求,并输入如下所示的详细信息:

  • 名称 - 管理

  • 服务器名称或IP − localhost

  • 端口号 − 8080

  • 协议 - 我们将保持为空,这意味着我们希望 HTTP 作为协议。

  • 路径 − jmeter/index.html

HTTP Request Sampler

接下来,添加一个正则表达式提取器。选择 HTTP 请求采样器(Manage),右键点击添加 → 后置处理器 → 正则表达式提取器

Regular Expression Extractor

下表提供了上面截图中使用的字段的描述 −

序号 字段及描述
1

引用名称

存储提取到的测试结果的变量名称(refname)。

2

正则表达式

将要提取的文本匹配的模式。将要提取的文本组用字符 '(' 和 ')' 括起来。我们使用 '.+?' 来表示 <td..>..</td> 标签括起来的文本的单个实例。在我们的示例中,表达式为 − <td id = "ID">(+?)</td>\s*<td id = "Name">(+?)</td>\s*

3

模板

每个提取的文本组作为变量 Person 的成员放置,遵循每个用 '(' 和 ')' 括起来的模式组的顺序。每个组都存储为 refname_g#,其中 refname 是您输入的引用名称的字符串,# 是组号。$1$ 指的是组 1,$2$ 指的是组 2,依此类推。$0$ 指的是整个表达式匹配的内容。在这个例子中,我们提取的 ID 保存在 Person_g1 中,而 Name 值存储在 Person_g2 中。

4

匹配编号

由于我们计划仅提取此模式的第二个出现(匹配第二个志愿者),因此我们使用值 2。值 0 将进行随机匹配,而负值需要与 ForEach 控制器一起使用。

5

默认值

如果未找到该项,则此为默认值。这是一个可选字段。您可以将其留空。

添加一个监听器来捕获此测试计划的结果。右键单击线程组,然后选择添加 → 监听器 → 查看结果树选项以添加监听器。

将测试计划保存为 reg_express_test.jmx 并运行测试。输出将成功,如下面的屏幕截图所示 −

Regular Expression Output

jMeter - 最佳实践

JMeter 在分布式环境中运行时有一些限制。遵循以下指南将有助于创建真实且持续的负载 −

  • 如果线程数较多,请使用多个 JMeter 实例。

  • 检查作用域规则并相应地设计。

  • 始终对所有元素使用命名约定。

  • 在执行脚本之前,检查默认的浏览器连接设置。

  • 适当地添加监听器。

  • 以下是一些减少资源需求的建议 −

    • 使用非 GUI 模式:jmeter -n -t test.jmx -l test.jtl。

    • 尽可能少用监听器;如果如上所述使用 -l 标志,则可以删除或禁用所有监听器。

    • 禁用“查看结果树”监听器,因为它会消耗大量内存,并可能导致控制台冻结或 JMeter 内存不足。但是,仅选中“错误”的情况下,使用“查看结果树”监听器是安全的。

    • 不要使用大量类似的采样器,而是在循环中使用相同的采样器,并使用变量(CSV 数据集)来改变样本。或者可以使用访问日志采样器。

    • 不要使用功能模式。

    • 使用 CSV 输出而不是 XML 输出。

    • 只保存您需要的数据。

    • 尽可能少用断言。

    • 禁用所有 JMeter 图表,因为它们会消耗大量内存。您可以使用 Web 界面中的 JTLs 选项卡查看所有实时图表。

    • 如果使用了 CSV 数据集配置,请不要忘记删除其中的本地路径。

    • 每次测试运行前清理“文件”选项卡。

广告

© . All rights reserved.