目录

jMeter - 快速指南

jMeter - Overview

在进入JMeter的细节之前,让我们先了解一些与任何应用程序测试相关的术语。

  • Performance Test - 此测试在给定的基础架构配置下设置最佳性能预期。 如果在应用程序投入生产之前需要进行任何更改,它还会在测试过程的早期突出显示。

  • Load Test - 此测试主要用于测试系统在其设计的最高负载下运行。

  • Stress Test - 此测试试图通过压倒其资源来破坏系统。

什么是JMeter?

JMeter是一种可以在不同协议或技术上执行负载测试,面向性能的业务(功能)测试,回归测试等的软件。

Apache Software Foundation的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可以通过JDBC,LDAP,JMS,Mail-POP3等对许多不同的服

  • 它是一个独立于平台的工具。 在Linux/Unix上,可以通过单击JMeter shell脚本来调用JMeter。 在Windows上,可以通过启动jmeter.bat文件来调用它。

  • 它具有完整的Swing和轻量级组件支持(预编译的JAR使用包javax.swing。*)。

  • JMeter以XML格式存储其测试计划。 这意味着您可以使用文本编辑器生成测试计划。

  • 其完整的多线程框架允许多个线程进行并发采样,并通过单独的线程组同时对不同函数进行采样。

  • 它具有很强的可扩展性。

  • 它还可用于执行应用程序的自动和功能测试。

JMeter如何工作?

JMeter模拟一组用户向目标服务器发送请求,并通过表,图表等返回显示目标服务器/应用程序的性能/功能的统计信息。

看看下图描绘了JMeter的工作原理 -

JMeter流程

jMeter - Environment

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

系统需求 (System Requirement)

JDK 1.6或以上。
记忆 没有最低要求。
磁盘空间 没有最低要求。
操作系统 没有最低要求。

第1步 - 验证Java安装

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

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

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

OS Output
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,混合模式)

Mac

java版“1.7.0_25”

Java(TM)SE运行时环境(版本1.7.0_25-b15)

Java HotSpot(TM)64位服务器VM(内置23.25-b01,混合模式)

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

第2步 - 设置Java环境

JAVA_HOME环境变量设置为指向计算机上安装Java的基本目录位置。 例如 -

OS Output
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 Output
Windows 附加字符串; C:\Program Files\Java\jdk1.7.0_25\bin到系统变量Path的末尾。
Linux export PATH = $ PATH:$ JAVA_HOME/bin/
Mac 不需要

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

第3步 - 下载JMeter

从http://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 。 现在点击以下 -

OS Output
Windowsjmeter.bat
Linuxjmeter.sh
Macjmeter.sh

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

JMeter GUI

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

jMeter - Build Test Plan

什么是测试计划?

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

编写测试计划

按照下面给出的步骤编写测试计划 -

步骤1 - 启动JMeter窗口

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

JMeter GUI

这是一个简单而空白的JMeter窗口,没有添加任何额外的元素。 它包含两个节点 -

  • Test Plan node - 保存真实测试计划的地方。

  • Workbench node - 它提供了一个临时存储测试元素而不使用的地方,用于复制/粘贴目的。 保存测试计划时,Workbench项目不会随之保存。

第2步 - 添加/删除元素

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

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

例如,让我们将一个Thread Group元素添加到测试计划中,如下所示 -

添加线程组

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

删除元素

第3步 - 加载并保存元素

从文件加载元素 -

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

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

加载元素

要保存树元素 -

  • 右键单击元素。
  • 选择Save Selection As ...选项。

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

第4步 - 配置树元素

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

添加线程组

第5步 - 保存测试计划

您可以使用"Save Test Plan As ...""Save Test Plan As ..."文件”菜单中的"Save Test Plan As ..."来保存整个测试计划。

保存测试计划

第6步 - 运行测试计划

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

运行测试计划

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

第7步 - 停止测试计划

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

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

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

jMeter - Test Plan Elements

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

线程组

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

  • 设置线程数
  • 设置加速时间
  • 设置测试迭代次数

线程组控制面板看起来像这样 -

