JMeter是Apache组织使用java开发的一款测试工具:Apache JMeter - Apache JMeter™
- 可以用于对服务器、网络或对象模拟巨大的负载
- 通过创建带有断言的脚本来验证程序是否返回期望的结果
优点:
- 开源、免费
- 跨平台
- 支持多协议
- 小巧
- 功能强大
缺点:
- 不支持IP欺骗
- 使用Jmeter无法验证JS程序,也无法验证页面UI,需要Selenium配合来完成Web2.0应用的测试
JMeter 安装
- 访问Apache JMeter - Apache JMeter™
- 选择符合您系统的软件包进行下载
- 解压即可
注意: Jmeter是使用Java编写的,必须安装java环境:JDK:java开发工具包,JREjava运行环境;如果是windows需要设置JAVA_HOME环境变量哦;
设置中文编码级
image.png
启动:
image.png
进程: 正在运行的程序
线程:是进程中的执行线索
线程组:进程中有许多线程,为了方便管理,可以对线程按照性质分组,分组的结果就是线程组
ps:三者关系,一个进程可以包含多个线程组,一个线程组可以包含多个线程;
如果存在多个线程组默认的执行时并发,可以通过设置测试计划中的独立运行每个线程组-复选框即可(例如在一个组运行结束后启动下一个)
setUP线程组:最优先执行的线程组
tearDown线程组:最后执行的线程组
HTTP默认请求值
配置元件-用户定义的变量/用户参数 ,配置完成之后引用的命令为:${name}
如果使用csv文件则需要注意文件的编码格式UTF-8,无BOM格式即可;
csv中也可以配置遇到文件结束符停止线程,在线程里设置永远即刻达到数据驱动;
参数化--函数(打开函数助手来找函数即可)
counter计数器函数true,每个用户有自己独立的计数器,false则是全局的计数器;
reandom随机数函数:一个范围内最小值,一个范围内最大值,区间是按照开区间进行的;
time当前时间戳函数:不设置参数直接生成则展示是时间戳,1970000到现在的时间换算成毫秒,Format参数填写:yyyy-MM-dd hh:mm:ss格式化时间
连接数据库
通过直接连接数据库让程序代替接口访问数据库,如果二者预期结果不一致,就找到了程序缺陷。
- Jmeter 不具备直接链接数据库功能,必须整合第三方jar包实现
- 配置数据库的链接:在测试计划中添加目录或jar到ClassPath中选择数据库的驱动jar包(注意mysql,sqlite,sqlservice的jar包是不一样的百度下载即可);
- 添加数据库链接配置:测试计划右键添加配置元件,JDBC Connection Configuaration
-
Variable Name for created pool: 数据库连接池的名字填入即可如:A
- Database URL:jdbc:mysql:///day17(数据库链接地址)(如果是远程服务器则写入IP地址即可) image.png
-
JDBC Driver calss 数据库驱动选择对于数据库驱动即可;
-
username:数据库账号
-
password:数据库密码
-
- 添加取样器中的JDBC Request请求想数据库发送SQL语句并接受提取相应结果,在Variable name Eound 同pool中选择刚才配置的数据库名称即可引用使用如:A;
- Query Type:增删改使用Update Statement,查使用Select Statement即可,下方进行编写sql语句,
2.其中Variable names设置完成后添加,取样器-调试取样器即可将该数据抽取出来,然后可以使用${name}进行访问即可
- Query Type:增删改使用Update Statement,查使用Select Statement即可,下方进行编写sql语句,
- 运行在查看结果树查看即可;
断言
断言:让程序代替人工判断相应结果是否符合预期
分类:
响应断言=断言状态码和响应体
大小断言=判断相应内容的字节长度
断言持续时间=判断相应时间
步骤:
- 添加取样器
- 给取样器添加断言组件
- 也可以添加断言相应结果树,直接运行查看结果即可;如果断言失败则会给出错误信息;
大小断言,判断得到的数据大小,大小如何查看?察看结果树的取样器结果中可以就可以查看到请求头,请求体,
整体大小size in bytes
headers size bytes
body size bytes
response code:200
相应消息体:response message:ok
断言持续时间
毫秒 5,
jmeter进阶
一、逻辑控制器:如果if控制器,(如果想要生效需要把对于的http拖入到if控制器中
下方有两个复选框都取消掉即可);
配置元件用户自定义的变量,在if逻辑中写下方判断即可;
"${val}"=="itcst"
如果是true则执行如果是false不执行
二、for Each控制器
在定义的时候需要用一样存在规律的进行,如name_1 name_2
在控制器中输入,变量前缀name
开始循环字段(不包含)0
结束循环字段(含)3
下方复选框勾进行勾选;
输出变量:val (在里面http调用时使用该变量)
循环控制器,只要是逻辑控制器必须是父级;增加配置即可;
三、xpath 提取器
添加后置处理器Xpath提取器,Use Tidy 进行勾选,
引用名称val
xpath query //title
匹配数字 1 获取匹配第一个;
缺省值:如果没有找到则替换您这里输入的值;
四、正则表达式提取器
引用名称:val
正则表达式:d,a其中?代表终止贪婪模式,不终止的话会将后面的内容全部给获取到的;
模板:$1$
,中间加逗号我就可以使用$2$
匹配数字
缺省值
五、跨线程组关联:
- 函数助手找到_setProperty设置全局变量,属性名称out,value of property ${val}
- 创建BeanShell取样器:将刚才的代码写入到脚本中即可;
- 获取全局变量:函数助手找到_property 属性名称 out 将代码放在需要的地方即可;
性能测试
一、高并发
添加同步定时器,100个线程,模拟用户组的数量:100,超时时间以毫秒为单位:10,如果不设置出现100人,用户组30当第4次调用时
如果超时时间为0则会出现死等现象,所以传递一个10;
异常:服务器运转情况
吞吐量:每秒钟能够访问多少次服务;
发送:每秒钟发送多少
接受:每秒钟接受多少
二、高频率
QPS每秒钟查询数
如一个用户每秒点击20次 的频率访问点击持续15秒,统计服务器的平均影响时间
添加常量吞吐量定时器,目标吞吐量每分钟的样本量:1200.0(每分钟访问次数=访问频率*60)
循环次数=访问频率*持续时间
;
三、分布式
多态机写作,以集群的方式完成测试任务,可以提高测试效率。
- 不同的测试机上安装jmeter
- 配置基础的环境统一操作系统,JDK、Jmeter
- 核心控制机如何与执行机通信?关键点 IP及端口号
- 控制机中设置执行机的IP
%JMETER_HOME%/bin/jmeter.properties-->remote_hosts=执行机A的IP:端口号,执行机B的IP:端口号,.... - 控制机和执行机都要设置远程访问相关属性:server.rmi.sll.disable=true
- 启动:点击运行下拉框,选择 远程启动所有,执行机的jmeter要进行待定(点击jmeter.bar即可)
练习1:模拟半小时之内1000个用户访问服务器资源,要求平均相应时间在3000ms内,却错误率为0;
半小时=30分钟,
答:用户组1000,ramp-UP时间(秒)1800(半小时):多少秒内执行打开10000个用户(弱压力测试场景)查看聚合报告是否满足要求平均相应时间在3000ms内,却错误率为0;
练习2:模拟100个用户同时访问服务器资源,要求平均响应时间在3000ms内,且错误率为0;
答:添加同步定时器设置100个用户访问即可;
练习3:模拟2个用户以每秒20QPS的频率访问服务器资源持续10秒,要求平均响应时间在3000ms内,且错误率为0;
答:线程组用户2个,http添加常数吞吐量定时器(每分钟,20X60得到每秒,每分钟走1200次每秒执行20次)1200.0,设置循环(一秒执行20测换算10那就是)200次
生成测试图形化测试报告
命令:jmeter -n -t 脚本文件 -l 日志文件 -e -o 目录
-n 无图形化运行
-t 被运行的脚本
-l 将运行的测试信息写入日志文件
-e 生成测试报告
-o 指定报告输出的目录
(./hm代表当前目录)
不过注意的是java版本如果太高可能会报
Error generating the report: org.apache.jmeter.report.dashboard.GenerationException: Error while processing samples: Consumer failed with message :Consumer failed with message :Consumer failed with message :Consumer failed with message :Begin size 0 is not equal to fixed size 5
安装兼容的java版本即可,
查看jdk安装版本,发现是17系列的。在网上查看教程发现需要更换成jdk8系列,具体安装步骤参照网上。
猜测应该是jdk17的兼容性问题。
也可以使用图形化的导出按钮进行:jmeter导出结果报告 - 简书 (jianshu.com)
扩展资料阅读:测试高级进阶技能系列 - Jmeter - 随笔分类 - 小菠萝测试笔记 - 博客园 (cnblogs.com)
网友评论