Jmeter学习文档/使用

JMeter 工具文档

1. JMeter介绍

1.1. JMeter简介

Apache JMeter 是一个100%的纯Java桌面应用,用于压力测试和性能测量。它最初被设计用于Web应用测试但后来扩展到其他测试领域。

Apache JMeter可以用于对静态的和动态的资源(文件,Servlet,Perl脚本,Java 对象,数据库和查询,FTP服务器等等)的性能进行测试。它可以用于对服务器,网络 或对象模拟繁重的负载来测试它们的强度或分析不同压力类型下的整体性能。你可以 使用它做性能的图形分析或在大并发负载测试你的服务器/脚本/对象。

1.2. JMeter与其它主流工具对比

 

Loadrunner

QALoad

JMeter

安装

一般

一般

简单

脚本产生方式

手动编写

录制

手动编写

录制

手动编写

录制

测试结果

详细

较详细

简单

操作性

较简单

简单

一般

价格

极昂贵

昂贵

免费

售后与支持

技术培训

电话等方式

社区讨论

总结

功能强大

价格极昂贵

功能较强大

价格昂贵

功能简单

开源、免费

 

2. JMeter安装

下载安装JDK(1.4以上版本)

下载JMeter,并解压到相关目录

下载BadBoy,并安装

解压完JMeter后,可以在解压目录下的bin目录下,运行jmeter.bat来运行JMeter。如果你不想使用BadBoy来进行录制脚本,可以不用下载和安装BadBoy。

3. JMeter使用

3.1. 基础功能点

3.1.1. 线程组

线程组,可以理解为用户组,进行性能测试时的用户资源池

 

 

线程数:每个线程均独立运行测试计划。因此, 线程组常用来模拟并发用户访问。

ramp-up period: 用于告知JMeter 要在多长时间内建立全部的线程。默认值是0。如果未指定ramp-up period ,也就是说ramp-up period 为零, JMeter 将立即建立所有线程,假设ramp-up period 设置成T 秒, 全部线程数设置成N个, JMeter 将每隔T/N秒建立一个线程。

循环次数:调试计划的循环次数。

3.1.2. 逻辑控制器

3.1.2.1. For Each控制器

该控制器下的sampler或者控制器都会被执行一次或多次,每次读取不同的变量值,常结合用户定义的变量或者正则表达式的取值一起使用。

     1、先定义一些用户变量

 

2、在线程组下添加一个For Each控制器

 

输入变量前缀:我们对做For Each循环时所输入的变量的前缀

Start index for loop (exclusive):从哪个序号的变量开始循环(不包含该序号)

End index for loop (inclusive):从哪个序号的变量结束循环(包含该序号)

输出变量名称:输入变量以什么名称在Http请求中进行调用

Add “_” before number:在前缀和序号之间是否用下划线“_”进行连接

 

3、添加一个http请求,并使用For Each控制器中输出变量名称作为变量进行循环请求

 

4、添加一个察看结果树,验证for each请求

 

3.1.2.2. 仅一次控制器

仅一次控制器下的sampler在当个线程中只运行一次。

1、设置一个线程组,线程数为1,循环次数为4。

 

2、添加给需要仅运行一次的sampler添加一个仅一次控制器

 

3、在仅一次控制器外添加一个普通的http请求,从运行结果中可以看出,仅一次控制器的sampler只运行了一次

 

3.1.2.3. If 控制器

当满足特定条件的情况,该控制器下的sampler才会被执行

1、 判断变量OutTest值为A4时才被执行该HTTP请求

 

2、 从察看结果树中的请求中可以看出,只有当变量值为A4才被执行

 

3.1.2.4. 事务控制器

将一个或多个sampler集合为一个事务。一个相对完整的、有意义的业务操作过程,例如登录、查询、交易、转账,这些都可以作为事务,而一般不会把每次HTTP请求作为一个事务。