线程组

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

  • Action to be taken after a Sampler error - 如果在测试执行期间发生任何错误,您可以让测试 -

    • Continue测试中的下一个元素

    • Stop Thread以停止当前线程。

    • 完全Stop Test ,以防您在继续运行之前检查错误。

  • Number of Threads - 模拟服务器应用程序的用户数或连接数。

  • Ramp-Up Period定义JMeter使所有线程运行所需的时间。

  • Loop Count - 定义执行测试的次数。

  • Scheduler checkbox - 选择后,“计划程序配置”部分将显示在控制面板的底部。

  • Scheduler Configuration - 您可以配置运行测试的开始和结束时间。

控制器(Controllers)

JMeter有两种类型的控制器 - SamplersLogic Controllers

Samplers

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

一些有用的采样器是 -

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

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

采样器控制面板

逻辑控制器

逻辑控制器允许您控制线程中采样器的处理顺序。 逻辑控制器可以更改来自其任何子元素的请求的顺序。 一些示例是 - ForEach Controller,While Controller,Loop Controller,IF Controller,Run Time Controller,Interleave Controller,Throughput Controller和Run Once Controller。

以下屏幕截图显示了一个Loop Controller控制面板 -

逻辑控制器面板

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

  • 简单控制器
  • 循环控制器
  • 一次只有控制器
  • 交错控制器
  • 随机控制器
  • 随机顺序控制器
  • 吞吐量控制器
  • 运行时控制器
  • 如果控制器
  • 而控制器
  • 开关控制器
  • ForEach Controller
  • 模块控制器
  • 包括控制器
  • 交易控制器
  • 录音控制器

测试片段

Test Fragment是一种特殊类型的元素,与Thread Group元素位于同一级别。 它与Thread Group的区别在于它不会被执行,除非它被Module Controller或Include_Controller引用。 此元素纯粹用于在测试计划中重复使用代码。

Listeners

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

可以在测试的任何地方添加监听器,包括直接在测试计划下。 他们只会从等级或低于其等级的元素收集数据。 以下列表包括JMeter提供的所有监听器 -

  • 示例结果保存配置
  • Graph Full Results
  • Graph Results
  • Spline Visualizer
  • 断言结果
  • 查看结果树
  • 汇总报告
  • 查看表格中的结果
  • 简单的数据编写者
  • 监控结果
  • 分布图(alpha)
  • 聚合图
  • Mailer Visualizer
  • BeanShell监听器
  • 总结报告

Timers

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

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

  • 恒定时器
  • 高斯随机定时器
  • 统一随机定时器
  • Constant Throughput Timer
  • 同步定时器
  • JSR223 Time
  • BeanShell时间
  • BSF Time
  • Poisson Random Time

以下屏幕截图显示了一个Constant Timer控制面板 -

恒定时间面板

断言(Assertions)

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

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

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

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

响应断言面板

配置元素

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

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

以下列表包含JMeter提供的所有配置元素 -

  • Counter
  • CSV数据集配置
  • FTP请求默认值
  • HTTP授权管理器
  • HTTP缓存管理器
  • HTTP Cookie管理器
  • HTTP代理服务器
  • HTTP请求默认值
  • HTTP标头管理器
  • Java请求默认值
  • 密钥库配置
  • JDBC连接配置
  • 登录配置元素
  • LDAP请求默认值
  • LDAP扩展请求默认值
  • TCP采样器配置
  • 用户定义的变量
  • 简单的配置元素
  • 随机变量

Pre-processor Elements

预处理器元素就是在采样器执行之前运行的东西。 它们通常用于在运行之前修改样本请求的设置,或者更新未从响应文本中提取的变量。

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

  • HTML链接解析器
  • HTTP URL重写修饰符
  • HTTP用户参数修饰符
  • 用户参数
  • JDBC预处理器
  • JSR223预处理器
  • RegEx用户参数
  • BeanShell预处理器
  • BSF预处理器

Post-processor Elements

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

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

  • Regular Expression Extractor
  • XPath Extractor
  • 结果状态操作处理程序
  • JSR223 PostProcessor
  • JDBC PostProcessor
  • BSF PostProcessor
  • CSS/JQuery Extractor
  • BeanShell PostProcessor
  • 调试PostProcessor

测试元素的执行顺序

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

  • 配置元素
  • Pre-Processors
  • Timers
  • Sampler
  • 后处理器(除非SampleResult为null)
  • 断言(除非SampleResult为null)
  • 监听器(除非SampleResult为null)

