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 命令之一。

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

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

OS 输出
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 安装在您机器上的基目录位置。例如 −

OS 输出
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 编译器位置附加到系统路径。

OS 输出
Windows 将字符串 C:\Program Files\Java\jdk1.7.0_25\bin 附加到系统变量 Path 的末尾。
Linux export PATH=$PATH:$JAVA_HOME/bin/
Mac not required

使用 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 重命名为 apache-jmeter-2.9,但不要更改任何子目录名称。

步骤 4:运行 JMeter

下载 JMeter 后,转到 bin 目录。在本例中,它是 /home/manisha/apache-jmeter-2.9/bin。现在单击以下 −

OS Output
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 窗口,没有添加任何附加元素。它包含两个节点 −

  • 测试计划节点 − 是保存实际测试计划的位置。

  • 工作台节点 − 它只是提供一个临时存储未使用测试元素的位置,用于复制/粘贴。保存测试计划时,Workbench 项目不会随之保存。

步骤 2:添加/删除元素

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

或者,您可以从文件中加载元素,然后通过选择"合并"或"打开"选项添加它。

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

添加线程组

要删除元素,请确保已选择该元素,右键单击该元素,然后选择"删除"选项。

删除元素

步骤 3:加载和保存元素

要从文件加载元素 −

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

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

加载元素

要保存树元素 −

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

JMeter 将保存所选元素及其下方的所有子元素。默认情况下,JMeter 不会保存元素,您需要明确保存它,如前所述。

步骤 4:配置树元素

可以使用 JMeter 右侧框架中的控件配置测试计划中的任何元素。这些控件允许您配置该特定测试元素的行为。例如,可以为多个用户、加速期等配置线程组,如下所示 −

添加线程组

步骤 5:保存测试计划

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

保存测试计划

步骤 6:运行测试计划

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

运行测试计划

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

第 7 步:停止测试计划

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

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

  • 使用 Shutdown (Control + ',')。它要求线程在当前工作结束时停止。

jMeter - 测试计划元素

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

线程组

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

  • 设置线程数

  • 设置加速时间

  • 设置测试迭代次数

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

线程组

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

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

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

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

    • 完全停止测试,以防您想在继续运行之前检查错误。

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

  • 加速期 定义 JMeter 运行所有线程所需的时间。

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

  • 调度程序复选框 − 选中后,调度程序配置部分将显示在控制面板的底部。

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

控制器

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

采样器

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

一些有用的采样器是 −

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

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

采样器控制面板

逻辑控制器

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

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

逻辑控制器面板

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

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

测试片段

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

监听器

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

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

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

计时器

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

以下列表显示了 JMeter 提供的所有计时器 −

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

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

恒定计时器面板

断言

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

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

  • Beanshell 断言
  • 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 预处理器
  • RegEx 用户参数
  • BeanShell 预处理器
  • BSF 预处理器

后处理器元素

后处理器在采样器完成执行后执行。此元素最常用于处理响应数据,例如,检索特定值以供以后使用。

以下列表包含 JMeter 提供的所有后处理器元素 −

  • 正则表达式提取器
  • XPath 提取器
  • 结果状态操作处理程序
  • JSR223 后处理器
  • JDBC 后处理器
  • BSF 后处理器
  • CSS/JQuery 提取器
  • BeanShell 后处理器
  • 调试后处理器

测试元素的执行顺序

以下是测试计划元素的执行顺序 −

  • 配置元素
  • 预处理器
  • 计时器
  • 采样器
  • 后处理器(除非 SampleResult 为空)
  • 断言(除非 SampleResult 为空)
  • 监听器(除非 SampleResult 为空)

jMeter - Web 测试计划

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

启动 JMeter

单击 /home/manisha/apache-jmeter-2.9/bin/jmeter.sh 打开 JMeter 窗口。JMeter 窗口如下所示 −

JMeter GUI

重命名测试计划

Name 文本框中将测试计划节点的名称更改为 Sample Test。您需要将焦点更改为工作台节点并返回到测试计划节点以查看反映的名称。

示例测试

添加线程组

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

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

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

  • 选择要添加的适当选项。

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

线程组已添加
  • 将线程组命名为用户。对于我们来说,此元素表示访问 TutorialsPoint 主页的用户。

线程组用户

添加采样器

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

空采样器

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

带数据的采样器
  • 名称 − 我们将更改名称以反映我们想要实现的操作。我们将其命名为 访问 TutorialsPoint 主页

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

  • 协议 − 我们将保留此空白,这意味着我们希望使用 HTTP 作为协议。

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