1、添加一个事务控制器

 

2、将2个HTTP请求作为一个事务添加到该事务控制器中,查看聚合报告发现只有一个事务

 

3.1.3. 配置元件

3.1.3.1. CSV Data Set Config

在使用JMeter的时候,往往需要参数化一些数据,常用到的就是CSV Data Set Config,一般使用.csv或者.txt结尾的文件。

 


Filename:填写测试数据的文件名,如果测试数据文件没有和测试脚本在同一个目录中,需要写全路径。

File encoding:参数文件的编码格式。推荐选择 UTF-8

Variable Names:对应参数文件每列的变量名

Delimiter:参数文件分隔符。与参数文件中的分隔符保持一致即可。

 

1、 准备一个txt的测试数据文件,并放到和脚本同级目录中(文件格式推荐使用UTF-8)

 

2、 配置csv data set config

 

3、 添加一个http请求,并使用参数

 

4、 查看聚合报告

 

3.1.3.2. HTTP请求默认值

HTTP默认请求值用于设定一些默认的请求参数,如IP地址、端口、协议等。在这里设置后,每个HTTP请求就不必要设定这些值了。

协议:请求所使用的网络协议。

服务器名字或IP:服务器的IP地址或者域名地址。

端口号:提供服务的端口号。

路径:请求路径。

 

1、 添加一个http请求,只填写请求参数

 

2、 在聚合报告中查看运行结果,请求正常。

 

3.1.3.3. 用户定义的变量

用户定义的变量在不同的位置作用域不同,如果在测试计划中的用户定义变量可用于所有线程,在线程中定义的变量只能在该线程中使用。

常用于一些需要大量使用却需要变更的场景,比如测试环境变更,导致的服务器端口、地址等信息。

变量名称:定义变量引用的名称,如:设置变量名为IP 在Sampler请求内引用:${IP}

值:给变量赋值,比如IP地址值可以设置为请求需要的地址

 

1、 http请求中使用用户定义的变量

 

2、 查看结果,使用的用户定义变量成功

 

3.1.3.4. 计数器

计数器允许用户在线程组中任何位置创建引用。 计数器配置允许用户配置起始点,最大值和增量。 计数器将从开始循环到最大,然后从开始重新开始,继续进行,直到测试结束

启动:给计数器的初始值。

递增:每次迭代后给计数器增加的值。

最大值:计数器的最大值,如果超过最大值,重新设置为初始值

Number format:数字格式。

引用名称:在请求用使用的变量名。

与每用户独立的跟踪计数器: 全局的计数器,如果不勾选,即全局的,比如用户#1 获取值为1,用户#2获取值还是为1;如果勾选,即独立的,则每个用户有自己的值:比如用户#1 获取值为1,用户#2获取值为2。

1、 添加一个http请求,在请求中使用计数器的引用名作为变量

 

2、 查看执行结果

 


从查看结果树中可以看出,百度搜索使用的是计数器中的变量值,循环一次加一。

3.1.4. 定时器

