1.简介
JMeter是一种应用程序,它提供了多种可能性,可以使用不同的技术和协议来配置和执行负载,性能和压力测试。
它允许针对所有类型的数据库,FTP,HTTP,HTTPS或其他类型的服务器模拟不同类型的请求。
简要解释所有这些概念的含义可能是一件好事:
负载测试:这种测试可以使测试的系统或应用程序达到设计和要求的极限。它们用于测量极端条件下的系统和应用程序行为。
性能测试:这些测试用于检查系统在性能方面的行为,即系统如何响应以及特定工作负载的稳定性。
压力测试:这些测试试图通过加载更多资源并使模块超出设计的限制来破坏或破坏系统。
JMeter最初旨在测试Web应用程序,但其功能已得到扩展,如今,它可以针对几乎所有类型的程序进行测试,并可用于在您的应用程序中执行功能测试。
2.使用的技术
JMeter是Java桌面应用程序。它的UI使用Swing Java API实现。由于这两点,JMeter是多平台的,可以在装有Java虚拟机的任何类型的计算机中运行:Windows,Linux,Mac。
它的框架允许并发和执行多个线程和线程组。在尝试配置负载和压力测试时,这非常有用。
它是可扩展的,并且有大量可用的插件。
JMeter是Apache软件基金会的一部分,并且是完全免费和开源的(http://www.apache.org/licenses/)。
3.这篇文章是关于什么的?
本文是有关如何在没有JMeter经验的情况下为开发人员和软件工程师使用JMeter的教程。
它还提供了有关不同可能配置和测试计划的示例以及操作方法。在下一章中,我们将了解如何安装JMeter以及如何配置,运行,存储和分析不同类型的测试计划的结果。
4.安装
您需要执行以下步骤才能在计算机上安装并运行JMeter:
首先,您必须安装Java。您的计算机中需要安装JRE 1.6或更高版本。为此,只需访问Oracle下载站点并安装适合您的系统的软件包:http : //www.oracle.com/technetwork/java/javase/downloads/index.html。
将
JAVA_HOME
环境变量设置为指向计算机上安装Java的基本目录位置。对于Windows用户:
JAVA_HOME=C:\Program Files\Java\jdk1.8.0_20
或任何Java版本。
将Java编译器位置附加到系统路径。对于Windows用户:
C:\Program Files\Java\jdk1.7.0_25\bin
到系统变量Path的末尾。
通过转到命令行并键入以下内容来检查计算机中是否已安装Java:
java -version
应该出现以下内容:
java version ``"1.8.0_20"``Java(TM) SE Runtime Environment (build 1.8.0_20-b26)``Java HotSpot(TM) 64-Bit Server VM (build 25.20-b23, mixed mode)
从http://jmeter.apache.org/download_jmeter.cgi下载最新版本的JMeter
C:\>JMeter
例如,将其提取到文件夹中(在Windows中)。该文件夹的结构应类似于:
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
然后,您可以通过转到文件夹
C:\jmeter\apache-jmeter-2.11\bin
(Windows用户)并启动程序来启动JMeterjmeter.bat
。您应该看到JMeter GUI的开始屏幕:
5. GUI概述
JMeter GUI非常直观且易于使用,提供了用于文件处理的常用菜单,如新建,打开,保存,另存为等,以及用于启动和停止测试计划以及配置它们的特定菜单。通过单击鼠标右键,每个测试计划,线程组和测试计划节点(我们将在下一章中详细介绍)将提供不同的上下文菜单选项。
也可以更改UI的语言,并且可以使用多种语言。
正如我们所说,GUI非常直观,易于使用,并且为每个菜单和操作提供了非常易懂的工具提示。这是JMeter如此广泛使用的原因,除了其质量以外,因为它真的很容易理解和学习如何使用它。
6.可用请求
JMeter为几乎所有类型的系统提供测试配置,但通常开箱即用地涵盖以下协议:
Web:HTTP,HTTPS网站“ Web 1.0” Web 2.0(ajax,flex和flex-ws-amf):之后我们将看到如何测试潜在的网页及其行为。
Web服务:SOAP / XML-RPC。
通过JDBC驱动程序的数据库。几乎支持任何种类的数据库,您只需要一个合适的驱动程序,并将其打包在JMeter安装目录中的相应文件夹中即可。之后,我们将举一个MySQL数据库测试的例子。
目录:LDAP。
通过JMS的面向消息的服务
使用POP3,IMAP,SMTP的邮件服务。
FTP服务。
使用JUnit和Java应用程序进行功能测试。
7.测试计划和组成
基本上,使用JMeter包括测试计划的创建,配置和执行以及结果的分析。测试计划是针对本地或远程服务器(或客户端)的请求集,这些服务器被配置为按照特定说明运行。
在测试计划的配置中,您可以指定几个输入和输出参数,并且可以配置应满足的基本条件,以便测试计划成功与否。
JMeter测试计划由不同的组件组成。这是最重要的列表,其中包含有关如何使用JMeter UI添加它们以及它们的目的的说明:
7.1线程组
线程组基本上是不同测试计划元素的组合。它是测试计划的基础,它控制基本的中心参数。
为了创建测试计划,您可能必须首先创建一个线程组并配置其线程数,加速周期,循环计数以及万一出现错误的行为:
线程数:将用于执行测试计划的线程数,对于配置负载和压力测试非常重要。
加速期: JMeter需要启动所有线程的时间。
循环计数:迭代次数,即测试将要执行的次数。
错误行为:出现错误时该怎么办:停止当前线程,停止整个测试,继续…
线程组还具有开始和结束时间配置选项。通过单击复选框“ Scheduler”,将出现一个带有计划参数的新部分,您可以配置测试的开始和结束时间。
配置完成后,您可以开始将其他测试计划元素(例如采样器,侦听器和计时器)添加到线程组。我们将在下一章中解释所有这些。
7.2采样器
采样器用于将请求发送到不同类型的服务器。它们是每个测试计划的基本元素,所有工作都围绕着它们进行:它们执行请求(基于提供的配置),并且这些请求产生一个或多个响应,然后进行分析。这是JMeter中可用的采样器列表(我们将在本教程中看到其中的一些采样器):
访问日志采样器
AJP采样器
豆壳采样器
BSF采样器
调试采样器
FTP采样器
HTTP采样器
Java采样器
JDBC采样器
JMS(几个)采样器
JSR223采样器
JUnit采样器
LDAP(几个)采样器
邮件阅读器
MongoDB采样器
操作系统进程采样器
SMTP取样器
肥皂
TCP采样器
测试动作
正如我们在上面的列表中看到的那样,有很多不同类型的采样器。此列表不完整,因为在不同的JMeter插件中实现了多个采样器。每个采样器的配置取决于其执行的请求,这意味着某些采样器具有共同点,但其他采样器由于其请求的性质而完全不同。
7.3逻辑控制器
逻辑控制器是允许您配置线程组内不同采样器的执行顺序的元素。此列表包含JMeter中所有可用的逻辑控制器:
简单控制器
回路控制器
一次性控制器
交错控制器
随机控制器
随机顺序控制器
吞吐量控制器
运行时控制器
如果控制器
当控制器
开关控制器
每个控制器
模块控制器
包含控制器
交易控制器
录音控制器
7.4听众
侦听器提供了不同的方式来查看采样器请求所产生的结果。侦听器以表,树或纯日志文件的形式解析结果。
可以将它们添加到测试计划中的任何位置,但是它们只会解析和收集采样器级别或以下级别的结果数据。
这些是JMeter中可用的侦听器:
样本结果保存配置
图形完整结果
图形结果
样条可视化器
断言结果
查看结果树
汇总报告
查看表中的结果
简单数据写入器
监控结果
分布图(alpha)
聚合图
Mailer Visualizer
BeanShell侦听器
总结报告
7.5计时器
您可以使用计时器定义两次请求之间要等待的时间。如果您未指定任何请求,JMeter将在当前请求完成后立即执行下一个请求,而不会等待任何时间。
JMeter中提供以下计时器:
恒定计时器
高斯随机计时器
统一随机计时器
恒定吞吐量计时器
同步计时器
JSR223时间
BeanShell时间
BSF时间
泊松随机时间
7.6断言
断言通过验证采样器请求产生的响应来确认测试计划的有效性。断言基本上与单元测试断言相似,并检查已测试应用程序响应的质量。您可以为每种测试计划配置哪种断言处于活动状态。
这是JMeter中可用断言的列表:
豆壳断言
BSF断言
比较断言
JSR223断言
回应断言
持续时间断言
大小断言
XML断言
BeanShell断言
MD5Hex断言
HTML断言
XPath断言
XML模式声明
7.7配置节点
您可以使用配置元素将不同的参数传递给采样器请求。它们提供了一种创建变量的方法(不同的和动态的),以后可以由采样器使用。它们在执行采样器之前在其所属节点的开头执行,这就是为什么采样器可以依赖这些变量的原因。
这是可以在JMeter中使用的所有配置节点的列表:
计数器
CSV数据集配置
FTP请求默认值
HTTP授权管理器
HTTP缓存管理器
HTTP Cookie管理器
HTTP代理服务器
HTTP请求默认值
HTTP标头管理器
Java请求默认值
密钥库配置
JDBC连接配置
登录配置元素
LDAP请求默认值
LDAP扩展请求默认值
TCP采样器配置
用户定义的变量
简单的配置元素
随机变量
7.8预处理器
预处理器是在执行采样器之前将要发生的元素(动作,断言或基本上任何东西)。它们可用于从响应中提取变量,然后可通过配置元素在采样器中使用。
这些是可以用作预处理器的元素:
HTML链接解析器
HTTP URL重写修饰符
HTTP用户参数修改器
用户参数
JDBC预处理器
JSR223预处理器
RegEx用户参数
BeanShell预处理器
BSF预处理器
7.9后处理器
基本上是在采样器执行完成之后执行的元素。它可以用于解析响应数据并提取以后可以使用的值。
这些元素可以用作后处理器:
正则表达式提取器
XPath提取器
结果状态动作处理程序
JSR223后处理器
JDBC后处理器
BSF后处理器
CSS / JQuery提取器
BeanShell后处理器
调试后处理器
8.测试计划元素的执行顺序
始终以以下方式对测试计划元素进行排序和执行:
1 –配置节点2 –预处理器3 –计时器4 –采样器5 –后处理器(仅在有结果可用时执行)6 –断言(仅在有结果可用时执行)7 –侦听器(仅在有结果可用时执行) )
值得一提的是,一个测试计划可以在其中包含一个或多个测试计划,这是按功能或技术逻辑将测试分组在一起的一种常见做法。
9.运行/停止测试计划
要运行测试计划,您只需单击"Play"
按钮:
单击按钮可以开始测试并忽略所有暂停 "Play no pauses"
您可以通过单击"Stop"
按钮来停止测试:
也可以禁用执行测试计划。为此,您只需要“调整”测试计划的状态即可:
从上面的屏幕截图中可以看到,禁用的计划以灰色呈现,无法执行,但可以对其进行修改或重新配置。
10. Web(HTTP)测试计划
在本章中,我们将了解如何创建计划以通过HTTP测试特定的网页。为此,我将使用http://www.wikipedia.org网站。
足够多的理论,现在我们将了解如何配置HTTP请求测试计划。
将测试计划重命名为您喜欢的名称
在此步骤中,可以以一般方式配置影响线程行为的测试计划,并且可以添加应使用的外部库。在此示例中,我们将不这样做。
添加线程组
在此步骤中,您需要创建一个线程组,负责执行测试的所有组件并配置其主要属性:线程数,以秒为单位的加速周期以及迭代次数。
测试计划上的上下文菜单->添加->线程->线程组
您还可以指定发生错误时要执行的操作(继续,停止,停止当前线程…)
添加采样器HTTP请求
在这一步中,我们将向采样器添加要测试的HTTP请求的信息:
添加采样器-> HTTP请求
我们需要为这种类型的请求设置不同的属性:
将服务器名称设置为我们要测试的服务器的名称:在这种情况下,www.wikipedia.org(无http或https协议)。如果需要的话,您应该修改端口,协议,要在服务器中执行的方法等的连接值(如果不需要)。还有多个参数可用于配置代理,超时和不同的标头信息,但在我们的情况下,我们将所有内容保留为默认值
添加结果监听器
这是必须的,以便以后可以看到结果。如本教程之前所见,有几种可能性,对于我们的HTTP请求测试计划,我们将使用“查看结果树”:
添加侦听器->查看结果树
对于我们的示例,我们不会在此进行任何更改,而将所有配置属性保留为默认值。
保存测试计划并运行
File-> Save(或单击“ Control + s”)
运行->开始(或按前面所述点击播放)
在侦听器中检查结果
我们可以看到所有请求均已按预期完成,并且所有请求都提供了有意义的响应,因此似乎我们正在测试的网页可以正常工作(如果这是预期的行为)。我们可以处理结果并检查所有返回的数据。
我们已经配置了一个测试计划,该计划将束或请求发送到给定的服务器并解析响应。现在,我们将看到如何使用其他类型的测试组件,例如计时器和断言。
添加计时器
为了添加一个计时器,我们只需右键单击测试计划并添加一个计时器:
添加计时器->恒定计时器
并且我们将其配置为500毫秒。最后一个请求完成后,每个请求将等待500毫秒。
添加持续时间断言
在测试计划上,右键单击并添加持续时间断言,如果响应时间超过100毫秒,我们将其配置为断言false,并且仅将其配置为用于主样本:
添加断言->持续时间断言
如果重新运行测试计划(保存后),我们将发现此断言存在一些问题:
发生这种情况很简单,因为我们将持续时间断言仅配置为100毫秒,如果将这个数字更改为2000毫秒,则几乎所有请求都将按时处理。
添加大小断言
添加断言->大小断言
并且我们确保响应的大小大于5000字节:
如果运行测试,我们将看到响应始终大于该响应,如果发生错误响应,则大小可能会更小,并且我们的断言将失败。
11.数据库测试计划教程
现在,我们将了解如何配置,运行和分析针对MySQL数据库的测试结果。这个示例是关于MySQL的,但是可以使用任何其他类型的数据库(如Oracle,MongoDB或其他数据库)来完成。
安装MySQL
如果您的计算机中未安装MySQL,则可以从http://dev.mysql.com/downloads/下载并安装MySQL服务器,这非常容易。
下载MySQL驱动程序
下载mysql connector(mysql-connector-java-5.1.6
)并将其复制到jmeter的lib目录中C:\jmeter\apache-jmeter-2.11\lib
。
启动MySQL
启动数据库服务器,以便您可以对其进行查询。
建立资料库
您可以根据需要创建数据库,这只是一个非常简单的数据库的示例:
create database jmeter;``use jmeter;``create table jmeter_stuff(``id` `int, name varchar(50), description varchar(50));``insert into jmeter_stuff(``id``, name, description)VALUES(1, ``"dani"``, ``"the boss"``);``insert into jmeter_stuff(``id``, name, description)VALUES(2, ``"topo"``, ``"the worker"``);``insert into jmeter_stuff(``id``, name, description)VALUES(3, ``"tupac"``, ``"the other"``);
创建测试计划
执行与上一章相同的操作,以使用新的线程组,JDBC配置类型的新配置元素和JDBC类型的新请求(采样器)创建测试计划,还添加一个侦听器以解析和查看结果与前面示例中的结果相同。唯一的区别是采样器的类型,在本例中为JDBC采样器。
JDBC采样器
给变量绑定池赋予一个有意义的名称,并编写一些SQL语句:
select` `* from jmeter_stuff;
JDBC连接配置
将新的JDBC连接配置添加到采样器。
右键单击JDBC采样器->添加连接配置
如下更改参数:
Variable Bound to Pool= same name as ``in` `the sampler``Database URl=jdbc:mysql:``//localhost``:3306``/jmeter``JDBC Driver class=com.mysql.jdbc.Driver``username=``password=``set` `username and password to your MySql credentials.
保存计划并执行。
使用之前配置的侦听器查看结果。
您可以按照与HTTP请求测试计划相同的方式来验证和检查输出,还可以添加预处理器,后处理器,断言或您可能需要的任何其他类型的元素。
在这种情况下,输出是select语句的结果。
您也可以通过在采样器配置中更改SQL语句来使用这种采样器来更新数据。
以下屏幕截图是有关请求响应结果的基本信息:
在本章中,我们将解释如何将JMeter与JUnit结合使用。从负载和性能的角度来看,这提供了非常强大的机制来执行功能测试。
首先,您需要创建一个Junit测试,如下所示:
public` `class` `JMeterTest``{`` ``public` `JMeterTest()`` ``{`` ``// just for testing purposes`` ``System.out.println( ``"calling the constructor"` `);`` ``}`` ``@Before`` ``public` `void` `setUp() ``throws` `Exception`` ``{`` ``// just for testing purposes`` ``System.out.println( ``"calling setup"` `);`` ``}`` ``@After`` ``public` `void` `tearDown() ``throws` `Exception`` ``{`` ``// just for testing purposes`` ``System.out.println( ``"calling tearDown"` `);`` ``}`` ``@Test`` ``public` `void` `testMe()`` ``{`` ``for``( ``int` `i = ``0``; i < ``30``; i++ )`` ``{`` ``// just asserting randomly in order to check what happens in each case`` ``int` `randomNumber = (``int``)( Math.random() * ``100` `);`` ``System.out.println( randomNumber );`` ``assertEquals( ``0``, randomNumber % ``2` `);`` ``}`` ``}``}
该测试主要包含几个断言,以检查JMeter如何使用它们,而本教程的目的不是详细解释单元测试或JUnit。
将测试添加到JUnit目录
将单元测试打包到jar文件中,然后将其复制到目录中jmeter/lib/junit
。确保jar文件包含.class字节码以及要JMeter执行的测试。在本文的最后,您可以找到一个带有pom.xml的Java项目,您可以将其直接用于生成JMeter可以使用的jar文件。您只需要编译代码:
mvn compile
或者,您可以直接在Eclipse或您喜欢的IDE中将项目导出为JAR文件,包括字节码和生成的文件。
添加一个JUnit采样器请求
像我们之前看到的那样创建一个测试计划,并添加一个JUnit请求类型的采样器:Add Sampler-> Junit Request并对其进行配置,以便执行您刚刚在上面创建的测试中想要的方法。
在我们的例子中,我们将执行基于JUnit 4的方法,但是您也可以使用JUnit 3通过为此选择复选框来执行此操作。
像上一章一样添加一个侦听器以查看结果
运行测试计划
查看结果
在这里,我们可以看到刚刚创建的JUnit测试的结果:
正如我们在上面的屏幕截图中看到的,我们所有的测试(1个测试,10个循环)都失败了。这是预期的行为,因为我们希望测试失败。实际上,我们刚刚编写的单元测试没有功能意义,并且没有用。它的目的只是演示如何配置JMeter以使用此类单元测试。
本章介绍的内容可能对使用JMeter来测试应用程序的功能和业务逻辑非常有用,并且具有该应用程序提供的所有好处,这也非常有趣,因为它可以将Java语言的所有优点与Java的多语言功能相结合。JMeter。
13.记录HTTP测试
现在我们将解释如何配置JMeter来记录HTTP请求。为此,我们需要在计算机上安装Firefox,我使用的是32版。
获取Firefox以使用JMeter代理
转到Firefox网络设置,然后选择手动代理选项,并将其设置为服务器localhost和端口8080(实际上这会加深您的JMeter配置)。之后,检查选项“将此代理服务器用于所有协议”。
首先,我们像以前一样创建测试计划。
我们添加一个新的线程组,并为其命名。我们将线程组配置为具有50个线程,启动周期和循环数等于1时为10秒。
添加HTTP请求默认值。
在我们刚创建的线程组上,添加一个新的Config元素,然后选择“ HTTP Request Defaults”。
您应在此处输入要测试的服务器名称。
添加录音控制器
现在,我们向工作台添加了一个记录控制器。
选择工作台,而不是测试计划,并添加“测试脚本记录器”类型的“非测试元素”。
现在,您应该独立于测试计划来独立存储工作台。保存测试计划不会保存工作台。
如下配置记录器:
添加计时器
如果您希望可以在记录器中添加一个计时器(常数),则记录的每个HTTP请求都将使用此计时器。
开始录音
通过单击记录器的启动按钮,您将启动JMeter代理服务器。
记录应出现
如果您访问网页以发出示例HTTP请求,例如使用Firefox访问http://www.oviedin.com(按照本章第一步的说明进行配置后),您将看到不同的内容。条目将显示在测试计划中的“记录控制器”下。
这些记录实际上是在查询前面提到的网页时完成的HTTP请求。仅存储在“记录的测试脚本”中配置的过滤器中包含的记录。它们可以在您的测试计划中重新配置和使用。
14. JMeter插件
高级用户和用例可以使用不同的插件,其中有些需要额外的安装,而有些则不需要。
有很多非常有用的插件,它们允许使用高级选项来解析结果,并使用诸如http://jmeter-plugins.org/wiki/GraphsGeneratorListener/的图表来分析结果。
为了使JMeter与您的持续集成工具连接并直接从CI软件(如Jenkins的“ https://wiki.jenkins-ci.org/display/JENKINS/Performance+Plugin ”)中运行JMeter测试计划,还提供了可用的插件。
正如我所说的那样,插件的数量在增加,不可能一一列举,在尝试自己实现一个插件之前,最好先检查一下互联网上是否有可用的插件。
您也可以为JMeter创建自己的插件,但这超出了本文的范围。
15. JMeter最佳做法
在本文结束之前,我们将写下一些非常有用的技巧和最佳实践:
尽管JMeter UI是用于配置和创建不同测试计划的非常有用且直观的工具,但是经验丰富的用户还是希望使用非GUI模式来执行它们并存储其结果。
您可以通过键入以下内容来执行此操作:
jmeter -n -t test.jmx -l test.jtl.
假设测试是您要执行的测试。您必须提供存储测试的完整路径。
侦听器可以很好地解析结果,但是它们也会占用大量资源,并且会占用大量内存,因此最好在配置中使用尽可能少的侦听器。标志-l全部删除它们,建议在不需要侦听器时使用。
在结果树视图中选中“仅查看错误”标志,可能您只对检查测试期间发生的错误感兴趣。
在同一采样器中使用变量和循环,而不是配置仅由它们使用的变量和参数来区分的多个相似样本。
创建Junit测试计划时,建议提供有意义的错误和断言消息,以使JMeter输出尽可能地易于理解,这是在这种情况下完全适用的单元测试的一般建议。
使用Stop
(Control + '.')
。如果可能,这将立即停止线程。使用关机
(Control + ',')
。这要求线程在任何当前工作结束时停止。其他工具提示可从https://wiki.apache.org/jmeter/JMeterShortcuts获得。
16.总结
这就是全部。我们看到了如何安装JMeter以及如何配置它以执行各种类型的测试,例如HTTP请求,针对数据库的测试以及针对Junit的功能测试。JMeter提供了许多其他类型的测试和功能,但本教程未涵盖。本教程的目的是对应用程序进行完整描述,并说明如何配置您的第一个测试计划。我们还解释了JMeter UI的主要部分以及如何使用它,以及JMeter随附的测试计划元素。在上一章中,我们提到了使用不同的插件扩展JMeter的可能性。对于有高级需求的经验用户来说,这是非常有趣的一点。
17.资源
http://jmeter.apache.org/
http://jmeter-plugins.org/
href =“” http://en.wikipedia.org/wiki/Software_performance_testing
http://www.tutorialspoint.com/jmeter/
http://jmeter.apache.org/usermanual/get-started.html(第2.4.3节“非指导模式”)
https://wiki.apache.org/jmeter/FrontPage
如有收获请划至底部
点击“在看”支持,谢谢!