添加侦听器

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

要添加侦听器 −

  • 打开上下文菜单

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

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

监听器

运行测试计划

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

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

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

保存测试计划

查看输出

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

查看结果

上述结果的详细信息为 −

  • 名称访问 TutorialsPoint 主页的绿色表示成功。

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

  • 第一个选项卡是 Sampler Results。它显示 JMeter 数据以及 Web 服务器返回的数据。

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

Request Tab

最后一个选项卡是 Response data。在此选项卡中,侦听器以文本格式显示从服务器接收的数据。

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 用户

线程组已添加

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

添加 JDBC 请求

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

  • 右键单击 JDBC 用户元素。

  • 选择 添加 → 配置元素 → JDBC 连接配置

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

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

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

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

    • 用户名:root。

    • 密码:root 密码。

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

JDBC 配置池

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

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

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

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

  • 编辑如下所示的属性 −

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

    • 名称 − 了解。

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

    • 查询类型 −选择语句。

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

JDBC 请求

创建监听器

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

  • 选择 JDBC 用户元素

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

JDBC 测试监听器

保存并执行测试计划

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

验证输出

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

    • 加速期 − 保留默认值 0 秒。

    • 循环计数 − 1

FTP 测试用户

添加采样器 FTP 请求 −

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

  • 选择 FTP 用户元素。

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

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

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

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

FTP 请求获取

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

  • 名称 − FTP 请求获取

  • 服务器名称或 IP − 184.168.74.29

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

  • 本地文件 − sample_ftp.txt

  • 选择 get(RETR)

  • 用户名 − manisha

  • 密码 − manisha123

现在添加另一个 FTP 请求(如上所示)并编辑属性,如以下屏幕截图所示 −

FTP Request Put

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

  • 名称 − FTP Request Put

  • 服务器名称或 IP − 184.168.74.29

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

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

  • 选择 put(STOR)

  • 用户名 − manisha

  • 密码 − manisha123

添加监听器

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

  • 选择 FTP 用户元素。

  • 通过选择"添加">"侦听器">"查看结果树"添加"查看结果树"侦听器。

FTP 测试侦听器

运行测试计划

现在将上述测试计划另存为 ftpsite_test.jmx。使用 运行 → 执行此测试计划Start选项。

查看输出

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

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 - Webservice 测试计划

在本章中,我们将学习如何创建测试计划来测试 WebService。为了进行测试,我们创建了一个简单的 webservice 项目并将其部署在本地 Tomcat 服务器上。

创建 Webservice 项目

为了创建 webservice 项目,我们使用了 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 服务,并在服务器上公开该服务。

