详细讲解Jmeter的各项操作
文章编写不易,如果观众姥爷觉得写的不错,麻烦点赞、收藏、评论、转发,感谢各位观众姥爷。
一、 JMeter安装
1.JMeter环境搭建
1>安装JDK
2>安装JMeter
2.JDK常用文件目录介绍
1>Bin目录:存放可执行文件和配置文件
日志:出错时可以来查看出错的详情,***报错可以百度方便解决。
2>docs目录:是jmeter的api文档,用于开发扩展组件
3>printable_docs目录:用户帮助手册
4>lib目录:存放jmeter依赖的jar包和用户扩展所依赖的jar包
【放进去,重启jmeter就行了】
3.JMETER中文修改
4.修改主题
二、 元件和组件
1.元件
1>定义:多个类似功能组件的容器(类似于类)
2.组件
1>定义:实现独立的某个功能(类似于 *** )
3.元件的作用域
1>是靠测试计划的树形结构中元件的父子关系来确定的。
2>原则:
4.执行顺序
5.示例
需求:使用JMETER访问百度首页接口,并查看请求和响应信息
步骤:
1) 启动JMETER
2) 在“测试计划”下添加“线程组”【线程组代表用户的组】
3) 在“线程组”下添加“HTTP请求”取样器
4) 填写“HTTP请求”的相关请求数据
5) 在“线程组”下添加“查看结果树”监听器
6) 点击“启动”按钮运行,并查看结果
三、 线程组和HTTP请求
1.线程组的特点和分类
1>定义:控制Jmeter用户执行测试的一组用户
2>位置:右键点击“测试计划”à添加à线程(用户)à线程组
3>特点:模拟多人操作;
线程组可以添加多个,多个线程组可以并行或串行;
取样器(请求)和逻辑控制器必须依赖线程组才能使用;线程组下可以添加其他元件下组件
4>分类
①线程组:普通的、常用的线程组,可以看做一个虚拟用户组,线程组中的每一个线程都可以理解为一个虚拟用户。可以1个或多个(并行/串行)
②setUp线程组:一种特殊类型的线程组,可用于执行预测试操作
③tearDown线程组:一种特殊类型的线程组,可用于执行测试后工作
5>参数详解
循环次数:是一个用户,永远勾上会一直跑下去;当设置永远的时候,会同步设置调度器
线程数:代表虚拟用户数,用户数越多,负载越大【压力越大】
循环次数:代表运行时间,次数越多,运行时间越长【稳定性测试】
2.HTTP请求
1>作用:向服务器发送http及http请求
2>位置:选中线程组à右键à添加à取样器àHTTP请求
3>参数:
【资源路径和查询参数分开写,路径部分不用写上?;请求参数发什么样就在消息体中写什么样;默认的端口号可以不输入,响应回来也不显示】
4>查看结果树
①作用:查看HTTP请求的请求和响应结果
②位置:选中测试计划/线程组à右键à添加à监听器à查看结果树
③组成:
取样结果:查看响应信息头信息、响应状态码
请求:查看请求相关信息(url、 *** 、参数)
响应:查看响应信息
四、 参数化
1.定义:把测试数据组织起来,用不同的测试数据调用相同的测试 *** 。
2.本质:实现测试数据与测试 *** 的分离。
3.JMeter中常见的参数化方式:
用户定义的变量; --全局变量
用户参数; --为每个用户分配不同的参数值
CSV Data Set Config; --文件方式参数化
函数; --随机数据
数据库……….
4.用户定义的变量
作用:定义全局变量
位置:测试计划à线程组à配置元件à用户定义的变量
参数:
引用变量格式:${变量名}
5.用户参数
作用:针对同一组参数,当不同的用户来访问时,可以获取到不同的值
位置:测试计划à线程组à前置处理器à用户参数
参数:
用户参数名和值可以变,请求引用参数时的名字不可变;多个用户数据时,要求改线程数;
引用变量格式:${变量名}
6.CSV数据文件设置
作用:当不同的用户,或者同一个用户多次循环时,可以取到不同的值
位置:测试计划à线程组à配置元件àCSV数据文件设置
参数:
引用变量格式:${变量名}
7.函数
1>counter函数
作用:计数函数,一般做执行次数统计使用
位置:在菜单中选择à选项à函数助手对话框
TRUE:每个用户有自己的计数器,同时访问时,可能计数数字一样;
FALSE:是所有用户统一计数,使得每个用户就算循环也不会重复计数;
8.总结
9.结果树中多个HTTP请求的原因分析
原因分析:
查看结果数中最外层HTTP请求的请求信息和响应信息,应该与子节点中最后一个HTTP请求的请求消息和响应消息一致;
配置的HTTP请求,应该与子节点中之一个HTTP请求的请求信息一致;
JMeter可以自动判断/处理响应状态码;
示例:
五、 断言
1.定义:让程序自动判断预期结果和实际结果是否一致
2.提示:JMeter在请求的返回层面有个自动判断机制〔响应状态码);但是请求成功了,并不代表结果一定正确,因此需要检测机制提高测试准确性。
提示:
- JMeter会自动判断响应状态码(如果状态码为4xx/5xx,判定为失败)
3.JMeter常用断言:响应断言; *** ON断言;持续时间断言
4.响应断言
①作用:对HTTP请求的任意格式的响应结果进行断言
②位置:测试计划à线程组àHTTP请求à(右键添加)断言à响应断言
③参数:
④参数配置详细介绍:
Ø 测试字段:要检查的项(实际结果)
响应文本:来自服务器的响应文本,即主体
响应代码:响应的状态码,例如:200
响应信息:响应的信息,例如:OK
Response Headers:响应头部
Request Headers:请求头部
Request Data:请求数据
URL样本:请求URL
Document(text):响应的整个文档
忽略状态:忽略返回的响应状态码【JMeter认为200是对的,有时要求返回的400是对的,JMeter会认为错的,因此需要忽略JMeter的自动判断】
Ø 模式匹配规则:比较方式
包括:文本包含指定的正则表达式
匹配:整个文本匹配指定的正则表达式
Equals:整个返回结果的文本等于指定的字符串(区分大小写)
Substring:返回结果的文本包含指定字符串(区分大小写)
否:取反
或者:如果存在多个测试模式,勾选代表逻辑或(只要有一个模式匹配,则断言就是OK),不勾选代表逻辑与(所有都必须匹配,断言才是OK)
注意:Equals和Substring模式是普通字符串(断言里用的比较多),而包括和匹配模式是正则表达式(关联里用的比较多)
Ø 测试模式:预期结果
即填写你指定的结果(可填写多个),按钮【添加】、【删除】是进行指定内容的管理
【任意HTTP请求的响应结果,都可以使用响应断言】
5. *** ON断言
①作用:对HTTP请求的 *** ON格式的响应结果进行断言
②位置:测试计划à线程组àHTTP请求à(右键添加)断言à *** ON断言
③参数:
反断言:取反
6.断言持续时间
①作用:检查HTTP请求的响应时间是否超出要求范围
②位置:测试计划à线程组àHTTP请求à(右键添加)断言à断言持续时间
③参数:
六、 关联
1.作用:当请求之间有依赖关系,比如一个请求的入参是另一个请求返回的数据,这时候就需要用到关联处理。
2.JMeter中常用的关联 *** :正则表达式提取器;XPath提取器; *** ON提取器
3.正则表达式
①定义:就是一个公式,或者说一套规则,使用这套规则可以从任意字符串中提取想要的数据内容
4.公式格式:左边界(.*?)右边界:可以提取出想要获取的数据内容
.:是通配符,可以代表任意字符(除换行回车)
*:代表前面的字符出现0次或者多次
.*:代表匹配任意字符。匹配规则:找到左边界值后,往右查找有边界,找到最后面的右边界,中间的所有数据都被记录下来
?:代表非贪婪匹配,找到左边界后,往右查找匹配右边界,只要有匹配的右边界就停止继续查找;再次查找左边界和右边界
例子:
5.正则表达式提取器
①作用:针对任意格式的响应数据进行提取
②位置:测试计划à线程组àHTTP请求à(右键添加)后置处理器à正则表达式提取器
③参数:
Debug Sampler:调试;【当取出所有时,可以在需要引用的请求中,直接引用上一个请求调试响应体中的数据名】
引用:以列表索引的方式来引用。格式:${变量名_索引,索引从1开始
总而言之:把需要替换的文字换成(.*?),相当于模糊查询中的文字。比如:查询XX地址,表示成(.*?)地址
6.XPATH提取器
①作用:针对HTML格式的响应结果数据进行提取
②位置:测试计划à线程组àHTTP请求à(右键添加)后置处理器àXPATH提取器
③参数:
6. *** ON提取器
①作用:针对 *** ON格式的响应结果数据进行提取
②位置:测试计划à线程组àHTTP请求à(右键添加)后置处理器à *** ON提取器
③参数:
7.JMeter属性【为了解决变量不能跨线程组传递】
1>属性的配置函数
_setProperty函数:将值保存成JMeter属性
点击生成拷贝函数
_property函数:在其他线程组中使用property函数读取属性
点击生成拷贝函数
2>属性函数的执行
_setProperty函数:需要通过BeanShell取样器来执行
把拷贝的函数放进来
_property函数:在其他线程组中使用property函数读取属性
把拷贝的函数放进来
七、 录制脚本
没有API文档时需要抓包或录制脚本
1.定义:在没有接口文档的旧项目当中,快速录制web页面产生的http接口请求,帮助编写接口测试脚本。
2.JMeter录制脚本原理:
录制时,把JMeter作为 *** 服务器来拦截和转发请求与响应数据
3.录制脚本的操作步骤
1>添加HTTP *** 服务器,并进行配置
①加HTTP *** 服务器:测试计划(右键)à非测试元件àHTTP *** 服务器
②配置 *** 服务器的参数
2>开启windows操作系统的浏览器 ***
3>启动 *** 服务器,开始录制
4.脚本过滤设置
八、 JMeter直连数据库
1.使用场景
2.操作步骤
①直连数据库的关键配置:添加MySQL驱动jar包
*** 一:在测试计划面板点击“浏览”按钮,将你的JDBC驱动添加进行
*** 二:将MySQL驱动jar包放入到lib/ext目录下,重启JMeter
②配置数据库连接信息
添加方式:测试计划à线程组à(右键添加)配置元件àJDBC Connection Configuration
- Password:密码
【执行SQL语句】
③添加JDBC请求
添加方式:测试计划à线程组à取样器àJDBC Request
九、 逻辑控制器
1.定义:可以按照设定的逻辑控制取样器的执行顺序
2.JMeter中常见的逻辑控制器:IF控制器;循环控制器;ForEach控制器
3.如果(IF)控制器
1>作用:用来控制它下面的测试元素是否运行
2>位置:测试计划线程组(右键添加)逻辑控制器à如果(IF)控制器
3>参数:
*** 语法格式:
“${XXXX}”==”XXXX”
函数形式:
4.循环控制器
1>作用:通过设置循环次数,来实现循环发送请求
2>位置:测试计划线程组(右键添加)逻辑控制器à循环控制器
3>参数:
4>循环控制器和线程组循环次数对比:
不同点:线程组的循环次数对线程组下的所有HTTP请求有效,循环控制器的循环次数对子节点下的HTTP请求有效。
关联:循环控制器次数为M,线程组循环次数为N
循环控制器下的请求运行:M*N次
线程组下,非循环控制器下的请求运行:N次
5.ForEach控制器
1>作用:一般和用户自定义变量或者正则表达式提取器一起使用,读取返回结果中一系列相关的变量。该控制器下的取样器都会被执行一次或多次,每次读取不同的变量值。
2>位置:测试计划à线程组à(右键添加)逻辑控制器àForEach控制器
3>参数:
用户定义的变量,命名规则:前缀_编号;结束循环字段为空,读取所有,直到没有值
十、 定时器
1.同步定时器
1>作用:阻塞线程(累积一定的请求),当在规定的时间内达到一定的线程数量,这些线程会在同一个时间点一起释放,瞬间产生很大的压力。
【提示:在JMeter中叫做同步定时器,在Loadrunner中又叫***点】
2>位置:测试计划à线程组àHTTP请求à(右键添加)定时器àSynchronizing Timer
【可以加一个聚合报告,查看结果:】
2.常数吞吐量定时器
1>作用:让JMeter按指定的吞吐量执行,以每分钟为单位
2>位置:测试计划à线程组àHTTP请求à(右键添加)定时器àConstant Throughput Timer
3>参数
3.固定定时器
1>作用:请求前的固定等待时间
2>注意:必须添加在需要等待的HTTP请求的子节点下
3>在HTTP信息头管理器中,修改HTTP请求的头域