JMeter工具

Jmeter和Loadrunner:
Loadrunner:工业级的性能测试工具,可以模拟大量用户,并监控性能指标提供报表。
优势:支持的用户量大、详细的分析报表、支持IP欺骗
缺点:收费、体积大、无法定制功能
Jmeter:性能测试工具,Jmeter软件的功能与Loadrunner基本一致。
优点:免费开源、体积小、可扩展的组件
缺点:不支持IP欺骗、分析和报表能力比lr弱

选择jmeter的原因:
Jmeter免费
Jmeter能提供的功能与loadrunner基本一致,能满足绝大多数的性能测试需要

Jmeter环境搭建

(1)安装JDK
下载(注意选择操作系统对应的位数32/64)
安装(一键式)
配置环境变量
验证:java -version
(2)安装Jmeter
下载(注意下载的版本与JDK版本的对应关系)
安装(解压缩)
配置环境变量
验证:
双击Jmeter.bat
执行:java -jar ApacheJMeter.jar

jmeter的功能概要:
jmeter文件目录结构:
bin目录:

JMeter工具_第1张图片

docs目录: 

JMeter工具_第2张图片printable-docs目录: 

JMeter工具_第3张图片

lib目录: 

JMeter工具_第4张图片

JMeter的基本元件

线程组:模拟用户

取样器:发送请求(类似于接口自动化中的request库)

逻辑控制器:控制语言执行顺序 (类似于python中逻辑控制语句)

前置处理器:在请求发送之前执行(类似于自动化中的setup部分)

后置处理器:在请求发送之后执行(类似于自动化中的teardown部分)

断言:对响应结果进行断言(类似于assert语句)

定时器:等待一定的时间

测试片段:封装一段代码,供脚本调用,不直接执行

配置元件:对参数进行赋值,(类似于自动化中的参数化)

监听器:查看脚本运行结果

1.JMeter参数化常用方式

1)用户定义的变量(全局参数,所有用户读取的变量值相同)

        添加方式:测试计划-->线程组--> 配置元件-->用户定义的变量

        参数设置:参数名:参数值           在http取样器中 引用 ${ 参数名}

2)用户参数 :针对每个用户取不同的值,但是不能针对同一个用户的不同循环取不同的值 

JMeter工具_第5张图片

   添加方式:测试计划-->线程组--> 前置处理器-->用户参数

3)CSV Data Set Config(CSV数据文件):针对每个用户的每次循环取不同的值

定义CSV数据文件

JMeter工具_第6张图片

JMeter工具_第7张图片

 4)函数( -counter:不需要提前准备数据,jmeter自动添加计数的方式来完成参数化,

      TRUE 每个用户分别计数, FALSE 所有用户使用全局计数

2 JMeter中常用断言

断言: 对响应数据进行自动校验

1)响应断言: HTTP消息的任何格式的响应

JMeter工具_第8张图片

  添加方式 : 测试计划--> 线程组-->HTTP请求-->(右键添加)断言-->响应断言

2)JSON断言: 响应消息为JSON格式的响应

JMeter工具_第9张图片

 3)持续时间断言(Duration Assertion): 对请求的响应时间进行断言

JMeter工具_第10张图片

 响应时间: 发出请求到收到响应的全部时间

3 常用的关联方法后置处理器实现

关联: 当请求之间有依赖关系,一个请求的入参,需要使用到之前请求的响应数据时,需要使用关联

1)正则表达式提取器: 适用于如何格式的响应数据

正则表达式介绍:
        百度一下,你就知道百度一下,你就知道
        .*?
        .  : 是通配符,可以代表任意字符 (除换行回车)
        *  :代表前面的字符出现0次或者多次 
        .* 匹配规则  : 找到左边界值后,往右杳找有边界,找到最后面的右边界,中间的所有数据都被记录下来
        ?  : 代表非贪婪匹配,找到左边界后,往右查找匹配右边界,只要有匹配的右边界就停止继续查找;再次查找左边界和右边界
        左边界 (.*?) 右边界  : 可以提取出想要获取的数据内容

JMeter工具_第11张图片

  添加方式 : 测试计划-->线程组-->HTTP请求-->(右键添加)后置处理器-->正则表达式提取器

2)XPath提取器: 适用于HTML格式的响应数据

