本文主要是记录下在本公司项目中实际使用jmeter进行压力测试的过程以及遇到问题的解决方法,适合jmeter的初学者。
先放一张jmeter的界面
本页面是一个jmeter的测试计划(testplan)页面,项目中没有要求,所以只设置了测试计划的名称。
Constant Throughput Timer,固定定时器,图中Target throughput 是没分钟发送的请求数,60,就是每分钟60个,每秒一个并发
Calculate throughput based on指的是请求的控制方式,all active threads分配到每一个活跃的线程上,其他选项可自行百度。
线程组:名称注释,按需填写,在取样器错误后要执行的动作,按照自己的需求选择,默认继续,当取样器发生错误的时候继续运行。
线程数:可以简单理解为并发数
Ramp-Up Period:启动所有线程所需要的时间,举个例子,线程数5,启动所有进程所要的时间5,则上个线程和下个线程启动时间间隔时间为1s,线程越大,时间越短,对服务造成的负荷越大。
循环次数:线程执行的次数,当设置为1的时候,只执行1次,当勾选永远的时候,只要不停止,线程就一直执行。
Dely thread Creation needed:这个设置没有用到,查看资料说是如果不勾选,则开始的时候线程已经创建完成,如果勾选则在需要的时候创建线程。
调度器:开始时间结束时间,只线程开始和结束的时间,如果输入了持续时间,则会覆盖结束时间,如果输入了启动延迟,则会覆盖启动延迟,也就是说当设置了持续时间和启动延迟下边的启动时间和结束时间将不起作用。
请求头主要添加请求header部分的参数,如token,cookie,Content-type(主要用于服务器对请求设备有过滤的情况)
CSV Data set config:
这个设置是参数化时的常用设置,可放在需要参数化请求的前边,名称可根据自己需要设置
通常的做法是先新建文档如.txt文档,参数与参数之间用英文逗号“,”隔开,如
xiaowang,123456
xiaoli,12345678
表示两个用户的用户名和密码。
filename指的是文件名,这里很有意思的是如果你用win系统创建的文件,这里路径是没有问题的,但是如果你想在mac或者linux机器运行脚本或者作为从机进行分布式部署,很有可能会找不到文件,解决方法也不复杂,将参数文件放在jmeter下的bin目录下即可。
file-encoding是文件的字符集,如果没有特殊说明,设置utf-8没有错
Varable Names(comma-delimeited),参数化的参数名称,还以上文举例:name,password,对应上文提到的文档的xiaowang,123456,引用参数化用${name}对参数进行引用。
其他参数需要的时候再根据实际情况了解。
http请求才是这一次的主角,
名称,注释根据自己的需要自行填写
服务器名称或ip指请求的地址,如本地的:192.168.1.1 端口根据实际情况填写,如8080,http请求中可以选择请求的implementation,
1.若不对c参数和d参数进行URL编码则需要选择implementation为java;
2.若想不设implementation值,则需进行c参数d参数URLEncoding,本次我使用的是3.1。c,d参数在界面设置看不到,但是在命令行运行的时候会用到,我也会在最后实际运行脚本的时候描述下如何通过脚本运行。
请求方法:根据接口实际要求的请求方法设置,post,get等
路径:如果看接口文档,就是path那一部分。
参数:可以添加接口需要的参数等,我这里参数是一个当前时间(这是一个小技巧,主要用来请求返回时间和当前时间就知道端到端的响应时间)
查看结果树:用来显示请求的返回结果,可以写入到文件,也可以设置请求结果的展示形式,如text,html,json等
这个是设置断言的,设置断言之后,当请求返回结果与断言预期不一致时,则判断为请求失败。
监控服务器资源,这里我监控了一台服务器10.X.X.X:4444的内存和cpu,可以通过addrow监控其他资源,当然有一个前提,就是在服务端安装Serveragent,linux的安装步骤基本如下,通过shell工具上传文件到home目录,解压,运行,这里可能遇到的问题是运行时权限有问题,导致无法运行,运行指令chown root:/home/Serveragent+要运行的文件,chomd 755 /home/Serveragent+要运行的文件,然后运行文件,此时运行线程,就可以看到该线程组的要监控服务器的资源了。
这个是聚合报告,主要显示的是线程组在该轮测试中运行的结果,可以选择数据写入到文件和定义日志级别
jmeter的难点,网上普遍认为是在报告的查看,为了避免因为自己的水平带来的误导,这里只从其他地方粘贴一下字段代表的含义
Label----每个请求的名称,比如HTTP请求等
#Samples----发给服务器的请求数量
Average----单个请求的平均响应时间
Median----50%请求的响应时间
90%Line----90%请求响应时间
95%Line----95%请求响应时间
99%Line----99%请求的响应时间
Min----最小的响应时间
Max----最大的响应时间
Error%----错误率=错误的请求的数量/请求的总数
Throughput----吞吐量即表示每秒完成的请求数
Received KB/sec----每秒从服务器端接收到的数据量
Sent KB/sec----每秒从客户端发送的请求的数量
以上字段中,有平均响应时间,百分之50,百分之90,百分之95,百分之99,最大最小响应时间,容易让人弄错,特别是百分之50,90,95,99,这个可以理解,在最大最小平均响应时间不足以说明问题的情况下,查看90百分,也就是所有请求百分之九十的请求的响应时间,这样排除极端情况后的统计结果更具有说服力。我所接触的也大多以百分之90作为报告的参考依据。