1、什么是JMeter
Apache JMeter是Apache组织开发的基于Java的压力测试工具。用于对软件做压力测试,它最初被设计用于Web应用测试,但后来扩展到其他测试领域。 JMeter 可以用于对服务器、网络或对象模拟巨大的负载,来自不同压力类别下测试它们的强度和分析整体性能。另外,JMeter能够对应用程序做功能/回归测试,通过创建带有断言的脚本来验证你的程序返回了你期望的结果。为了最大限度的灵活性,JMeter允许使用正则表达式创建断言。 Apache jmeter 可以用于对静态的和动态的资源(文件,Servlet,Perl脚本,java 对象,数据库和查询,FTP服务器等等)的性能进行测试。它可以用于对服务器、网络或对象模拟繁重的负载来测试它们的强度或分析不同压力类型下的整体性能。你可以使用它做性能的图形分析或在大并发负载测试你的服务器/脚本/对象。
JMeter可作为接口测试工具,性能测试工具。
1.1、为什么使用Jmeter
1.开源许可: Jmeter 是完全免费的,并提供了源码可供自定义开发。
2.图形界面:提供了方便的图形界面来编辑和开发测试脚本。
3.图形测试结果:提供了图表、表格、树、文件等格式的结果显示。
4.多协议支持:支持 http、jdbc、ldap、soap、jms、ftp 等等协议。
5.多线程框架:通过线程组,能够轻易的设置不同测试的并发用户。
6.操作简单:用户可以通过JMeter组件,轻易的完成测试工作。
7.高扩展性:jmeter 支持用户自定义测试脚本,同样还提供了各种插件。
1.2、JMeter工作原理
Jmeter只是作为发起请求的客户端(可以理解为前端),Jmeter是作为组装请求报文结构的容器,例如:请求行、请求头、请求数据;并可将响应结果进行可视化展示。对于接口的复杂逻辑Jmeter有丰富的插件进行支持,前/后置处理,断言元件、第三方插件、也可以自行开发插件。
2、如何使用JMeter
2.1、JMeter下载及安装
1.环境搭建
由于JMeter基于Java开发,因此在JMeter安装前提供Java环境。Java系统环境变量配置。
2.JMeter下载
下载地址:http://jmeter.apache.org/download_jmeter.cgi,(Windows版本下载.zip,Linux版本下载.tgz)
下载后无需安装,解压后即可使用。解压后目录如下:
运行Jmeter,双击jmeter.bat文件
2.2、认识JMeter组件
JMeter共有10大组件:线程、取样器、逻辑控制器、前置处理器、后置处理器、断言、定时器、测试片断、配置元件、监听器。
线程:线程组元素是任何测试计划的起点。所有控制器和采样器必须在线程组下。其他元素(例如,侦听器)可以直接放在测试计划下,在这种情况下,它们将应用于所有线程组。顾名思义,线程组元素控制JMeter将用于执行测试的线程数。
取样器:采样器告诉JMeter将请求发送到服务器并等待响应。它们按照它们在树中出现的顺序进行处理。控制器可用于修改采样器的重复次数。
JMeter采样器包括:FTP请求、HTTP请求(也可用于SOAP或REST Web服务)、JDBC请求、Java对象请求、JMS请求、JUnit测试请求、LDAP要求、邮件要求、操作系统进程请求、TCP请求。
逻辑控制器:逻辑控制器使您可以自定义JMeter用于确定何时发送请求的逻辑。逻辑控制器可以更改来自其子元素的请求的顺序。
前置处理器:前置处理器顾名思义就是在取样器之前执行相关操作。
后置处理器:后置处理器顾名思义就是在取样器之前执行相关操作。
断言:断言使您可以断言有关从被测试服务器收到的响应的事实。使用断言,您基本上可以“测试”您的应用程序正在返回期望的结果。
定时器:默认情况下,JMeter线程按顺序执行采样器而不会暂停。我们建议您通过将可用计时器之一添加到线程组来指定延迟。如果不添加延迟,JMeter可能会在很短的时间内发出太多请求,从而使服务器不堪重负。
测试片断:
配置文件:配置元素与采样器紧密配合。尽管它不发送请求(HTTP(S)测试脚本记录器除外),但它可以添加或修改请求。
监听器:用于取样器发送请求后响应的结果可视化。
2.3、JMeter作用域
在jmeter中,元件的作用域是靠测试计划的的树型结构中元件的父子关系来确定的。
配置元件(config elements )
元件会影响其作用范围内的所有元件。
前置处理程序(Per-processors)
元件在其作用范围内的每一个sampler元件之前执行。
定时器(timers )
元件对其作用范围内的每一个sampler 有效
后置处理程序(Post-processors)
元件在其作用范围内的每一个sampler元件之后执行。
断言(Assertions)
元件对其作用范围内的每一个sampler 元件执行后的结果执行校验。
监听器(Listeners)
元件收集其作用范围的每一个sampler元件的信息并呈现。
>取样器(sampler)元件不和其它元件相互作用,因此不存在作用域的问题。
>逻辑控制器(Logic Controller)元件只对其子节点中的取样器 和 逻辑控制器作用。
>除取样器 和逻辑控制器 元件外,其他6类元件,如果是某个sampler的子节点,则该元件公对其父子节点起作用。
>除取样器和逻辑控制器元件外的其他6类元件,如果其父节点不是sampler ,则其作用域是该元件父节点下的其他所有后代节点(包括子节点,子节点的子节点等)。
简单举个小例子:
取样器(HTTP请求1 、HTTP请求2、HTTP请求3)、定时器(固定定时器)、 逻辑控制器(循环控制器) 、断言(响应断言)、监听器(察看结果树1、察看结果树2)
* HTTP请求1 、HTTP请求2 、HTTP请求3 元件没有作用域的概念。
*固定定时器元件作用域HTTP请求1 。
*响应断言元件作用域HTTP请求1 、HTTP请求2 。
*循环控制器 元件作用域名是其子节点HTTP请求2、HTTP请求3 。
*察看结果树1 元件的作用域是是HTTP请求2、HTTP请求3。
*察看结果树2元作的作用域是HTTP请求1 、HTTP请求2 、HTTP请求3
2.4、简单Web测试
1.创建线程组
2.添加HTTP取样器
3.查看响应结果
4.运行
5.响应结果
左侧:绿色为响应成功,红色为响应失败。
右侧:可查看响应的结果和请求数据等内容。