JMeter工具_第12张图片

 

3)JSON提取器: 适用于JSON格式的响应数据

JMeter工具_第13张图片

 

跨线程组关联

跨线程组关联指的是多个请求之间有关联关系(即一个请求的参数需要使用前面请求的响应),但是两个请求不在一个线程组内,此时使用提取器无法完成关联,需要使用Jmeter属性来完成数据的传递。

JMeter工具_第14张图片步骤:

1、添加线程组1,添加HTTP请求——传智播客

2、添加JSON提取器

3、添加Bean Shell取样器(填写setProperty函数——将提取器提取出来的值赋值给Jmeter属性)

4、添加线程组2,添加HTTP请求——百度

引用前面返回的城市信息(使用property函数——将Jmeter属性值读取出来)

5、添加查看结果树 

JMeter工具_第15张图片

自动录制脚本

原理:

JMeter工具_第16张图片 Jmeter在客户端和服务器之间做代理。收到所有的请求和响应数据后,Jmeter再进行逆向解析的动作,将数据报文转化为脚本。 

jmeter脚本录制:

1、在测试计划下,添加HTTP代理服务器

JMeter工具_第17张图片

2、设置自己PC机的代理

JMeter工具_第18张图片 

3、点击启动,进入浏览器进入相关的操作,脚本会自动生成并存放在指定的线程组下。

过滤规则的配置

JMeter工具_第19张图片 Cookie管理器:

管理cookie:自动将cookie信息添加到后续的所有请求中。

登录及后续的相关操作时,需要提前添加HTTP Cookie管理器

JMeter工具_第20张图片

Jmeter直连数据库:

准备工作:

启动数据库

加载mysql的JDBC驱动

方法1:在测试计划下方的位置,点击浏览添加JDBC的jar包

方法2:将JDBC的jar拷贝到lib目录,并重启jmeter

配置JDBC连接池的参数

JMeter工具_第21张图片

 编写JDBC脚本步骤(搜索指定商品,在返回结果中检查是否包含指定商品的ID的详情URL):

1、添加JDBC Request请求

JDBC连接池名称:必须与“JDBC连接池”中的连接名一致

要执行的sql语句

Variable Name中:写明要保存的数据的参数名

JMeter工具_第22张图片

 2、添加HTTP请求 —— 搜索请求

参数为中文时,将参数写到下方参数位置,并勾选上“编码”

JMeter工具_第23张图片

 3、添加响应断言:

在响应断言中配置要检查的数据内容。

注意:应用JDBC Request查询出的结果时,需要加上索引(因为JDBC查询的结果保存为一个列
表)

JMeter工具_第24张图片

 逻辑控制器:

控制jmeter脚本的执行顺序

如果(if)控制器:

第一种配置方法

JMeter工具_第25张图片

第二种配置方法

勾选上Interpret Condition as Variable Expression,判断条件需用使用jexl3函数。

(使用这个函数来进行判定时,Jmeter自身的执行效果要高一些)

JMeter工具_第26张图片 

循环控制器线程组中的循环次数的对比:

循环控制器只控制其子节点下的HTTP请求,线程组对所有的请求都有效

假如线程组循环次数为2,循环控制器次数为3,则循环控制器下的请求执行次数为:2*3

ForEach控制器:

用户定义的变量或者正则表达式提取器配合使用,循环读取用户定义的变量或者正则表达式结果

中的所有数据。

配置参数:

JMeter工具_第27张图片

定时器:

同步定时器

又叫做集合点LR的叫法),保证大量的请求在同一时间进行发送,形成绝对的并发

实现原因:设置同步定时器,有请求要发出时,同步定时器会暂缓请求发送,一直到积

攒的请求数达到要的数量时

,将所有的请求同步发送出去,形成绝对的并发(更大的压力负载)

JMeter工具_第28张图片 

常数吞吐量定时器:

设置Jmeter以指定的吞吐量速度往服务器发送HTTP请求。

JMeter工具_第29张图片  注意:常数吞吐量定时器只是帮忙达到性能测试的负载(压力)要求,本身不代表性能有bug/无bug
对于bug的分析需要通过响应时间来判断

jmeter分布式:
应用场景:
当性能测试时需要模拟的负载(用户/请求)太高,一台测试机无法模拟,需要使用多台测试机一
起来模拟以达到要求的负载量,这就叫分布式

