Jmeter学习笔记
- jmeter安装:
输入网址:http://jmeter.apache.org/download_jmeter.cgi
参考网址:http://blog.****.net/ala9981/article/details/50953266
- jmeter接口测试
需要:开发给的接口测试文档
找到Jmeter安装目录-bin-jmeter.bat 双击打开,创建一个线程组(一个线程组相当于用例集或一个用例)
在线程组上添加一个HTTP信息头管理器(用来保证发送的HTTP请求是正确的)
线程组--配置元件--HTTP信息头管理器,点击添加按钮来添加信息头的存储
content-type可参考网址:http://blog.****.net/Foreverlemon/article/details/74295729?locationNum=10&fps=1
集合点:多用户一起访问
JMeter里面的集合点通过添加定时器来完成。
学习链接:http://blog.****.net/zjq001x/article/details/53107159
多场景一起执行,可以设置多个线程组来实现,用户可以分批登录去进行场景模拟
http请求参数化方法:http://www.cnblogs.com/danmai/p/8245449.html
正则表达式:http://book.51cto.com/art/201204/327426.htm
对json数据返回进行字段统计:https://www.cnblogs.com/qinlijie/p/9212692.html
Jmeter-线程组执行顺序控制:https://www.cnblogs.com/yanzhe/archive/2017/10/26/7736083.html
逻辑控制器介绍:https://blog.****.net/sarah_yff/article/details/78223887
函数助手:https://blog.****.net/zmllovejj/article/details/70159332
参数随机取:
第一种方法:https://blog.****.net/wugang8023/article/details/71330191
第二种方法:https://www.cnblogs.com/liu-ke/p/6866610.html(代码实现)
参数化的方法:https://blog.****.net/dearmorning/article/details/71080661
注: 可以获取一个变量或者多个变量。https://blog.****.net/lluozh2015/article/details/54097449
性能测试报告模板:https://wenku.baidu.com/view/b50009f8700abb68a982fb02.html?sxts=1533534375813
Jmeter测试报告导出:https://testerhome.com/topics/12114(在jmeter的bin目录下执行)
详解:报告导出一次后,下一次导出则需要清空报告文件夹和jtl,命令如下:
首先要删除生成报告文件夹下所有文件,其次执行命令:
del /s /Q D:\yanjie\jmeter\apache-jmeter-3.3\apache-jmeter-3.3\bin\result.jtl(del删除jtl)
rd /s /Q D:\yanjie\jmeter\apache-jmeter-3.3\apache-jmeter-3.3\bin\HttpReport(rd是删除报告文件夹)
md D:\yanjie\jmeter\apache-jmeter-3.3\apache-jmeter-3.3\bin\HttpReport(md是重建报告文件夹)
jmeter -n -t D:\yanjie\jmeter\apache-jmeter-3.3\apache-jmeter-3.3\压力.jmx -l result.jtl -e -o D:\yanjie\jmeter\repost(执行程序并打印出报告)
测试报告分析:https://blog.****.net/wuyou10206/article/details/77539791
https://blog.****.net/huodoubi/article/details/60956124?utm_source=itdadao&utm_medium=referral
性能测试的目的和类型:https://blog.****.net/yuanjuxing/article/details/39638971
性能测试数值详解:https://blog.****.net/wind19/article/details/8600083
软件性能测试中关键指标的监控与分析:https://www.cnblogs.com/yunman/p/5482163.html
jmeter测试读取 .csv 文件出现第一个字符乱码的解决方法:https://blog.****.net/jiangqian6481/article/details/64516204
性能测试:
测试重点:
- 对压力测试报告数据进行分析
- 在jmeter测试请求运行开始后,监测服务器的各项指标
- CPU
- 内存
- IO
- 宽带
具体查看链接:https://www.cnblogs.com/yunman/p/5482163.html
性能监控工具的配置及使用 - Spotlight On Oracle(oracle):https://blog.****.net/u011391839/article/details/79983446
- 根据监控的数据进行分析,
- 响应时间不大于3s
- 吞吐量:当量上来之后慢慢加量,找到那个系统性能急剧下降的阈值(此时就要监控服务器指标,负载也是一项重要的指标)
Linux负载:https://www.cnblogs.com/baby123/p/6552537.html
- 并发数:在一定的时间范围内,最大的同时请求某一接口的用户数量
2.对多得出的数据进行整理,编写测试报告
性能测试报告模板:https://wenku.baidu.com/view/b50009f8700abb68a982fb02.html?sxts=1533534375813
实例1:(响应时间)
需求:APP中发现活动的一系列操作(发动态,评论,点赞),要求50个人连续操作20分钟,每个请求响应时间不能超过3s
遇到的问题:
- 如果直接设置线程进行运行,就会出现服务器崩溃的现象
解决:在进行压测时,每个请求设置一个吞吐量控制器,要求按一定的比例执行线程数
执行完之后,查看聚合报告、用表格查看结果、Times vs Threads的表格数据
聚合报告:
查看max的数据是否大于3000ms,若大于,则不符合要求,该请求需优化
同时结合90%line、95%line、99%line的数据进行查看,已获取验证码请求为例,该数据表示,该报告有90%请求的响应时间不大于78ms(原理:系统将响应时间从小到大排序,例如1~20数字排序,90%是18,从小到大数第18位的数字,也就是18,所以90%line为18),依次类推
用表格察看结果:
将每个请求所花的时间排序,就可以看到请求花费的最大时间,
总结:
- 我们所对比的响应时间是在请求成功的状态下进行的,个别请求不成功需要单独查看报错的原因(传参错误、接口本身错误或服务器崩溃等)
- 从以上截图数据来看,该项测试请求的响应时间均没有超过3s,测试合格
3.在压测过程中,会主从数据库断开的情况,是因为主数据库写入的数据太快,导致从数据库来不及读取数据从而断开,此现象需要优化(优化点:1.主从数据库搭建方式2.I/O问题,磁盘读写3.服务器方面优化)
实例2(吞吐量)
需求:
问题:
- 吞吐量和吞吐率的定义及其关系
吞吐率原指一个业务系统在单位时间内提供的产量(或服务量)。在计算机或数据通信系统,指的是单位时间内通过某通信信道(a communication channel)或某个节点成功交付数据的平均速率,通常以每秒比特数(bps, bits per second )为单位。
吞吐量是指对网络、设备、端口、虚电路或其他设施,单位时间内成功地传送数据的数量(以比特、字节、分组等测量)
接口测试:
接口测试实例1(单接口测试):
需求:测试管理后台接口
需要文档:管理后台的需求文档,接口文档(项目成熟后,自己抓包也可以)
测试步骤:
- 了解需求文档,根据接口文档编写接口用例(直接用.csv格式编写,后期传参用)
1.1测试用例的编写(下面是某个接口的文档)
查看该接口文档,知道了每个字段代表的什么意思之后,开始编写测试用例,其实和功能测试的用例设计一样
用例设计方法(写的很详细)https://blog.****.net/u011001084/article/details/79102967
前部分编写接口测试字段名及其对应的数值,后半部分编写测试用例(可多列编写),每个字段可看做是一个输入框去设计用例,用边界值等价类设计
要考虑空值null,也考虑字段其本身含义,就像该接口的ts字段,其实是个时间戳,按期含义可以设计时间上的相关用例
1.2根据用例编写测试脚本
1.2.1首先.csv文件要修改格式为utf-8,不然脚本获取参数为乱码
方法:第一步:用excle创建文件,另存为.csv格式
第二步:用记事本打开.csv文件,然后另存为utf-8格式
1.2.2按照接口文档进行接口脚本编写(参数化方式与TXT文档一致),脚本如下
1.3运行测试脚本
1.3.1运行测试脚本时设置线程数,一般多少条用例就设置多少个线程(自己理解的),这里有12条用例,就设置12个线程组,添加查看结果数,点击运行
1.4分析返回JSON值
1要对照请求数据获取的参数是否和用例的数值一致
2要对照返回响应数据是否与所给字段含义一致,与用例中的预期结果进行对比,若不一致与开发进行沟通,确定是否是bug
补充:
- 举例的接口测试比较简单,只是一个显示菜单的接口,若是修改菜单的接口,则还需要考虑修改成功后再次查看该菜单信息是否真的修改成功
- 单接口测试完成之后可以考虑安全性方面的接口测试(例如订单支付修改支付金额查看是否成功这类型的)
二、linux分布式部署jmeter:
1、control机和agent机器安装jdk和jmter,并配置环境变量:
export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_121
export JRE_HOME=/usr/lib/jvm/jdk1.8.0_121/jre
export JMETER_HOME=/root/lyl/apache-jmeter-3.1/bin
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib/rt.jar:$JMETER_HOME/lib/ext/ApacheJMeter_core.jar:$JMETER_HOME/lib/jorphan.jar:$JMETER_HOME/lib/logkit-2.0.jar:
export PATH=$PATH:$JAVA_HOME/bin:$JMETER_HOME/bin:
2、更改control机器上bin/jmter.properties文件:
更改remote_hosts=192.168.180.127:1099(agent机器ip),ip2
3、关闭agent机器防火墙:systemctl stop firewalld
4、更改agent机器本地hosts文件:vi /etc/hosts,将127.0.0.1改为本机ip
5、更改agent机器bin/jmeter-server文件: RMI_HOST_DEF=-Djava.rmi.server.hostname=slave机器名
6、启动agent机器/bin/jmeter-server服务
7、control机器发起测试:jmeter -n -t xx.jmx -R agent机器ip -l xxx.jtl