jMeter - Web Test Plan

让我们构建一个测试网页的简单测试计划。 我们在Apache JMeter中编写了一个测试计划,以便我们可以测试URL所显示的Web页面的性能 - http://www.iowiki.com/

启动JMeter

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

JMeter GUI

重命名测试计划

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

样品测试

添加线程组

现在我们在窗口中添加第一个元素。 我们添加一个Thread Group,它是所有其他元素(如Samplers,Controllers和Listeners)的占位符。 我们需要一个,因此我们可以配置要模拟的用户数量。

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

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

  • 选择要添加的相应选项。

  • 右键单击Sample Test(我们的测试计划)> Add> Threads(Users)> Thread Group。 因此,线程组将添加到测试计划(样本测试)节点下。

线程组已添加
  • 将线程组命名为Users 。 对我们来说,这个元素意味着访问IoWiki主页的用户。

重命名为Thread Group

添加采样器

我们需要在T​​hread Group(Users)中添加一个Sampler。 正如之前为添加Thread组所做的那样,这次我们将通过右键单击打开Thread Group(Users)节点的上下文菜单,我们将通过选择Add> Sampler> HTTP request选项添加HTTP Request Sampler。

HTTP请求

它将在Thread Group(Users)节点下添加一个空的HTTP Request Sampler。 让我们配置这个节点元素 -

HTTP请求
  • Name - 我们将更改名称以反映我们想要实现的操作。 我们将其命名为Visit IoWiki Home Page

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

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

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

添加监听器

我们现在将添加一个监听器。 让我们在Thread Group(User)节点下添加View Results Tree Listener。 它将确保在此Listener节点元素中可以查看Sampler的结果。

添加监听器 -

  • 打开上下文菜单
  • 右键单击线程组(用户)
  • 选择Add> Listener> View Results Tree选项
倾听者

运行测试计划

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

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

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

保存测试计划

查看输出

我们将线程组的设置保持为单线程(仅一个用户)并循环一次(仅运行一次),因此我们将在View Result Tree Listener中获得一个事务的结果。

查看结果

上述结果的详情如下 -

  • 名称Visit IoWiki Home Page绿色表示成功。

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

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

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

请求标签

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

响应选项卡

这只是一个只执行一个请求的简单测试计划。 但JMeter的真正优势在于发送相同的请求,就好像许多用户正在发送它一样。 要测试具有多个用户的Web服务器,我们需要更改“线程组(用户)”设置。

jMeter - Database Test Plan

在本章中,我们将了解如何创建一个简单的测试计划来测试数据库服务器。 为了我们的测试目的,我们使用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。

添加用户

要创建一个Thread组,

  • 右键单击“测试计划”。
  • 选择“添加”>“线程(用户)”>“线程组”。
  • 因此,线程组将添加到“测试计划”节点下。
  • 将此线程组重命名为JDBC Users
线程组已添加

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

添加JDBC请求

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

  • 右键单击JDBC Users元素。

  • 选择“ Add 》 Config Element 》 JDBC Connection Configuration

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

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

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

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

    • 用户名:root。

    • 密码:root的密码。

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

JDBC配置池

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

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

  • 选择Add 》 Sampler 》 JDBC Request.

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

  • 编辑属性,如下所示 -

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

    • 姓名 - 学习。

    • 输入池名称 - 测试(与配置元素中的相同)。

    • 查询类型 - 选择语句。

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

JDBC请求

创建监听器

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

  • 选择JDBC Users元素

  • 添加视图结果树侦听器( Add 》 Listener 》 View Results Tree )。

JDBC测试监听器

保存并执行测试计划

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

验证输出 (Verify the Output)

JDBC测试输出1JDBC测试输出2JDBC测试输出3

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

jMeter - FTP Test Plan

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

重命名测试计划

  • 单击/home/manache/apache-jmeter-2.9/bin/jmeter.sh打开JMeter窗口
  • 单击“测试计划”节点。
  • 将此测试计划节点重命名为TestFTPSite。

添加线程组

