测试基础jmeter工具介绍及使用方法
Posted 锦都不二
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了测试基础jmeter工具介绍及使用方法相关的知识,希望对你有一定的参考价值。
目录
一、Jmeter介绍
jmeter是Apache组织基于java开发的一款性能测试软件。是一款开源、小巧、支持多协议(HTTP/HTTPS、JDBC、JAVA...等等)、众多插件为一体的强大工具。
它不仅做性能测试,还可以做接口的自动化测试。
优点
1.开源免费
2.体积小
3.有丰富的第三方插件
缺点
1.不支持ip欺骗
2.报表的精度比LR要差
二、Jmeter文件目录介绍
1.1 bin目录
存放可执行文件和配置文件
jmeter.bat:windows的启动文件
jmeter.log:日志文件
jmeter.sh:linux的启动文件
jmeter-properties:系统配置文件
jmeter-server.bat:windows分布式测试要用到的服务器配置
jmeter-server:linux分布式测试要用到的服务器配置
1.2 docs目录
docs:是Jmeter的api文档,可打开api/index.html页面来查看
1.3 printable_docs目录
printable_docs的usermanual子目录下的内容是Jmeter的用户手册文档。
usermanual下component_reference.html是最常用到的核心元件帮助文档。
提示:printable_docs的demos子目录下有些常用Jmeter脚本案例,可以参考。
1.4 lib目录
该目录用来存放Jmeter依赖的jar包和用户扩展所依赖的jar包。
三、Jmeter的基础配置
汉化设置
-
临时修改:
options--->language--->choose language--->Chinese
-
永久修改:
-
打开jmeter.properties
-
修改language=zh_CN
-
重启jmeter
-
主题修改
四、Jmeter的基本操作
- 启动jmeter
- 添加线程组
- 添加http请求的取样器,并配置
- 添加查询结果树的监听器
- 点击"启动"运行jmeter,并查看结果
基本元件
线程组:模拟用户的。
配置元件:进行测试环境和测试数据初始化--->比如自动化脚本中setup
前置处理器:对要发送请求进行预处理--->比如自动化脚本中参数化
取样器:往服务器发送请求--->比如自动化脚本中发请求的代码
后置处理器:对收到服务器的响应进行数据提取--->比如自动化脚本中获取响应中特定字段语句
断言:将收到响应结果又预期结果做对比--->比如自动化脚本中断言
监听器:查看测试脚本运行后结果和日志--->比如自动化脚本中测试报告
定时器:等待一段时间--->比如自动化脚本中sleep
测试片段:封装基本功能,不单独执行,需要通过脚本的调用才能执行--->比如自动化脚本中封装函数
作用域
核心:根据测试计划中的树形结构的父子节点来确定的
原则:
- 取样器是没有作用域的。
- 逻辑控制器:只对其子节点下的所有元件有效。
- 其他的元件。
- 如果其父节点是取样器,则只对父节点取样器有效。
- 如果其父节点不是取样器,对父节点下所有子节点及节点中子节点有效。
元件的执行顺序
顺序:配置元件--->前置处理器--->定时器--->取样器--->后置处理器--->断言--->监听器
注意:
- 配置元件、前置处理器、后置处理器都需要依赖取样器才能运行
- 在同一个作用域下,相同类型元件执行顺序是从上到下来按顺序执行
Jemter重要的三个组件
线程组
作用:通过配置线程组中的线程数来模拟用户。线程数就是用户数,线程组是用户组
特点:
- 模拟多用户
- 取样器和逻辑控制器必须在线程组下使用
- 一个测试计划下可以添加多个线程组,可以并行或串行执行
- 并行:默认情况下线程组为并行执行
- 串行:在测试计划下勾上"独立运行每个线程组"
线程组的分类:
- setup线程组:拥有测试前预处理操作,在所有线程组中最先执行
- 普通线程组:来执行业务测试脚本
- teardown线程组:用来测试后的后置处理(数据、恢复环境)的操作,在所有的线程组中最后执行
线程组的属性
线程数:模拟虚拟用户数
Ramp-up时间:虚拟用户启动所需要的时间
循环次数:
- 配置指定次数:控制脚本运行执行的次数
- 配置循环永远
- 需要调度器配置使用
- 运行时间:脚本执行的时间
- 延迟启动时间:脚本等待特定的时间才能开始运行
http请求
http协议:可以填写为HTTP或者HTTPS,默认不填写为HTTP协议
http主机名/ip: 如:http://baidu.com 80
端口:可以填写为任意值。默认不填写时为80端口
请求发方法:HTTP协议所有支持的所有方法
路径:目录+参数
编码格式:默认ios国际标准,推荐使用utf-8
查看结果树
取样器结果:统计请求相关的信息
请求:HTTP请求的请求头和请求体的详情信息
响应:HTTP响应的响应头和响应体的详情信息
jmeter响应中出现乱码时:
五、Jmeter参数化常用方式
用户定义的变量
- 方式1:
添加:线程组--->配置元件--->用户自定义变量
配置:参数名+参数值
使用:在HTTP请求的取样器中引用定义变量。$(参数名)
- 方式2:
配置:在测试计划中去配置用户定义变量
使用:在HTTP请求的取样器中引用定义变量。$(参数名)
应用场景:当大量脚本中的参数值需要修改时候,直接修改用户定义变量中值会更方便
用户参数
添加:线程组--->前置处理器--->用户参数
配置:
- 参数:添加变量
- 参数值:添加用户--->针对每个用户配置不同的参数值
使用:在HTTP请求的取样器中引用定义的变量。$(参数名)
应用场景:可以针对不同的用户获取到不同的参数值
CSV Data Set Config
添加:线程组--->配置元件--->CSV数据文件设置
编写CSV数据文件(.csv作为后缀):
- 多个参数写为多列,其中用逗号分隔
- 多组参数值,则使用多行来设置
配置:
- 路径
- 文件编码:UTF-8
- 变量名称:从CSV数据文件中读取的数据需要保存变量名。有多个变量时用逗号分隔
- 是否忽略首行:是否从CSV文件第一行中开始读取
- 分隔符:要求与CSV数据文件中多列的分隔符一致
- 遇到文件结束符是否再次循环:默认TRUE
- 遇到文件结束符是否停止线程:当前一个参数为FALSE,该参数有效,一般设置为TRUE
函数
counter:
- TRUE:每个用户使用独立计数器
- FALSE:所有的用户使用全局计数器
引用:在取样器中使用$(__counter(FALSE,))来引用对应值
六、Jmeter断言
作用:让脚本自动化执行过程中,能够自动判定执行结果是否符合要求时候,需要添加断言
响应断言
添加:线程组--->HTTP请求--->断言--->响应断言
配置:
- 测试字段:需要检查的字段
- 模式匹配规则:需要使用什么规则来进行检查
- 测试模式:需要校验的值
Json断言
适用于返回的HTTP响应为JSON格式
添加:线程组--->HTTP请求--->断言--->JSON断言
配置:
- JSON PATH:$.weatherinfo.city
- 勾选"Addltonal assert value"
- 在expected value里填写期望值
断言持续时间:
适用于性能测试时,检查HTTP请求的响应时间是否超过预期值
添加:线程组--->HTTP请求--->断言--->断言持续时间
七、Jmeter关联(提取器、数据库、逻辑控制器等)
当多个请求之间有依赖关系,后一个请求的参数需要使用前一个请求的响应数据时,需要用到关联。
分类:
- 正则表达式提取器
- xpath提取器
- Json提取器
提取器
正则提取器
添加:线程组--->HTTP请求--->后置处理器--->正则表达式提取器
配置:
- 要检查的响应字段:默认主体
- 引用名称:匹配后的数据要存储的变量名
- 正则表达式:
<p>(.*?)</p>,"()"里是要保存的数据
- 模板:$1$
- 数据1代表上面正则表达式中第几个()
- 匹配数字:0代表随机值、1代表第一个结果,-1代表所有结果
- 缺省值:当没有匹配上时将该值保存到变量里
xpath提取器
添加:线程组--->HTTP请求--->后置处理器--->xpath提取器
配置:
- 引用名称:匹配后的数据要存储的变量名
- xpath path:xpath匹配规则
- 匹配数字:0代表随机值、1代表第一个结果,-1代表所有结果
- 缺省值:当没有匹配上时将该值保存到变量里
json提取器
添加:线程组--->HTTP请求--->后置处理器--->json提取器
配置:
- 引用名称:匹配后的数据要存储的变量名
- json path:json路径。$.weatherinfo.city
八、Jmeter数据库连接与操作
连接准备:
- 打开数据库,确定数据库的表及对应的字段
- 加载mysql的jdbc驱动
- 方法一:将jdbc驱动通过测试计划,浏览的方式添加
- 方式二:将jdbc驱动jar包放入到lib\\ext目录下,并重启jmeter
- 配置jdbc connection configuration
- created pool name:给连接池命名,用于后续引用
- 数据库URL:jdbc:mysql://127.0.0.1:3306/test
- 用户名
- 密码
直连数据库使用:
九、Jmeter的逻辑控制器
控制元件的执行顺序
if控制器
添加:线程组--->逻辑控制器--->if控制器
配置:
- 使用JS预发:"$name"=="baidu"
- 使用jmeter函数的方式:$__jexl3("$name"=="baidu",)
- 推荐使用函数的方式
循环控制器
指定HTTP请求执行特定的次数
添加:线程组--->逻辑控制器--->循环控制器
配置:次数
循环控制器中的循环次数配置m与线程组中的循环次数n配置对比:
- 关系:如果同时配置,循环控制器下HTTP请求实际执行的次数应该是n*m
- 区别:这两个循环次数作用域不同
ForEach控制器
与用户定义的变量或正则表达式提取器配合使用,循环读取返回的变量值,执行一次或多次。
-
与用户定义的变量配合
添加:线程组--->逻辑控制器--->ForEach控制器
配置:
-
用户定义的变量
- 变量名:固定前缀+连续数字
-
ForEach控制器
- 变量前缀:用户定义的变量中配置的固定前缀
- 起始数字:连续数字的最小值-1
- 结束数字:连续数字的最大值
- 输出变量名称:依次读取变量值后存储到参数中,共HTTP请求来引用
-
HTTP请求:
- 引用输出的变量名称
-
-
与正则表达式配合使用
十、Jmeter定时器
同步定时器
需要进行大量用户的并发测试时,为了让用户能真正同时执行,添加"同步定时器"使其阻塞线程,直到线程达到了预先设置数值,才开始进行取样器操作。
配置:
-
并发数:同事达到多少用户才开始发请求
-
超时时间:
- 必须配置:否则当虚拟用户数无法被并发数整除时,会导致有部分用户挂起无法执行
- 配置不能太短:必须比并发数加载时间要长。否则无法达到并发数的要求,数据就会被释放掉
常数吞吐量定时器
用于性能测试中模拟用户产生业务压力,通过给定QPS来对服务器发送固定频率要求。
添加:线程组--->HTTP取样器--->常数吞吐量定时器
十一、Jmeter的分布式
原理:
- 分布式测试时分为一台控制机和多台代理机
- 控制机负责发布测试任务给代理机
- 代理机接收任务并向服务器发送请求,并接收服务器返回的响应,然后将测试结果返回给控制机
- 由控制机对测试结果数据进行汇总统计
分布式相关注意事项:
- 所有的测试机防火墙都已经关闭
- 所有的测试机及服务器在同一个网络内
- 所有的测试机的jmeter版本和JDK版本完全相同
- 关闭jmeter里的RMI SSL开关
分布式配置
配置
- 代理机
- server_port:不重复。如果使用多个机器做代理机,可不用配置
- 关闭RMI SSL
- 控制机
- remote_server:所有代理机的IP+port,有多个代理机时要使用逗号分隔
- 关闭RMI SSL
运行
- 代理机
- jmeter-server.bat运行
- 控制机:
- jmeter.bat运行
- 控制代理机执行脚本,运行--->远程启动所有
压测工具Jmeter介绍及使用
一、压测工具选型 1.1、前言
压力测试是每一个Web应用程序上线之前都需要做的一个测试,他可以帮助我们发现系统中的瓶颈问题,减少发布到生产环境后出问题的几率;预估系统的承载能力,使我们能根据其做出一些应对措施。所以压力测试是一个非常重要的步骤,关于java应用的压力测试,业界常用工具为Apache Jmeter。。 1.2、工具概述
Apache JMeter是Apache组织开发的基于Java的压力测试工具。用于对软件做压力测试,它最初被设计用于Web应用测试,但后来扩展到其他测试领域。 它可以用于测试静态和动态资源,例如静态文件、Java 小服务程序、CGI 脚本、Java 对象、数据库、FTP 服务器, 等等。JMeter 可以用于对服务器、网络或对象模拟巨大的负载,来自不同压力类别下测试它们的强度和分析整体性能。另外,JMeter能够对应用程序做功能/回归测试,通过创建带有断言的脚本来验证你的程序返回了你期望的结果。为了最大限度的灵活性,JMeter允许使用正则表达式创建断言。 Apache jmeter 可以用于对静态的和动态的资源(文件,Servlet,Perl脚本,java 对象,数据库和查询,FTP服务器等等)的性能进行测试。它可以用于对服务器、网络或对象模拟繁重的负载来测试它们的强度或分析不同压力类型下的整体性能。你可以使用它做性能的图形分析或在大并发负载测试你的服务器/脚本/对象。 二、压测工具安装 2.1、软件版本
本次测试,选择Jmeter官方最新版本进行。由于只有windows操作系统具备Jmeter的可视化界面,因此本次选择windows版本进行安装,以方便进行压测配置。 2.2、安装步骤
下载Jmeter:https://dlcdn.apache.org//jmeter/binaries/apache-jmeter-5.5.tgz
解压到指定文件夹:D:\\software\\Dev-Env\\Jmeter\\apache-jmeter-5.5
配置到环境变量:主要配置JMETER_HOME=D:\\software\\Dev-Env\\Jmeter\\apache-jmeter-5.5\\bin以及CLASSPATH配置%JMETER_HOME%\\bin;
运行Jmeter:在安装目录下bin文件夹,找到jmeter.bat,双击运行即可。成功后显示如下:
注意该窗口的提示信息,意思就是:不要使用GUI运行压力测试,GUI仅用于压力测试的创建和调试;执行压力测试请不要使用GUI。使用下面的命令来执行测试: jmeter -n -t [jmx file] -l [results file] -e -o [Path to web report folder]
三、应用平台压测(登录接口) 3.1、配置线程池
考虑到目前的用户量,配置500个线程,循环1次。
3.2、配置请求头
在我们刚刚创建的线程组上右键 【添加】-->【配置元件】-->【HTTP请求默认值】。配置我们需要进行测试的程序协议、地址和端口。
当所有接口测试访问域名和端口都一样时,可使用该元件,一旦服务器地址变更,只需要修改请求默认值。
3.3、配置接口HTTP请求
在“线程组”右键 【添加-】->【samlper】-->【HTTP 请求】设置我们需要测试的API的请求路径和数据。Taier登录接口用的form-data,需要在请求头进行设置。
3.4、添加请求头
上一步骤中涉及到的数据请求方式等,都可以在此配置。
3.5、添加断言
在我们刚刚创建的线程组上右键 【添加】-->【断言】-->【响应断言】。根据响应的数据来判断请求是否正常。我在这里只判断的响应代码是否为200。还可以配置错误信息
3.6、添加查看结果树
在我们刚刚创建的线程组上右键 【添加】-->【监听器】-->【察看结果树】。直接添加,然后点击运行按钮就可以看到结果了。
3.7、添加汇总报告
在我们刚刚创建的线程组上右键 【添加】-->【监听器】-->【Summary Report】。直接添加,然后点击运行按钮就可以看到结果了。
3.8、保存执行计划
3.9、执行测试计划
前面我们说过,执行测试计划不能用GUI,需要用命令行来执行。
jmeter -n -t Taier平台压力测试.jmx -l result.txt -e -o taierLoginWebReport
在命令行执行以上命令
结束之后会在当前目录下生成压测报告、压测结果和压测日志
jmeter.log result.txt 3.10、获取压测报告
进入压测报告文件夹,双击打开index.html即可获取压测报告详情。 总体报告:
响应报告
以上是关于测试基础jmeter工具介绍及使用方法的主要内容,如果未能解决你的问题,请参考以下文章