原理:
分布式测试时通常由1台控制机和N台代理机
控制机:给代理发送任务,接收代理机返回的数据统计,做汇总展示
代理机:往服务器发送HTTP请求,并接收服务器的响应,并对响应进行处理。

JMeter工具_第30张图片

分布式相关注意事项:

测试机上所有的防火墙关闭

所有的控制机、代理机、被测系统都在同一个子网中

所有的控制机和代理机上安装的Jmeter和JDK的版本必须完全一样。

要关闭Jmeter中的RMI SSL开关

分布式配置与运行:

配置

代理机(Jmeter.property)
        server_port :代理机启动的端口,不冲突即可
        server.rmi.ssl.disable=true
控制机
        remote_hosts: 代理机的IP:port,如果有多个代理机用 ',' 分隔
        server.rmi.ssl.disable=true
运行:

代理机
        进入bin目录下,执行jmeter_server.bat

控制机:

        进入bin目录下,执行jmeter.bat

        启动时,点击“运行”——“远程启动所有”控制代理机的运行 

JMeter工具_第31张图片

jmeter报告:
聚合报告:

JMeter工具_第32张图片 

重点关心的性能指标

响应时间

观察当前的最大最小值的波动范围

如果波动范围不大,以平均响应时间作为最终的性能响应时间结果

如果波动范围很大,以90%(经验)的响应时间作为最终性能响应时间结果

错误率

吞吐量

HMTL报告:

通过命令行的方式来运行,输出HTML的测试报告
Jmeter -n -t 测试脚本 -l result.jtl -e -o HTML报告路径

参数:

JMeter工具_第33张图片 

步骤:

1、在bin目下执行上述命令

2、等待脚本执行完成后,进行report文件夹下,打开index.html,可以看到性能测试的详细数据
统计 

插件安装:

(1)安装插件管理器

在Jmeter官网上下载插件管理器Plugins-manager-1.3.jar

JAR包放入到lib\ext目录

重启Jmeter,可以在选项下看到Plugins Manager选项

JMeter工具_第34张图片

(2)安装指定的插件(需要安装的插件有:3 Basic Graphs、PerfMon、Concurrency、5

Additional)

打开Plugins Manager插件管理器

选择Available Plugins,当前可用的插件

选择需要下载的插件(等待右方文本内容展示出来)

下载右下角的下载按钮,自动的完成下载,Jmeter会自动重启

JMeter工具_第35张图片

需要下载的插件:

JMeter工具_第36张图片 性能测试常用图表

Concurrency Thread Group  JMeter工具_第37张图片

TPS:运行过程中的TPS统计 

JMeter工具_第38张图片

Bytes Through Over Time:运行过程中的传输速率

JMeter工具_第39张图片 

基于jmeter客户端监控服务器 硬件资源:
1、下载安装包ServerAgent-2.2.3.zip
2、解压缩安装包
3、启动安装包中的执行文件:服务器windows启动startAgent.bat
4、Jmeter中添加插件,在监听器——perForm插件,并配置

JMeter工具_第40张图片 5、运行性能脚本,会自动监控

并发数计算
(1)普通的计算方式:TPS = 总的请求数 / 总的时间
问题:对于同一天的时间内,不同的时间段,请求速率会有波动,这样计算会被平均掉,无法测试负载
高的情况
(2)二八原则
核心80%的请求数会集中在20%的时间内完成
TPS = 总的请求数 *80% / 总的时间 * 20
注意:二八原则的计算方法会比平均的计算方式更准确
(3)按照每天的具体业务数据进行计算(稳定性测试TPS)
当获取每天的具体业务统计数据时,就可以统计出业务请求集中的时间段作为有效业务时间;并统计有效业务时间内的总请求数
TPS = 有效业务时间的总请求数 * 80% / 有效业务时间 * 20%
(4)模拟用户峰值业务操作的并发量:(压力测试TPS)
获取每天的交易峰值的时间段,及这个时间段内的所有请求的数量
TPS = 峰值时间内的请求数/峰值时间段 * 系数
系数可以是:2、3、6、10,由项目组自己觉得要达成的性能指标 

你可能感兴趣的:(jmeter)