3.1.4.1. 吞吐量控制器(Constant Throughput Timer

吞吐量控制器(Constant Throughput Timer可以让JMeter以指定数字的吞吐量

 


Target throughput(in samples per minute):每分钟的吐量

Calculate Throughput based on:线程和吞吐量的关系,常用的有:

(1)This thread only:控制每个线程的吞吐量,选择这种模式时,总的吞吐量为设置的target Throughput 乘以该线程的数量

(2)All active threads:设置的target Throughput 将分配在每个活跃线程上,每个活跃线程在上一次运行结束后等待合理的时间后再次运行。活跃线程指同一时刻同时运行的线程。

 

1、 设置线程数为30,吞吐量控制器为每个线程每分钟600

 

总的吞吐量为设置的target Throughput 乘以该线程的数量

 

2、 设置线程数为30,吞吐量控制器为所有线程每分钟10

 

每个活跃线程在上一次运行结束后等待合理的时间后再次运行

3.1.4.2. 集合点(Synchronizing Timer

集合点:当请求数达到这个阀值时,允许请求同时发出

 


Number of Simulated Users to Group by:请求集合的数量。

Timeout in milliseconds:等待集合数量的超时时间(毫秒)。

3.1.5. 前置处理器

3.1.5.1. 用户参数

 


在察看结果树中可以看出使用的变量:

 

3.1.6. Sampler

3.1.6.1. HTTP请求

 


3.1.6.2. SOAP WebService请求

 


填写服务器IP,端口,路径等信息。

webservice接口请求内容填写到Body Data中,并参数化一些脚本信息。

 

查看webservice请求结果。

3.1.6.3. JDBC请求

创建JDBC请求之前,需要先创建一个JDBC Connection Configuration

 


variable name: 这个值一定要填写,并且在稍后要添加的JDBC Request中也要使用该值。

Database Connection Configuration部分填写数据库的连接信息。信息如下:
    Database URL: jdbc:mysql://localhost:3306/数据库名。

JDBC Driver class:com.mysql.jdbc.Driver

创建一个JDBC请求

 


Variable Name 一定要和创建JDBC配置中填写的一样。

执行结果:

 

3.1.7. 后置处理器

3.1.7.1. 正则表达式提取器

正则表达式提取器可以从请求的响应结果中取到需要的内容,从而实现关联

 


引用名称:HTTP等请求中,引用此数据,需要用到的名称

正则表达式:用于将需要的数据提取出来

     假设想匹配一个WEB页面的一下部分:

 name=”file” value=”readme.txt”

 要提取readme.txt 一个合适的正则表达式如下:

 name=”file” value=”(.+?)

模板:表示使用提取到的第几个值:
$1$:表示取第1个
$2$:表示取第二个
以此类推:$n$:表示取第n个

匹配数字(0代表随机):0 代表随机取值,-1 代表全部取值(常配合for each使用),n 代表n选择n次匹配。

缺省值:如果正则表达式没有搜找到值,则使用此缺省值

 

1、 填写正确的正则表达式。

 

2、 使用该引用名作为变量传递下一个请求。

 

3、 通过察看结果树检查请求是否正确。

 

3.1.8. 断言

3.1.8.1. 响应断言

响应断言意思是指对于Sample完成了请求发送之后,判断一下返回的结果是否满足期望断言的结果可在监听器中查看

 


Apply to:一般就选择Main sample only

要测试的响应字段:一般的http响应,就勾选响应文本。

模式匹配规则:包含,匹配,等于等。

1、 创建一个baidu的请求。

 

2、 添加一个响应断言,判断页面是否包含“百度一下”。

 

3、 通过察看结果树可以发现响应断言成功

 

修改相应断言值为百度一下111

 

4、 查看结果树发现改请求失败

 

3.1.8.2. BeanShell断言

通过JAVA语言来代码来断言一个响应

 


可以通过断言结果或者察看结果树察看断言情况:

 

3.1.9. 监听

3.1.9.1. 断言结果

用来查看断言结果

 


断言结果,在察看结果树中也可以察看。

 

一条断言成功,第二条断言失败。

3.1.9.2. 察看结果树

从表格数据里可以看出每次请求是否成功等信息

 


结果树是一个很有用的结果分析报告,从这里不仅可以看出请求的状态、成功与否,请求的URL,而且还可以看出请求的响应数据,并生成html和xml等格式

3.1.9.3. 聚合报告

聚合报告里可以看出每次请求的时间、请求数据量等数据

 


Label:每个 JMeter 的 element(例如 HTTP Request)都有一个 Name 属性,这里显示的就是 Name 属性的值

#Samples:表示你这次测试中一共发出了多少个请求,如果模拟10个用户,每个用户迭代10次,那么这里显示100

Average:平均响应时间——默认情况下是单个 Request 的平均响应时间,当使用了 Transaction Controller 时,也可以以Transaction 为单位显示平均响应时间

Median:中位数,也就是 50% 用户的响应时间

90% Line:90% 用户的响应时间

Min:最小响应时间

Max:最大响应时间

Error%:本次测试中出现错误的请求的数量/请求的总数

Throughput:吞吐量——默认情况下表示每秒完成的请求数(Request per Second),当使用了 Transaction Controller 时,也可以表示类似 LoadRunner 的 Transaction per Second 数

KB/Sec:每秒从服务器端接收到的数据量,相当于LoadRunner中的Throughput/Sec

3.2. 函数

3.2.1. _csvRead 函数

_cvsRead函数是从外部读取参数,csvRead函数可以从一个文件中读取多个参数。

 

CSV file to get values from | *alias:表示要读取的文件路径,需要是绝对路径放在和脚本相同目录直接写文件名是不能正确读取到的)。

CSV文件列号| next| *alias:表示当前变量读取第几列数据

1、 将生成的函数直接放到需要使用的地方

 

2、 察看运行结果

 

注意:如果中文乱码,需要修改文件格式为GB2312格式。

3.2.2. _Random 函数

一个数据段随机读取数据替换参数

 

使用方法参考3.2.1。

3.2.3. _split 函数

将一个字符串或者一个变量,分割成多个值

 

String to split:需要进行分割的字符串或者变量。

函数名称。存储变量名,可以在其他地方进行使用。

String to split:分割符。

使用方法参考3.2.1。

 

3.2.4. _Counter函数

该函数功能和计数器相同。

 

使用方法参考3.2.1。

 

3.2.5. _Time函数

 

${__time(,)}1450056496991无格式化参数,返回当前毫秒时间

${__time(yyyyMMdd,)}20151214返回年月日)

${__time(HHmmss,)}092816返回时分秒

日期格式可以根据情况灵活填写。

使用方法参考3.2.1。

3.3. 录制脚本

3.3.1. 使用JMeter代理录制脚本

1、 打开JMeter的代理

 

设置代理端口号;

选择目标控制器里你想存放脚本的线程组;

选择分组里的每个组放入一个新的控制器;

点击最下面的启动按扭。

2、 设置IE代理并开始录制。

打开IE→Internet选项连接局域网设置代理服务器

 

把地址设成localhost,一般把端口设成JMeter的代理端口置代理后,要启动JMeter里的代理服务器设置才能正常访问网站

在浏览器中访问百度。

 

成功录制百度首页。

 

3.3.2. 使用BadBoy录制脚本

打开badboy软件,并在URL地址栏输入想要录制的网页,并进行流程操作。

 

把操作导出为JMeter脚本:

 

导出后,可以在JMeter打开这个脚本。

 

3.4. 脚本运行

3.4.1. 分机的设置

运行代理机上的Jmeter -server.bat文件。

3.4.2. 主机的设置

ü 打开主控机bin目录下的Jmeter.properties 文件。

ü 将文件中“remote_hosts=127.0.0.1:1099”,其中的127.0.0.1 改为代理机的IP地址。

ü 保存文件后运行主控机上的 Jmeter.bat文件。

ü 进入运行-远程启动菜单项,进行远程调用。

3.4.3. Linux系统运行

1、 Linux系统上安装JMeter工具和JAVA环境。

 

2、 上传所需要执行的JMeter脚本到Linux服务器。

 

3、 使用命令执行。

../bin/jmeter -n -t http请求默认值.jmx -l log.jtl

 

命令讲解:

-n 使用非GUI的方式进行启动JMeter。

-t 执行需要运行的JMeter脚本。

-l 保存日志到文件中。

 

4、 在执行完成后,可下载log.jtl日志文件,然后通过JMeter工具打开察看详细的运行结果。

 

 

展开阅读全文

没有更多推荐了,返回首页