添加一个Thread Group,它是所有其他元素(如Samplers,Controllers和Listeners)的占位符。

  • 右键单击TestFTPSite(我们的测试计划)
  • 选择“添加”>“线程(用户)”>“线程组”。 线程组将添加到测试计划(TestFTPSite)节点下。
  • 修改线程组的默认属性以适合我们的测试,如下所示 -
    • Name - FTPusers

    • Number of Threads (Users) - 4

    • Ramp-Up Period - 保留默认值0秒。

    • Loop Count - 1

FTP测试用户

添加采样器 - FTP请求

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

  • 选择FTPusers元素。
  • 右键单击鼠标按钮以获取“添加”菜单
  • 选择添加>采样器> FTP请求。
  • 在树中选择FTP Request元素。
  • 编辑以下属性,如下所示 -
FTP请求获取

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

  • Name - FTP请求获取

  • Server Name or IP - 184.168.74.29

  • Remote File - /home/manisha/sample_ftp.txt

  • Local File - sample_ftp.txt

  • 选择get(RETR)

  • Username - manisha

  • Password - manisha123

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

FTP请求

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

  • Name - FTP请求放置

  • Server Name or IP - 184.168.74.29

  • Remote File - /home/manisha/examplefile.txt

  • Local File - /home/manisha/work/examplefile.txt

  • 选择放(STOR)

  • Username - manisha

  • Password - manisha123

添加监听器

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

  • 选择FTPusers元素。
  • 选择“添加”>“侦听器”>“查看结果树”,添加“查看结果树”侦听器。
FTP测试监听器

运行测试计划

现在将上述测试计划保存为ftpsite_test.jmx 。 使用Run 》 Start选项执行此测试计划。

查看输出

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

FTP获取Result1FTP测试结果2FTP放置结果FTP获取结果

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

jMeter - Webservice Test Plan

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

创建Webservice项目

要创建Web服务项目,我们使用了Eclipse IDE。 首先在com.iowiki.ws包下编写服务端点接口HelloWorld 。 HelloWorld.java的内容如下 -

package com.iowiki.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.iowiki.ws包下创建实现类HelloWorldImpl.java