publish 方法采用两个参数 −

  • 端点 URL 字符串。

  • Implementor 对象,在本例中为 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("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>

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

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

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

  • 将其另存为 Tomcat 服务器的 webapps 文件夹下的 hello.war 文件。

  • 现在启动 Tomcat 服务器。

  • 服务器启动后,您应该能够使用 URL − 访问 Web 服务http://localhost:8080/hello/hello

创建 JMeter 测试计划

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

重命名测试计划

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

  • 单击测试计划节点。

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

WS 测试计划

添加线程组

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

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

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

    • 名称 − webservice 用户

    • 线程数(用户) − 2

    • 加速期 − 保留默认值 0 秒。

    • 循环计数 − 2

WS Test Users

添加采样器 - 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>
WS 测试请求

添加监听器

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

  • 选择 webservice 用户元素。

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

WS 测试请求

运行测试计划

现在将上述测试计划另存为 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 服务器是否已启动 http://localhost:8161/admin/。如果它要求身份验证,则以 admin 身份输入用户 ID 和密码。屏幕类似如下所示 −

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 监管是否有效

http://localhost:8080/manager/status?XML=true

浏览器中出现身份验证窗口。输入关联的 Tomcat 登录名和密码(在我们的例子中是管理员)。然后,浏览器会显示 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 窗口。

  • 单击测试计划节点。

  • 按照下一步中的说明添加线程组。

添加线程组

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

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

监控测试用户

HTTP 授权管理器

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

  • 选择 HTTP 授权管理器。

  • 编辑以下详细信息 −

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

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

    • 其他字段留空。

HTTP 授权管理器

添加采样器 - HTTP 请求

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

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

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

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

  • 如下图所示编辑以下属性 −

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

    • 名称 −服务器状态

    • 服务器名称或 IP − localhost

    • 端口 − 8080

    • 路径 − /manager/status

    • 参数 − 添加一个大写名为"XML"的请求参数。 给它一个小写的"true"值。

    • 可选任务 −选中采样器底部的"用作监视器"。

监视器测试采样器

添加常量计时器

要定期请求服务器的状态,请添加一个常量计时器,该计时器将允许每次请求之间有一个时间间隔。通过选择"添加 → 计时器 → 常量计时器",将计时器添加到此线程组。

线程延迟框中输入 5000 毫秒。通常,使用短于 5 秒的间隔可能会给服务器增加压力。在生产环境中部署监视器之前,找出可接受的间隔。

Monitor Constant Timer

添加监听器

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

  • 选择线程组元素。

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

  • 指定输出文件的目录和文件名(在我们的例子中,它是 /home/manisha/work/sample.csv)

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

监控结果

运行测试计划

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

查看输出

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

监控测试结果 1

监控测试结果 2

请注意,图表两侧都有标题。左侧是百分比,右侧是死/健康。如果内存线快速上升和下降,则可能表示内存抖动。在这些情况下,最好使用 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 例如确定 确定
threadName 线程组 1-1
dataType 例如文本 文本
success 真或假
failureMessage 如果有
bytes 样本中的字节数 34908
grpThreads 此线程组中的活动线程数 1
allThreads 所有线程组中的活动线程总数组 1
URL http://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 添加 int 数字。
计算 longSum 添加长数字。
计算 Random 生成一个随机数。
计算 RandomString 生成一个随机字符串。
计算 UUID 生成随机类型 4 UUID。
脚本 BeanShell 运行 BeanShell 脚本。
脚本 javaScript 处理 JavaScript (Mozilla Rhino)。
脚本 jexl、jexl2 评估 Commons Jexl表达式。
属性 property 读取属性。
属性 P 读取属性(简写方法)。
属性 setProperty 设置 JMeter 属性。
变量 split 将字符串拆分为变量。
变量 V 评估变量名称。
变量 eval 评估变量表达式。
变量 evalVar 评估存储在变量中的表达式。
字符串 regexFunction 使用正则表达式解析先前的响应。
字符串 escapeOroRegexpChars 引用 ORO 正则使用的元字符表达式。
字符串 char 从数字列表生成 Unicode char 值。
字符串 unescape 处理包含 Java 转义符的字符串(例如 & )。
字符串 unescapeHtml 解码 HTML 编码的字符串。
字符串 escapeHtml 使用 HTML 编码对字符串进行编码。
字符串 TestPlanName 返回当前测试计划的名称。
  • 有两种函数 −

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

    • 内置函数

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

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

  • __V(变量)函数(2.2 之后的版本)可用于执行此操作 − ${__V(Var${N})}。

  • 这种类型的替换可以在没有函数的情况下进行,但不太方便,也不太直观。

在哪里使用函数和变量

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

以下函数应该可以在测试计划 − 中很好地工作

  • intSum
  • longSum
  • machineName
  • BeanShell
  • javaScript
  • jexl
  • random
  • time
  • property 函数
  • log 函数

测试计划中使用的函数有一些限制。在处理函数时,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 的正则表达式提取器。您可以将正则表达式放在测试计划中的任何组件中。

值得强调的是 containsmatches 之间的区别,如在响应断言测试元素 − 上使用的一样

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

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

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

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

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

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

上面的特殊字符是 −

  • () − 它们包含要返回的匹配字符串部分

  • . −匹配任何字符

  • + − 一次或多次

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

创建 JMeter 测试计划

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

首先,我们编写一个 HTML 页面,其中包含人员及其电子邮件 ID 的列表。我们将其部署到我们的 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 页面源代码

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

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

  • 名称 − 管理

  • 服务器名称或 IP − localhost

  • 端口号 − 8080

  • 协议 − 我们将保留此空白,这意味着我们希望 HTTP 作为协议。

  • 路径 − jmeter/index.html

HTTP 请求采样器

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

正则表达式提取器

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

Sr.No 字段和描述
1

Reference Name

将存储提取的测试的变量的名称 (refname)。

2

Regular Expression

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

3

Template

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

4

Match No.

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

5

Default

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

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

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

正则表达式输出

jMeter - 最佳实践

JMeter 有一些限制,尤其是在分布式环境中运行时。遵循这些指导原则将有助于创建真实且持续的负载 −

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

  • 检查范围规则并进行相应设计。

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

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

  • 适当添加监听器。

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

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

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

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

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

    • 不要使用功能模式。

    • 使用 CSV 输出而不是 XML。

    • 仅保存您需要的数据。

    • 尽可能少地使用断言。

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

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

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