既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上软件测试知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
全干工程师神器 - Jmeter 05 - Jmeter配置元件
全干工程师神器 - Jmeter 06 - Jmeter后置处理器
全干工程师神器 - Jmeter 07 - Jmeter监听器
全干工程师神器 - Jmeter 08 - 如何利用Jmeter进行接口测试
全干工程师神器 - Jmeter 09 - Jmeter持续集成介绍及轻量级接口自动化测试框架
全干工程师神器 - Jmeter 10 - Jmeter持续集成介绍及轻量级接口自动化测试框架(思维导图)
文章目录
-
一、Jmeter基础与常见问题
-
- Jmeter基础知识与安装
-
- Jmeter安装
-
Jmeter目录结构
-
Jmetre 对比 Loadrunner
-
Jmeter常用组件和概念介绍
-
- 基本概念
-
Jmeter组件作用域和执行顺序介绍
-
- 组件作用域
-
- 作用域示例1 [参照下图]
-
作用域示例1 [参照下图]
-
执行顺序
-
最新版本Jmeter插件的安装方法
-
Jmeter启动问题及使用切入点
-
- JDK版本问题
-
JVM问题
-
使用的切入点
-
二、关于Jmeter录制
-
- 录制工具 badboy
-
- 录制-badboy
-
录制-代理
-
三、Jmeter脚本项目小实战
-
- 测试步骤
-
- HTTP请求设置-保持默认即可
-
线程组属性/设置
-
监听器-聚合报告
-
Jmeter - 参数化
-
- 用户参数
-
- 察看结果树
-
CSV Data Set Config
-
- 多个变量参数化与单个变量参数化的区别
-
用户参数与CSV Data Set Config
-
Jmeter - 集合点
-
- 操作步骤
-
作用域
-
注意点
-
Jmeter—断言/检查点
-
- 断言/检查点
-
响应断言
-
响应断言的参数
-
- Apply to:响应作用范围
-
要测试的响应字段
-
模式匹配规则:
-
断言结果
-
- 增加"断言结果"
-
断言结果判定
-
Jmeter—关联/动态关联
-
- 步骤
-
Jmeter—web程序
-
- 项目背景
-
需求
-
场景
-
监控
-
步骤
-
注意点
-
监控内存及CPU等(jconsole)
-
Jmeter–FTP程序
-
- 需求
-
步骤
-
Jmeter—jdbc测试mysql数据库
-
- JDBC Connection Configuration
-
关于jdbc中文乱码的说明
-
Jmeter—分布式性能测试
-
- 原理
-
步骤
-
Jmeter 中的监听器以及测试结果分析
-
- 监听器
-
指标分析
-
jtl文件分析 —> 见test.jtl
-
Jmeter 调用第三方jar包
-
Jmeter - 测试webservice
-
概念
-
- Jmeter3.x测试webservice接口
-
生成唯一数UUID
-
四、常见逻辑控制器
-
- 简单控制器
-
ForEach控制器
-
switch控制器
-
如果if控制器
-
事务控制器
-
循环控制器
-
吞吐量控制器
-
随机 / 随机顺序控制器
-
- 随机控制器
-
随机顺序控制器
-
五、Jmeter定时器
-
- 固定定时器
-
高斯随机定时器
-
同步定时器 Synchronizing Timer
-
均匀随机定时器(Uniform Random Timer)
-
固定吞吐量定时器(Constant Throughput Timer)
-
BeanShell定时器(BeanShell Timer)
-
六、Jmeter配置元件
-
- HTTP请求默认值
-
作用域
-
HTTP信息头管理器
-
HTTP授权管理器
-
HTTP Cookie管理器
-
- Cookies是什么
-
Cookies的管理
-
- 自动管理Cookies
-
手动管理Cookies
-
用户定义的变量
-
- 实例
-
计数器
-
七、Jmeter后置处理器
-
- Debug Postprocessor
-
举例
-
作用域示例
-
Json Extractor
-
八、Jmeter监听器
-
- 常用监听器报告
-
- 查看结果树
-
Summary Report
-
聚合报告
-
- 聚合报告中的90%的理解
-
聚合图表(Aggregate Graph)
-
Jmeter也有Loadrunner一样的图形监控扩展
-
- Jmeter的痛点
-
扩展插件
-
PerfMon Metrics Collector
-
Response Times Over Time
-
Transactions per Second
-
Hits per Second
-
邮件观察仪
-
- 在QQ/163邮箱中开启pop3/smtp服务,并生成授权码,备用
-
在jmeter中添加邮件观察仪,并配置如下
-
点击test mail则会在对应邮箱中收到邮件
-
九、什么是接口?
-
- 接口类型以及特点
-
- HTTP
-
WebService
-
报文介绍
-
接口测试文档规范
-
- 文档重要性
-
接口文档规范
-
十、各类接口测试实战
-
- HTTP接口测试
-
- 第一种方法(需LR使用经验)
-
- Get接口
-
Post接口
-
第二种方法(需Jmeter使用经验)
-
- Get接口
-
Post接口
-
第三种方法(写代码_需要代码编写能力)
-
- 什么是jsoup?
-
环境准备
-
WebService接口测试
-
十一、接口测试辅助工具以及thrift接口介绍
-
- thrift介绍
-
十二、Jmeter’持续集成介绍
-
- 定义
-
价值
-
持续集成工具介绍
-
为什么选择Jenkins
-
Jenkins环境搭建及配置
-
- 介绍
-
使用Jenkins目的
-
安装
-
全局设置
-
十三、轻量级接口自动化测试(持续集成篇-概念)
-
- 一些思想和普及
-
接口测试的重要性
-
使用Jmeter做轻量级自动化测试
-
- 原因
-
十四、轻量级接口自动化测试(持续集成篇-实战)
-
- 实战
==================================================================================
-
Jmeter是开源的性能测试工具
[但我更觉得ta适合做接口的自动化测试]
-
纯Java语言编写,可移植性好,解压即用,比Loadrunner轻量
-
支持的协议也越来越多,但报表统计方面确实不如Loadrunner好用
-
Jmeter原理就是模拟真实用户的请求,发送给服务器端
附:需对HTTP请求和响应的常识以及状态码等有一定的了解
Jmeter安装
-
前置条件:安装好JDK并配置好环境变量,可自行百度或google
-
官网下载Jmeter:http://jmeter.apache.org/download_jmeter.cgi
-
启动:解压jmeter,到bin目录下双击jmeter.bat
Jmeter目录结构
bin目录是可执行文件。
jmeter的log在jmeter.log中查看。
jmeter.properties是修改默认属性的文件。比如,属性log_lever.JMeter可以设置改变 日志详细度。默认是info,可改为debug。
dosc下是jmeter的java dosc
printable_docs的usermanual子目录下是jmeter用户手册,其中component_reference.html是最常用的核心元件帮助手册
Jmetre 对比 Loadrunner
| 对比项 | Jmetre | Loadrunner |
| :-: | :-: | :-: |
| 安装 | 简单,下载解压即用 | 复杂,安装包很大对硬件有一定要求,安装时长大于1小时 |
| 录制/回放模式 | 支持 | 支持 |
| 支持的测试协议 | 较少,但支持用户自行扩展 | 较多,不支持用户自行扩展 |
| 分布式大规模压力测试 | 支持 | 支持 |
| IP欺骗 | 不支持 | 支持 |
| 图形报表 | 支持(较弱,但可扩展) | 支持(很强,图形报表一直是商业工具的强项) |
| 测试的逻辑控制 | 支持 | 支持 |
| 服务器硬件资源监控 | 支持 | 支持 |
| 功能测试 | 支持 | 不支持 |
-
测试计划:是根、是老大。所有的内容都是基于这个计划,都需要在这个测试计划 下进行。
-
线程组:设置jmeter按照什么样的场景运行的地方,其中的线程,大家可以理解为Loadrunner中的虚 拟用户数 setup
-
thread group:可用于执行预测试操作。类似Loadrunner中的init,可理解为 初始化。 teardown
-
thread group:可用于测试后动作。类似Loadrunner的end,其实就是测试
-
结束完成之后的清理性动作。(该动作不是必须性的,场景中能用的可以使用;用 不到,不使用也没关系)
-
sample:这里是创建各种请求类型的,用来模拟用户的请求。ta是在线程组下面创建 的,如果没有创建线程组,是看不到的。
-
逻辑控制器:类似编程语言里的if、for这些东东,后面会专门讲到。
-
定时器:用于设置操作之间的等待时间,类似Loadrunner中的思考时间。但不同的 是,Jmeter里的定时器,一旦设置,是对所有请求都生效的。
-
前置处理器:用于在实际的请求发出之前对即将发出的请求进行特殊处理,比如参 数化之类的。
-
后置处理器:对发出请求后得到的服务器响应进行处理,比如关联。
-
断言:就是Loadrunner中的检查点,用于检查测试中得到的相应数据等是否符合 预期。
-
监听器:对测试结果数据进行处理和可视化展示。如查看结果树、聚合报告。
基本概念
1、参数化
2、集合点
3、断言/检查点
4、关联
组件作用域
Jmeter并不像Loadrunner那样容易上手,ta里面杂乱的元件和不知道怎么弄的树形结构足以让很多初学者放弃学习热情了。
同时我们也发现里面有很多的元件,其实我们没必要把每个都弄的那么清楚,先把最重要的常用的吃透、搞清楚即可。后续碰到了再学习,这样学习成本会下降很多,同时也 不至于太受打击。
接下来,我们就看看元件及他们的执行顺序如何。
-
配置元件(config elements)会影响其作用范围内的所有元件。
-
前置处理程序(Per-processors)在其作用范围内的每一个sampler元件之前执行
-
定时器(timers)对其作用范围内的没一个sampler有效
-
后置处理程序(Post-processors)在其作用范围内的每一个sampler元件之后执行。
-
断言(Assertions)对其作用范围内的每一个sampler元件执行后的结果执行校验。
-
监听器(Listeners)收集其作用范围的每一个sampler元件的信息并呈现
-
sampler元件不和其他元件相互作用,因此不存在作用域的问题。
作用域示例1 [参照下图]
-
http1、2、3无作用域的概念
-
循环控制器:http2、3、图形结果
-
图形结果:http2、3
-
聚合报告:http1、2、3
作用域示例1 [参照下图]
-
固定定时器:http1
-
循环控制器:http2、3、图形结果、随机控制器
-
图形结果:http2、e
-
响应断言:jdbc
-
聚合报告:所有
总结:记住一句话,从各个元件的层次结构判断判断每个元件的作用域。
执行顺序
-
配置元件
-
前置
-
定时器
-
sampler
-
后置
-
断言
-
监听器
如果在同一个作用域范围内有多个同一类型的元件,则这些元件按照他们在测试计 划中的上下顺序一次执行。
不知道现在的插件安装方式是不是还是这样,哪位同学如果知道的话,还请不吝赐教。
在jmeter3.0之前的版本中,插件的安装方法需要自行去找相应的jar包然后放到对应的目录中。
但是在jmeter3.0版本之后的,插件的安装方法变了,大致步骤为:
1、https://jmeter-plugins.org/downloads/all/ 下载plugins manager ,放到jmeter的lib下的ext目录中
2、重启jmeter才可以生效。
3、重启jmeter后,选择菜单“选项”>“plugins manager”>之后在此对话框中进行 选择安装,要比之前的操作简单很多,所有可用插件均可在这里找到。
PS:有童鞋说看不懂英文......这世界上有个软件叫有道词典......
JDK版本问题
Jmetre 2.X版本 对应 JDK 1.6.XXXX 与 JDK 1.7.XXXX
Jmetre 3.X版本 对应 JDK 1.8.XXXX
JVM问题
参考下图
使用的切入点
问:Jmeter在什么情况下使用?
答:企业中真正应用场景比较多的是接口测试,既可以做接口的功能测试,也可以做接口的性能测试。
===============================================================================
说实话,Jmeter对录制的支持不好,所以不建议过分依赖录制,建议大家慢慢的学会手写请求, 基本都是界面操作,程度不难。相反,录制看似简单,其实会给后期调试脚本增加很多麻烦。【关于录制、了解即可】
-
badboy上的操作,只限于badboy只限于badboy本身的操作软件
-
关于badboy录制时候脚本弹出的 alert ,一直点“确定”即可
-
Jmeter的认知:一般情况下大家都会觉得jmeter是一款性能测试工具,其实在实际应用上,更偏向于功能上、接口上的自动化。对于没有脚本编程能力的测试人员来说,Jmeter是一款很好的选择。
-
自动重定向和跟随重定向 [这里不明白的话,可以参考 [http://blog.51cto.com/xqtesting/1766130]
]( )
录制-badboy
简介:
BadBoy是一款免费WEB自动化测试工具,其实就是一个浏览器模拟工具,具有录制和回放功能,支持对录制出来的脚本进行调试。同时支持捕获表单数据的功能,所以能够进行自动化测试。但目前用的多的是用来进行脚本录制,BadBoy支持将脚本导出为JMeter脚本。
JMeter录制脚本有多种方法,其中最常见的方法是用第三方工具badboy录制,另外还有JMeter自身设置(Http代理服务器+IE浏览器设置)来录制脚本,但用的多就是通过Badboy进行录制。
1、下载地址:http://www.badboy.com.au/
2、默认安装即可,弹出选择“alert”选择“是”
3、打开badboy工具,点击工具栏上的红色圆形按钮,在地址栏目中输入被试项目地址
4、录制完成后,点击工具旁边的黑色按钮,结束录制。选择“文件”–Export to Jmeter
5、打开Jmeter工具,选择“文件”–>“打开”选择刚才保存的(.jmx类型)文件,将文件导入进来。
6、演示录制
录制-代理
不推荐使用带理:
1、配置比较复杂
2、因代理的问题造成无法正常上网,甚至会重装系统。
3、仅做了解即刻。
设置代理:
1、创建一个线程组(右键点击“测试计划”—>“添加”—>“线程组”)
2、在“工作台”-非测试原件-添加“HTTP带理服务器”
3、代理服务器的端口,默认8080,可自行修改,但不要与其他应用端口冲突。
4、目标控制器:录制的脚本存放的位置,可选择项为测试计划中的线程组(根据实际情况来选择即可)。
5、分组:对请求进行分组。“分组”的概念是将一批请求汇总分组,可以把URL请求理解为组。
· “不对样本分组”:所有请求全部罗列
· “在组间添加分隔”:加入一个虚拟的以分割线命名的动作,运行通“不对样本分组”,无实际意义。
· “每个组放入一个新的控制器”:执行时按控制器给输出结果
6、“只存储每个组的第一个样本”:对于一次URL请求,实际很多次http请求的情况
7、点击“启动”
==================================================================================
1、被测试网站: xqtesting.blog.51cto.com
2、指标:响应时间及错误率
3、场景
1、测试计划
2、线程组
3、HTTP请求
4、监听器
5、运行脚本
6、查看报告
HTTP请求设置-保持默认即可
-
名称:本属性用于标识一个取样器,建议使用一个有意义的名称。
-
注释:对于测试没有任何作用,仅用户记录用户可读的注释信息
-
服务器名称或IP:HTTP请求发送的目标服务器名称或IP地址
-
端口号:目标服务器的端口号,默认值为“80”,后面的超时定义可以不用填写
-
协议:向目标服务器发送HTTP请求时的协议,可以是http亦或https,默认值是http
-
方法:发送HTTP请求的方法,可用方法包括GET、POST、HEAD、PUT、OPTIONS、TRACE、DELETE等。
-
Content encoding:内容的编码方式。
-
路径:目标URL路径(不包括服务器和端口)
-
自动重定向:如果选中该选项,当发送HTTP请求后得到的响应是302/301时,Jmeter 自动重定向到新的页面。
-
Use keep Alive:当该选项被选中时,jmeter和目标服务器之间使用 Keep-Alive方式
进行HTTP通信,默认选中。
Keep-Alive:持久长连接
-
Use multipart/form-data for HTTP POST:当发送HTTP POST请求时,使用Use multipart/form-data方法发送,默认不选中。
-
同请求一起发送参数:在请求中发送URL参数,对于带参数的URL,jmeter提供了 一个简单的对参数化的方法。用户可以将URL中所有参数设置在本表中,表中的 每一行是一个参数值对(对应RUL中的名称1=值1)
-
同请求一起发送文件:在请求中发送文件,通常,HTTP文件上传行为可以通过这 种方式模拟。
-
从HTML文件获取所有有内含的资源:当该选项被选中时,jmeter在发出HTTP请 求并获得响应的HTML文件内容后,还对该HTML进行Parse并获取HTML中包含
的所有资源(图片、flash等),默认不选中,如果用户只希望获取页面中的特定资源,可以在下方的Embedded URLs must match 文本框中填入需要下载的特定资源表达式,这样,只有能匹配制定正则表达式的URL指向资源才会被下载。
-
用作监视器:此取样器被当成监视器,在Monitor Results Listener中可以直接看到 基于该取样器的图形化统计信息。默认为不选中。
-
Save response as MD5 hash : 选中该项,在执行时仅记录服务端响应数据的MD5值,
而不记录完整的响应数据。在需要进行数据量非常大的测试时,建议选中该项以减 少取样器记录相应数据的开销。
线程组属性/设置
-
线程数:虚拟用户数
-
ramp up period:设置的虚拟用户数需要多长时间全部启动。如果线程数为20,时 间为10,也就是每秒钟启动2个线程。
参考:https://blog.csdn.net/sunwangdian/article/details/50738870
-
循环次数:每个线程发送请求的次数。如果线程数为20,循环次数为100,那么每 个线程发送100次请求。总请求数为20*100=2000.如果勾选了“永远”,那么所有 线程会一致发送请求,一到选择停止运行脚本。
-
调度器:可以更灵活的设置运行时间等。
监听器-聚合报告
附:保存文件的后缀 jtl 单位:毫秒
-
Lable:定义HTTP请求名称
-
Samples:表示这次测试中一共发出了多少个请求
-
Average:平均响应时长—默认情况下是单个Request的平均响应时长,当使用了Transaction Controller时,也可以以Transaction为单位显示平均响应时长。
-
Median:中位数,也就是50%用户的响应时长。
-
90%Line:90%用户的响应时长。
-
Min:访问页面的最小响应时长。
-
Max:访问页面的最大响应时长。
-
Error%:错误请求的数量/请求的总数
-
Throughput:默认情况下表示每秒完成的请求数(Request per Second),当使用了
Transaction Controller 时,也可以表示类似 LoadRunner 的Tranaction per Second数。
- KB/Sec:每秒从服务器端接收到的数据量。
参数化的两种实现方式 用户参数
与 CSV Data Set Config
用户参数
察看结果树
CSV Data Set Config
多个变量参数化与单个变量参数化的区别
单个变量
多个变量
- 多个变量的情况下,使用“,”【英文格式】逗号作为分隔符,将关键字进行分隔.
用户参数与CSV Data Set Config
关于"用户参数"
与"CSV Data Set Config"
哪个元件用来做参数化更有优势,没有标 准答案,"两者都可以用"
,主要看使用者更倾向于哪一个。
一般情况下,参数化数据量
不是很大的情况下,使用用户参数
更为简便
些。
如果参数化数据量比较大
的情况下,比如开发导出来的CSV文件,CSV Data Set Config
要比用户参数
来说更有优势
些。
可以理解为“增加并发、模拟并发”
定义:
简单的说,虽然我们的“性能测试”理解为“多用户并发测试”,但真正的并发是不存在的, 为了更真实的实现并发这概念,我们可以在需要压力的地方设置集合点,每到输入用户 名和密码登录时,所有的虚拟用户都相互之间等一等,然后,一起访问。
如淘宝的秒杀,多个用户同时进行一个操作。
注意:
1、jmeter集合点通过添加定时器来完成。
2、JMeter里面的集合点通过添加定时器来完成。
3、Synchronizing timer仅作用于同一个JVM中的线程。
查看下文“注意点”处的补充。
操作步骤
注意:
- Number of Simulated Users to Group by:
每次释放的线程数量。如果设置为0,等同于设置为线程租中的线程数量。
可理解为集合多少人后再执行请求
- Timeout in milliseconds:
如果设置为0,Timer将会等待线程数达到了"Number of Simultaneous Users to Group"中设置的值才释放。如果大于0,那么如果超过Timeout in milliseconds中设置的最大等待时间(毫秒为单位)后还没达到"Number of Simultaneous Users to Group"中设置的值,Timer将不再等待,释放已到达的线程。默认为0。
- 如果设置Timeout in milliseconds为0,且线程数量无法达到"Number of Simultaneous
Users to Group by” 中设置的值,那么Test将无限等待,除非手动终止。
作用域
如果希望定时器仅应用于其中一个sampler,则把该定时器作为子节点加入,如下图
定时器仅仅对HTTP请求1起作用,即仅在HTTP请求1执行前执行定时器,和HTTP请 求2无关。
如果希望synchronizing timer
应用于多个sampler
.
如下,执行HTTP请求1和HTTP请求2前都会执行同步定时器1、2。当执行一个sampler 之前时,和sampler处于相同作用域的定时器都会被执行;
注意点
问:集合点的位置一定要在Sample(采样器)之前才能生效吗?
答:在Jmeter中,timer是在sampler之前执行的。
不管这个定时器的位置放在sampler之 后,还是之前。当然,如果有多个timer的时候,在相同作用域下,会按上下顺序执行 timer,这个就需要慎重放置timer的顺序;不过,为了更好的可读性,还是建议将timer放在对应的sampler前面 或 子节点中;
关于Synchronizing timer
补充: Synchronizing timer 仅作用于同一个JVM中的线程。
- a.如果分布式测试时
synchronizing timer作用于所有jvm,那么jvm之间或者说监控jvm 工作的部件就需要频繁通讯,确定线程的数量及状态等,然后集结了足够的线程后,又要发送信号让Jmeter来发送测试请求,中间存在延时,这样就无法模拟更真实的高并发了,而且这个东西还会消耗测试机器的一部分性能,会给测试结果带来负面影响;所以暂时是只支持控制单个jvm,如果后面有办法解决上面那些问题后,就可以实现控制多个jvm,控制总并发量;
- b.如果分布式测试
并使用了Synchronizing timer,且设置的值是小于单个jvm的线程数量;但是,较难确保所有jvm都在同一时间点集结了同样数量的线程数,这样就很难下测试结论了,因为都不知道是多少并发下的性能表现;当然了,可以将线程的启用时间拉长,并将超时时间延长,这样就很可能会与同一时刻集结到足够的线程,达到超高并发的测试;所以,分布式测试与Synchronizing timer一般不是同时使用的;如果非要用,则需要慎重设置相关参数
关于集合点,在实际应用中基本上是不用的,或者说非常少非常少用。
其实,仅仅就集合点来说,影响性能么?答案:影响。那么影响大么?答案:其实也不是太大。
因为一个系统能够承受的并发数和压力取决于两点。
- 取决于业务脚本里的思考时间
同样的并发、同样压力情况下,若思考时间不同,能够承受的压力也是不同的。
- 取决于系统真正的处理能力,或者说 TPS【系统吞吐量,亦说QPS】,TPS每秒处理的能力越高,那么处理压力的能力相对来说就会多一些。
按照Jmeter官方的翻译过来叫“断言”,其实功能与LoadRunner的“检查点”是一样 的,叫法不一样罢了(文字游戏)
断言/检查点
对响应的结果做一个判断。
响应断言
注意点
1、模式匹配规则
2、要测试的模式
响应断言的参数
Apply to:响应作用范围
1、Main sample and sub-samples:断言应用于主采样器和子采样器。
2、Main sample only:断言仅应用于主采样器。
3、Sub-samples only:断言仅应用于子采样器。
4、Jmeter Variable:断言将被施加到命名变量的内容,变量值进行匹配
要测试的响应字段
1、响应文本:指页面返回的http文本内容 。
2、响应代码:指请求返回的状态,如200 。
3、响应信息:指请求返回的响应信息,如OK、not found 。
4、Response Headers : 响应头信息 。
5、Request Headers :请求头信息。
6、剩余几个还不了解~~
模式匹配规则:
1、包括=返回结果包括你指定的内容,支持正则匹配
2、匹配:
(1)相当于 equals 。当返回值固定时,可以返回值做断言,效果和equals相同
(2)正则匹配 。 用正则表达式匹配返回结果,但必须全部匹配。 即正则表达式 必须能匹配整个返回值,而不是返回值的一部分。
3、Equals ::返回结果与指定断言完全一致
4、SubString:与 “包括”差不多,都是指返回结果包括你指定的内容,但是SubString不支持正则字符串。
断言结果
对“响应断言”的“断言结果”进行再次的判断
增加"断言结果"
断言结果判定
- 成功
如果成功,“断言”一栏显示请求地址
- 失败
如果失败,“断言”一栏请求地址下方显示报错原因。
1、和LoadRunner中的关联差不多
2、Jmeter中关联的两种方式:正则、xpath(一般xml的时候用的多)
正则:一般用的比较多的是正则
XML:返回的数据是XML格式的情况,用XML居多
3、以webtours登录威力进行演示 webtours.jmx
webtours:LoadRunner自带的
步骤
1、webtours开启关联
2、badboy录制
3、导入Jmeter
4、找出需要关联的请求(nav.pl)
5、该请求 --> 后置处理器 --> 正则 --> 填入内容
6、增加断言
7、增加断言结果
8、运行查看
-
模板:如果前面的正则表达式取了不止一个参数,那么这里需要制定参数的组别,如果该参数为 1 1 1,则表示取得第一个值, 2 2 2表示取得第二个值
-
匹配数字:0随机; -1取所有值,以数组形式存储; 1; 2…
-
缺省值:一般默认即可(为空)
项目背景
-
XX网站
-
环境:Windows
需求
- 并发登录的性能
场景
-
1s增加2个线程;运行2000次。
-
分别查看20、40、60并发下的表现
监控
-
成功率、响应时间、标准差、CPU、MEM、IO等
-
资源监控需要在Windows / Linux下部署监控agent (server agent)
步骤
-
badboy录制
-
导入jmeter
-
参数化、检查点、集合点
-
指标监控,资源监控
-
报告(可导出到xls,然后自行生成报表)
-
演示login.jmx
注意点
关于 “聚合报告 --> 响应数据” 中文乱码解决方法
监控内存及CPU等(jconsole)
最近逛论坛的时候,发现了一个比较好的监控内存CPU等的小工具,本着开源小工具多 多益善的原则,记录一下。
打开这个小工具的步骤很简单,如果你已经配置好了Jmeter运行的环境,那么你也就 不用去做其他的配置,直接 点击:开始——》运行——》输入cmd——》然后在出现的 命令行界面输入“jconsole”即可弹出一个【java监视和管理控制台】
需求
-
上传一个文件到服务器(put)
-
下载一个文件到本地(get)
步骤
-
打开Jmeter
-
线程组
-
ftp请求缺省值(可有可无)
-
ftp请求(get和put两种)
-
如果有用户名和密码填上即可
JDBC Connection Configuration
测试计划需加载Jar包
参考链接:https://blog.csdn.net/u012167045/article/details/72638507
参考链接:https://jingyan.baidu.com/article/f96699bbf5d092894e3c1b87.html
这张图好像有点失帧了,凑合吧…
关于jdbc中文乱码的说明
第一步:请确认你在数据库中写sql出来的中文是正常显示的,并没有出现问号或乱码, 如果出现那是数据库编码的问题,和jmeter无关;
第二步:在第一步确认的前提下,修改jmeter jdbc databaseurl
为
jdbc:mysql://localhost:3306/mysql?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true
,前面的链接地址和端口以及数据库名根据实际情况修改,后面的参数固定,这样就可以解决问号乱码的问题了。
Jmeter由java开发,耗内存、cpu,所以大并发下还是需要分布式的。
原理
其实和LoadRunner的agent差不多,如下图所示。
-
调度机(Controller):主要负责性能测试脚本的分发,及各个执行机(Slave)的测试 结果收集汇总,报告产出。
-
执行机(Slave):主要负责执行性能测试脚本及断言等(命令行模式执行,无界面), 并将执行结果反馈给调度机(Controller),若断言执行成功则不返回请求响应数据及 详细断言信息。
步骤
-
关闭防火墙
-
在所要运行Jmeter并作为负载生成器的机器上安装Jmeter,并确定其中一台机器作
为主的controller,其他的机器作为agent。然后运行所有的agent机器上的
jmeter-server文件.【Win系统运行“jmeter-server.bat”、Linux运行“jmeter-server”】
- 在controller机器的jmeter的bin目录下,找到jmeter.properties文件
- 启动controller机器上的Jmeter应用,选择菜单“运行” —> “远程启动”,来
分别启动agent,也可以直接选择“远程全部启动”来将所有的agent启动。
监听器
-
种类繁多…看界面
-
常用的几个
-
断言结果
-
查看结果树
-
聚合报告
-
用表格查看结果
-
图形结果
-
aggregate graph
-
等等…
指标分析
-
Samples:表示本次场景中一共发出了多少个请求。
-
Average:平均响应时间—默认情况下是单个Request的平均响应时长,当使用了
Transaction Controlle
r时,也可以以Transaction为单位显示平均响应时长。
-
Median:中位数,响应时间中值,也就是50%用户的响应时长。
-
90%Line:90%用户的响应时间。
-
Min:访问页面的最小响应时间。
-
Max:访问页面的最大响应时间。
-
以上时间单位为毫秒…不要弄错了
-
Error%:出错率;错误请求的数量/请求的总数
-
Throughput:吞吐量。默认情况下表示每秒完成的请求数(Request per Second),当使用了
Transaction Controller
时,也可以表示类似 LoadRunner 的Tranaction per Second
数。 -
KB/Sec:流量。每秒从服务器端接收到的数据量。
jtl文件分析 —> 见test.jtl
- 在性能测试过程中,我们往往需要将测试结果保存在一个文件当中,这样既可以保
存测试结果,也可以为日后的性能测试报告提供更多的素材。
- Jmeter中,结果都存放在“.jtl”文件。这个“.jtl”文件可以提供多种格式的编写,
而一般我们都是将其以CSV文件格式记录。
- 只需要选择某个监听器,点击页面中的configure按钮。此时,一个设置页面就会弹
出来,建议都勾选如下项:Save Field Name , Save Assertion Failure Message
-
经过了以上设置,此时保存下来的“.jtl”文件会有如下项:
-
timeStamp,elapsed,lable,responseCode,responseMessage,threadName,
dataType,success,failureMessage,bytes,Latency
- 请求发出的绝对时间,响应时间,请求的标签,返回码,返回消息,请求所属 的线程,数据类型,是否成功,失败信息,字节,延迟。
-
有时候我们在测试接口的时候需要调用第三方Jar包来完成。比如,某些数据的加密需要调用加密的Jar包,在Jmeter里可以很方便的完成。
-
Jar包 找开发要!找开发要!找开发要!
-
“测试计划”一栏下方调用Jar包
-
大致步骤如下:
-
获取需要调用的Jar包
-
Jmeter的测试计划中天加Jar包
-
通过beanshell sample 进行调用并保存结果
-
在Jmeter中需要用到该值的地方直接使用即可
参考链接:jmeter完成md5加密的接口请求参数
附:jmeter3.2版本之后就没有SOAP/XML-RPC Request插件了,所以没办法直接进行 webservice接口的测试。(了解即可)
-
官方解释:Web Service是一种可以接收从Internet上的其他系统传递过来的请求,轻量级的独立的通讯技术。通过SOAP协议完成,使用WSDL文件进行描述内容。
-
粗暴解释:当作一个接口,和HTTP没区别。完成请求,请求的时候完成入参,响应的时候完成出参,响应的时候有返回及返回的参数。
-
接口请求中的一种。
-
接口的本质其实就是发送请求和响应的一个过程。
Jmeter3.x测试webservice接口
附:jmeter3.2版本之后就没有SOAP/XML-RPC Request插件了,所以没办法直接进行webservice接口的测试。
生成唯一数UUID
============================================================================
无任何实际作用,也不参与脚本运行,可以理解为就是一个分组或者打标签用的。
ForEach控制器在用户自定义变量中读取一系列相关的变量。该控制器下的采样器或控 制器都会被执行一次或多次,每次读取不同的变量值。
所以ForEach总是和(用户定义的变量)一起使用的。
根据给定表达式的值决定是否执行该节点下的子节点,默认使用javascript的语法进行 判断。当满足一定的条件,运行指定的请求。
-
名称:IF逻辑控制器的简述。
-
注释:对逻辑控制器的详细描述。
-
条件:判断条件,可以引用变量。当为 true 时,执行响应的操作。
1、事务控制器会生产一个额外的采样器,用来统计该控制器子结点的所有时间。
2、会生成一个额外的采样器来测量其下测试元素的总体时间。值得注意的是,这个时间包含该控制
器范围内的所有处理时间,而不仅仅是采样器的。
3、统计事务控制器底下的子节点运行的时间
Generate Parent Sample不选中情况下,用表格察看结果显示为[下图]
其中事务采样器采集的数据排在子采样器数据之后,同时各列数据略大于子采样器数据之和。
Generate Parent Sample选中情况下,用表格察看结果显示为[下图]
其中仅显示事务采样器采集的数据,而不会显示子采样器采集的数据。
循环控制器下子节点的次数
“循环控制器"的“循环次数”等于子节点的请求次数。
当"线程组"也存在循环次数时,
请求的次数为"线程组-循环次数” *
“循环控制器-循环次数”的"积”。
控制子节点运行的次数
Per User选项的用处:
勾选:会按照每个线程单独计算吞吐量,如线程组设置了5个线程,循环次数为2的情 况,吞吐量为1时,吞吐量的子节点每个线程执行一次,总共会执行5次。
不勾选:按照全局的执行数次进行计数,如线程组设置了5个线程,循环次数为2的情 况,吞吐量为1时,吞吐量的子节点仅会执行一次。
随机控制器
随机的选择子节点下的请求去运行
随机顺序控制器
子节点下的请求都执行,但是执行的请求是随机的。
例:如果“随机顺序控制器”下的请求有两个、循环5次。那么请求共执行10次,顺序随机。
==============================================================================
可以理解为间隔时间、停留时间、思考时间
规则:
- 1、定时器执行于每一个sampler(HTTP请求) 之前,如有多个sampler(HTTP请求),在同一层级的情况下,作用于多个sampler。
- 2、若定时器作为子节点,则该定时器仅作用于某一个sampler。
设置一个固定的停顿时间,停顿时间过后,才会执行下一步请求。
单位:毫秒
设置循环2次,执行过程中能够明显看到两次,请求之间的时间间隔。
基本同上,只是定时器的延时时间是在指定范围内的正态分布。
类似LoadRunner的集合点,和(rendezvous point)差不多的功能。
在该定时器处,使线程等待,一直到指定的线程个数达到后,再一起释放。可以在瞬间 制造出很大的压力。
同上,延时时间是在指定范围内,并且每个时间取值的概率相同。
固定吞吐量定时器(Constant Throughput Timer)
可以让JMeter以指定数字的吞吐量(即指定TPS,只是这里要求指定每分钟的执行数, 而不是每秒)执行。吞吐量计算的范围可以为指定为当前线程、当前线程组、所有线程 组,并且计算吞吐量的依据可以是最近一次线程的执行时延。
这种定时器在特定的场景下,还是很有用的。
这个定时器,平时用不上。但实际上,它是最强大的,因为可以自己编程实现想要干的 任何事。
有复杂需求时,就要靠它了。例如,希望在每个线程执行完等待一下,或者希望在某个 变量达到指定值的时候等待一下。
===============================================================================
设定一些缺省值、默认值
假如,我们创建一个测试计划有很多个HTTP请求,且都是发送到相同的server,这时 我们只需添加一个 Http request defaults组件(HTTP请求默认值)并设置“Server Name or IP”(服务器名称或IP),然后添加多个HTTP请求且不设置"server name or ip",这些 HTTP请求会默认使用Http request defaults组件(HTTP请求默认值)设置的值。
可以设置成全局变量,也可以设置成局部变量,当在线程外设置,线程内也设置了,使 用线程内的默认值。
使用HTTP信息头管理,可以帮助测试人员设定JMeter发送的HTTP请求头所包含的信 息。HTTP信息头中包含有”User-Agent"、“Pragma"、”Referer"等属性。尽可能放在线程 组一级。除非因为某些原因,测试人员希望不同的HTTP请求使用不同的HTTP信息头。
一般请求格式:
1、类似form表单—不填
2、参数json格式—application/json
3、参数是xml—text/xml
Content-Type
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上软件测试知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
ge/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5ri05pyb5Yqb6YeP55qE5ZOI5aOr5aWH,size_19,color_FFFFFF,t_70,g_se,x_16)
同上,延时时间是在指定范围内,并且每个时间取值的概率相同。
固定吞吐量定时器(Constant Throughput Timer)
可以让JMeter以指定数字的吞吐量(即指定TPS,只是这里要求指定每分钟的执行数, 而不是每秒)执行。吞吐量计算的范围可以为指定为当前线程、当前线程组、所有线程 组,并且计算吞吐量的依据可以是最近一次线程的执行时延。
这种定时器在特定的场景下,还是很有用的。
这个定时器,平时用不上。但实际上,它是最强大的,因为可以自己编程实现想要干的 任何事。
有复杂需求时,就要靠它了。例如,希望在每个线程执行完等待一下,或者希望在某个 变量达到指定值的时候等待一下。
===============================================================================
设定一些缺省值、默认值
假如,我们创建一个测试计划有很多个HTTP请求,且都是发送到相同的server,这时 我们只需添加一个 Http request defaults组件(HTTP请求默认值)并设置“Server Name or IP”(服务器名称或IP),然后添加多个HTTP请求且不设置"server name or ip",这些 HTTP请求会默认使用Http request defaults组件(HTTP请求默认值)设置的值。
可以设置成全局变量,也可以设置成局部变量,当在线程外设置,线程内也设置了,使 用线程内的默认值。
使用HTTP信息头管理,可以帮助测试人员设定JMeter发送的HTTP请求头所包含的信 息。HTTP信息头中包含有”User-Agent"、“Pragma"、”Referer"等属性。尽可能放在线程 组一级。除非因为某些原因,测试人员希望不同的HTTP请求使用不同的HTTP信息头。
一般请求格式:
1、类似form表单—不填
2、参数json格式—application/json
3、参数是xml—text/xml
Content-Type
[外链图片转存中…(img-irKlOLXj-1715580796829)]
[外链图片转存中…(img-F4okt8fN-1715580796829)]
[外链图片转存中…(img-3jbqVUZZ-1715580796829)]
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上软件测试知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新