package com.iowiki.ws;
import javax.jws.WebService;
@WebService(endpointInterface="com.iowiki.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.iowiki.endpoint;
import javax.xml.ws.Endpoint;
import com.iowiki.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.iowiki.ws.HelloWorldImpl" url-pattern="/hello"/>
</endpoints>

现在所有文件都准备好了,目录结构看起来如下面的屏幕截图所示 -

Webservice Dir结构
  • 现在创建此应用程序的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。
WS测试计划

添加线程组

添加一个Thread Group,它是所有其他元素(如Samplers,Controllers和Listeners)的占位符。

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

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

    • Name - webservice用户

    • Number of Threads (Users) - 2

    • Ramp-Up Period - 保留默认值0秒。

    • Loop Count - 2

WS测试用户

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

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

我们将添加SOAP/XML-RPC Request元素 -

  • 右键单击鼠标按钮以获取“添加”菜单。
  • 选择Add> Sampler> SOAP/XML-RPC Request。
  • 在树中选择SOAP/XML-RPC Request元素
  • 编辑以下属性,如下图所示 -
  • 在此元素中输入以下详细信息 -
    • Name − SOAP/XML-RPC Request

    • URL - http:// localhost:8080/hello/hello?wsdl

    • Soap/XML-RPC Data - 输入以下内容

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:web="http://ws.iowiki.com/">
   <soapenv:Header/>
   <soapenv:Body>
      <web:getHelloWorldMessage>
         <arg0>Manisha</arg0>
      </web:getHelloWorldMessage>
   </soapenv:Body>
</soapenv:Envelope>
WS测试请求

添加监听器

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

  • 选择webservice用户元素。

  • 选择“添加”>“侦听器”>“查看结果树”,添加“查看结果树”侦听器。

WS测试请求

运行测试计划

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

查看输出

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

WS样本结果WS结果请求WS响应数据

在最后一张图片中,您可以看到响应消息“Hello Manisha to JAX WS world”。

jMeter - JMS Test Plan

在本章中,我们将学习如何编写一个简单的测试计划来测试Java Messaging Service(JMS)。 JMS支持两种类型的消息传递 -

  • Point-to-Point messaging - 队列消息传递通常用于发送方期望响应的事务。 消息传递系统与普通HTTP请求完全不同。 在HTTP中,单个用户发送请求并获得响应。

  • Topic messaging - 主题消息通常称为发布/订阅消息。 主题消息传递通常用于消息由生产者发布并由多个订阅者使用的情况。

让我们看看每个这样的测试示例。 测试JMS的先决条件是 -

  • 我们在示例中使用Apache ActiveMQ。 有各种JMS服务器,如IBM WebSphere MQ(以前称为MQSeries),Tibco等。 从Apache ActiveMQ网站的二进制文件中下载它

  • 解压缩归档文件,转到解压缩目录,然后从命令控制台运行以下命令以启动ActiveMQ服务器 -

.\bin\activemq  start

您可以通过访问位于以下地址http://localhost:8161/admin/的管理界面来验证ActiveMQ服务器是否已启动。 如果要求进行身份验证,请输入用户ID和密码作为admin 。 屏幕类似如下所示 -

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

通过上述设置,让我们为 - 构建测试计划 -

jMeter - Monitor Test Plan

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

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

  • 与压力测试一起使用,监视器提供有关服务器性能的其他信息。

  • 监视器使您可以更轻松地查看服务器性能与客户端响应时间之间的关系。

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

我们需要Tomcat 5或更高版本进行监控。 出于测试目的,我们将监控Tomcat 7.0.42服务器。 您可以测试任何支持Java Management Extension(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>

我们需要更改此部分以添加admin角色,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>

现在为Linux启动tomcat服务器 /bin/startup.sh,为Windows启动 /bin/startup.bat。 启动后,通过在浏览器中输入以下链接来检查Tomcat监管是否有效 -

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

验证窗口出现在浏览器中。 输入关联的tomcat登录名和密码(在我们的例子中是admin)。 然后,浏览器显示Tomcat的执行状态如下 -

Tomcat Manager状态

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

  • 在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窗口。
  • 单击“测试计划”节点。
  • 按照下一步中的说明添加线程组。

添加线程组

  • 右键单击Test Plan 》 Add 》 Threads(Users) 》 Thread Group 。 线程组将添加到“测试计划”节点下。

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

监控测试用户

HTTP授权管理器

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

  • 选择HTTP授权管理器。

  • 编辑以下详细信息 -

    • Username - admin(取决于tomcat-users.xml文件中的配置)

    • Password - admin(取决于tomcatusers.xml文件中的配置)

    • 其他字段留空。

http授权经理

添加Sampler-HTTP请求

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

  • 右键单击鼠标按钮以获取“添加”菜单。
  • 选择添加>采样器> HTTP请求。
  • 然后,在树中选择HTTP Request元素。
  • 编辑以下属性,如下图所示 -
  • 在此元素中输入以下详细信息 -
    • Name - 服务器状态

    • Server Name or IP - localhost

    • Port - 8080

    • Path - /经理/状态

    • Parameters - 以大写形式添加名为“XML”的请求参数。 以小写字母赋予值“true”。

    • Optional Tasks - 选中采样器底部的“用作监视器”。

监控测试采样器

添加一个恒定计时器

要定期请求服务器的状态,请添加一个Constant Timer,它将允许每个请求之间的时间间隔。 通过选择Add> Timer> Constant Timer为该线程组添加一个定时器。

在“ Thread Delay框中输入5000毫秒。 通常,使用短于5秒的间隔可能会给服务器增加压力。 在生产环境中部署监视器之前,请确定可接受的时间间隔。

监视常量计时器

添加监听器

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

  • 选择线程组元素。

  • 添加Simple Data Writer侦听器添加>侦听器>简单数据写入器。

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

监控简单数据编写器
  • 让我们通过选择测试计划元素Add> Listener> Monitor Results来添加另一个监听器。

监控结果

运行测试计划

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

查看输出

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

监控测试结果1监控测试结果2

请注意,图表的两侧都有字幕。 左边是百分比,右边是死/健康。 如果内存线快速上升和下降,则可能表示内存抖动。 在这些情况下,最好使用Borland OptimizeIt或JProbe来分析应用程序。 您想要看到的是加载,内存和线程的常规模式。 任何不稳定的行为通常表示性能不佳或某种错误。

jMeter - Listeners

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

  • tree
  • tables
  • graphs
  • 日志文件

当指定一个侦听器时,所有侦听器都将相同的原始数据写入输出文件。

默认配置

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

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

jmeter.save.saveservice.output_format=
  • 通过使用Config弹出窗口,如下面的屏幕截图所示 -

JMeter配置PopUp

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

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

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

在运行时 -

  • GUI mode - 使用侦听器Simple Data Writer

  • non-GUI mode - -l标志可用于创建数据文件。

如果有大量样本,听众可以使用大量内存。 要最小化所需的内存量,请使用CSV格式的简单数据写入。

CSV日志格式

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

领域 描述 价值范例
timeStamp 自1970年1月1日以来的毫秒数 1354223881017
elapsed 以毫秒为单位 1858
label 采样器标签 HTTP请求
responseCode 例如200,404 200
responseMessage 好的 OK
threadName 线程组1-1
dataType 例如文字 text
success 对或错 true
failureMessage 如果有的话
bytes 样本中的字节数 34908
grpThreads 此线程组中的活动线程数 1
allThreads 所有组中活动线程的总数 1
URLhttp://iowiki.com
Filename 如果使用保存响应文件
latency 第一次回应的时间 132
encodingutf-8
SampleCount 样本数量(1,除非聚合多个样本) 1
ErrorCount 错误数量(0或1,除非聚合多个样本) 0
Hostname 样本生成的地方 LaptopManisha
IdleTime '空闲'时间的毫秒数(通常为0)
Variables 如果指定

保存响应数据

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

Loading (reading) response data

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

保存监听器GUI数据

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

  • 选择“编辑”>“另存为图像”,在左侧面板中选择侦听器。 出现文件对话框。

  • 输入所需的名称。

  • 保存监听器。

jMeter - 函数

JMeter函数和用户变量

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

  • 函数调用看起来像这样 -

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

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

${__time(EEE\, d MMM yyyy)}
  • 变量引用为 -
${VARIABLE}

功能列表 (List of Functions)

下表列出了一组松散地分为类型的函数 -

功能类型 名称 评论
InformationthreadNum 获取线程编号。
InformationsamplerName 获取采样器名称(标签)。
InformationmachineIP 获取本地计算机的IP地址。
InformationmachineName 获取本地计算机名称。
Informationtime 以各种格式返回当前时间。
Informationlog 记录(或显示)消息(并返回值)。
Informationlogn 记录(或显示)消息(空返回值)。
InputStringFromFile 从文件中读取一行。
InputFileToString 阅读整个文件。
InputCSVRead 从CSV分隔文件中读取。
InputXPath 使用XPath表达式从文件中读取。
Calculationcounter 生成递增数字。
CalculationintSum 添加int数字。
CalculationlongSum 添加长号。
CalculationRandom 生成一个随机数。
CalculationRandomString 生成随机字符串。
CalculationUUID 生成随机类型4 UUID。
ScriptingBeanShell 运行BeanShell脚本。
ScriptingjavaScript 处理JavaScript(Mozilla Rhino)。
Scriptingjexl, jexl2 评估Commons Jexl表达式。
Propertiesproperty 阅读一处房产。
PropertiesP 阅读一个属性(速记方法)。
PropertiessetProperty 设置JMeter属性。
Variablessplit 将字符串拆分为变量。
VariablesV 评估变量名称。
Variableseval 评估变量表达式。
VariablesevalVar 评估存储在变量中的表达式。
StringregexFunction 使用正则表达式解析先前的响应。
StringescapeOroRegexpChars 引用ORO正则表达式使用的元字符。
Stringchar 从数字列表生成Unicode char值。
Stringunescape 包含Java转义的进程字符串(例如\ n&\ t)。
StringunescapeHtml 解码HTML编码的字符串。
StringescapeHtml 使用HTML编码对字符串进行编码。
StringTestPlanName 返回当前测试计划的名称。
  • 有两种功能 -

    • 用户定义的静态值(或变量)
    • 内置功能
  • 用户定义的静态值允许用户在编译并提交运行测试树时定义要用其静态值替换的变量。

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

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

  • 这种类型的替换可以在没有功能的情况下进行,但是不太方便且不太直观。

在哪里使用函数和变量

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

以下功能应该可以在测试计划中正常运行 -

  • intSum
  • longSum
  • machineName
  • BeanShell
  • javaScript
  • jexl
  • random
  • time
  • property functions
  • 日志功能

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

引用变量和函数 (Referencing Variables and Functions)

  • 通过将变量名称括在'$ {'和'}'中来引用测试元素中的变量。

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

  • 有些函数使用参数来配置它们,这些函数用括号括起来,用逗号分隔。 如果函数不带参数,则可以省略括号。 例如 -

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

SCRIPT     vars.put("name","value")
  • 然后可以引用该脚本如下 -

${__BeanShell(${SCRIPT})}

功能助手对话框

函数助手对话框可从JMeter的Options卡中获得。

  • 使用Function Helper,您可以从下拉列表中选择一个函数,并为其参数赋值。 表中的左列提供了参数的简要描述,右列是您为该参数写入值的位置。 不同的功能有不同的论点。

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

Pre-defined Variables

一些变量由JMeter在内部定义。 他们是 -

  • COOKIE_cookiename - 包含cookie值。

  • JMeterThread.last_sample_ok - 最后一个样本是否正常 - 是/否。 注意 - 在运行PostProcessors和Assertions后更新。

  • START变量。

Pre-defined Properties

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

  • START.MS - JMeter开始时间(以毫秒为单位)。
  • START.YMD - JMeter的开始时间为yyyyMMdd。
  • START.HMS - JMeter开始时间为HHmmss。
  • TESTSTART.MS - 以毫秒为单位测试开始时间。

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

jMeter - Regular Expressions

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

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

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

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

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

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

  • matches表示正则表达式与整个目标匹配。 因此''字母'与'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页面

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

从下面的快照中可以看出,第二个人的ID被

和 td>包围,它是具有这种模式的第二行数据。 我们可以使用它来匹配我们想要从中提取信息的确切模式。 由于我们想从这个页面提取两条信息,人员ID和人名,这些字段定义如下 - HTML页面源代码

启动JMeter,添加一个线程组Test Plan 》 Add》 Threads(Users)》 Thread Group

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

  • Name - 管理

  • Server Name or IP - localhost

  • Port Number - 8080

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

  • Path - jmeter/index.html

HTTP请求采样器

接下来,添加正则表达式提取器。 选择HTTP Request Sampler(Manage),右键单击Add 》 Post Processor 》 Regular Expression Extractor

正则表达式提取器

下表提供了上述屏幕截图中使用的字段的说明 -

在我们的例子中,表达式是 -
领域 描述
参考名称 将存储提取的测试的变量的名称(refname)。
正则表达式 要提取的文本将与之匹配的模式。 将提取的文本组由字符'('和')'括起来。 我们用'。+?' 指示 .. td>标记所包含的文本的单个实例。 (+?) td>\s * (+?) td>\s *
Template 每组提取的文本作为变量Person的成员放置,遵循由'('和')'包围的每组模式的顺序。 每个组都存储为refname_g#,其中refname是您输入的字符串作为引用名称,#是组号。 $ 1 $表示组1,$ 2 $表示组2等。$ 0 $表示整个表达式匹配的任何内容。 在此示例中,我们提取的ID保留在Person_g1中,而Name值保存在Person_g2中。
比赛号码 由于我们计划仅提取此模式的第二次出现,匹配第二个志愿者,我们使用值2.值0将进行随机匹配,而负值需要与ForEach控制器一起使用。
Default 如果找不到该项,则这将是默认值。 这是个可选的选项。 你可以留空。

添加侦听器以捕获此测试计划的结果。 右键单击“线程组”,然后选择“添加”>“侦听器”>“查看结果树”选项以添加侦听器。

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

正则表达式输出

jMeter - Best Practices

JMeter有一些限制,特别是在分布式环境中运行时。 遵循这些准则将有助于创造真实和持续的负荷 -

  • 使用多个JMeter实例,以防线程数更多。

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

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

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

  • 适当添加听众。

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

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

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

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

    • 而不是使用大量类似的采样器,在循环中使用相同的采样器,并使用变量(CSV数据集)来改变样本。 或者也许使用Access Log Sampler。

    • 不要使用功能模式。

    • 使用CSV输出而不是XML。

    • 仅保存您需要的数据。

    • 使用尽可能少的断言。

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

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

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

↑回到顶部↑
WIKI教程 @2018