一、jmeter使用;
1、获取请求参数;
入参可以写固定值,可以使用用户定义变量,可以读取文件获取、可以通过函数助手生成、可以通过beanshell前置处理器加工生成,以加密为例介绍2种;
(1)使用函数助手的加密方法(算法摘要,可输入值:MD2、MD5、SHA-1、SHA-224、SHA-256、SHA-384、SHA-512)
(2)beanshell处理器进行加密处理;
2、变量传递;
传递可以通过JSON提取器、正则表达式、beanshell后置处理器等,以数据加密为例;
(1)vars是对变量进行操作,只能在当前线程组内使用;
vars.put("data1",data1)
${data1}
(2)props是对属性进行操作,可以跨线程组使用;
props.setProperty("data2",data2)
${__P("data2",)}
3、cookie传递;
(1)jmeter配置文件可以设置自动保存cookie变量,在bin目录下的jmeter.properties,搜CookieManager.save.cookies,把后面的值改为true,去掉行首的#号,然后保存后重启jmeter;
(2)添加一个Http cookie管理器,对不同线程的cookie不会互相影响;
4、结果文件配置;
(1)jmeter.save.saveservice.output_format:定义保存测试结果文件的格式,枚举值有xml、csv、json,比如该参数设置为xml,那么生成的jtl文件将以xml格式保存;
(2)jmeter.save.saveservice.hostname:是否在测试结果中包含主机名,比如域名或者IP;
(3)jmeter.save.saveservice.thread_name:是否在测试结果中包含线程组名称;
(4)jmeter.save.saveservice.lable:是否在测试结果中包含采样器名称,比如设置true的,测试结果中可见是哪个接口请求;
(5)jmeter.save.saveservice.samplerData:是否在测试结果中包含请求数据,例如请求方式、请求头、请求参数;
(6)jmeter.save.saveservice.url:是否在测试结果中包含请求url;
(7)jmeter.save.saveservice.request_header:是否在测试结果中包含请求头;
(8)jmeter.save.saveservice.reponse_header:是否在测试结果中包含响应头;
(9)jmeter.save.saveservice.response_data:是否在测试结果中包含响应数据,例如HTML、JSON等,CSV格式目前不支持 response_data;
(10)jmeter.save.saveservice.response_code:是否在测试结果中包含响应状态码,请求成功即为200;
(11)jmeter.save.saveservice.response_message:响应信息是否记录到测试结果中,请求成功即为OK ;
(12)jmeter.save.saveservice.response_data.on_error:发生错误是否保存在测试结果中,该参数实现仅接口报错,保存响应数据;
(13)jmeter.save.saveservice.success:是否在测试结果中包含请求的成功/失败状态;
(14)jmeter.save.saveservice.data_type:是否在测试结果中包含数据类型,主要是增加测试结果详细度,可以了解每个请求的响应数据类型;
(15)jmeter.save.saveservice.assertion_results:是否在测试结果中包含断言详细信息,比如失败的响应内容,枚举值是none、first、all,none代表不保存、first标识只保存第一个断言结果,all代表保存全部断言结果;
(16)jmeter.save.saveservice.assertion_results_failure_message:是否在测试结果中包含失败的断言结果,枚举值是true、false,目前仅影响CSV输出;
(17)jmeter.save.saveservice.assertions:是否在测试结果中保存断言执行状态(成功/失败);
(18)jmeter.save.saveservice.thread_counts:是否在测试结果中包含当前活动线程的数量;使用Active Threads Over Time Listener或Response Times vs Threads等监听器,就要启动此功能;
(19)jmeter.save.saveservice.sampler_count:是否在测试结果中包含每个采样器的执行次数;
(20)jmeter.save.saveservice.time:是否在测试结果中包含响应时间(单位ms),了解了接口的响应时间,就可以找出响应时间较长的请求;
(21)jmeter.save.saveservice.connect_time:是否在测试结果中包含连接时间,连接时间是发起请求到建立与服务器的连接所花费的时间,辅助分析网络性能和服务器响应快慢;
(22)jmeter.save.saveservice.encoding:指定保存测试结果使用的字符编码(常用UTF-8)
(23)csv结果;
(24)xml结果;
5、备份文件配置;
前提:jmx备份配置,只在GUI模式下,这些属性才会生效;
(1)jmeter.gui.action.save.backup_directory:设置自动备份路径,设置不存在路径则创建;
(2)jmeter.gui.action.save.backup_on_save:是否在保存测试文件时创建备份文件,比如设置为true,则在备份路径创建test_000001.jmx,依次递增;
(3)jmeter.gui.action.save.keep_backup_max_hours:设置备份文件保存时间(单位是小时),超时自动删除,主要是避免占用过多磁盘空间。设置为0则意味着永远保存;
(4)jmeter.gui.action.save.keep_backup_max_count:设置保留备份文件的最大数,默认设置10,将保留10份,设置为0则意味着永远保存;
(5)save_automatically_before_run:是否是执行测试计划时,自动保存并备份到指定目录;
6、知识点;
(1)线程组、请求或断言等,ctrl+t实现启用/停用;
(2)jmeter压测执行nohup命令,中途想停止运行,找到第二个pid,然后杀进程;
ps -ef|grep jmeter;
kill -9 第二个进程id;
(3)性能测试要求比较严格的话,要将查看结果数、聚合报告等组件注释掉,因为消耗内存;
7、命令行参数;
(1)-n:非GUI方式运行;
(2)-t:指定运行的测试脚本地址与名称,可以是相对或绝对路径,比如 -t test.jmx;
(3)-h:查看帮助;
(4)-v:查看版本;
(5)-p:指定读取Jmeter属性文件,默认使用jmeter.properties,使用指定文件就是 -p myconfig.properties;
(6)-l:记录测试结果到文件,指定名称与路径,可以是相对或绝对路径,比如 -l result.jtl ;
(7)-L:定义Jmeter的日志级别,比如 -L ERROR;
(8)-J:定义Jmeter属性,等同于在jmeter.properties中设置,比如 -Jserver.rmi.ssl.disable=true;
(9)-G:定义Jmeter全局属性,等同于在Global.properties中设置,线程间可相互共享;
-Gtemp=value;
${__P(temp)} ;
(10)-r:开启远程负载机,远程负载机列表在jmeter.properties文件中指定;
(11)-R:开启远程负载机,可以指定负载机IP,会覆盖jmeter.properties中的设置,比如./jmeter.sh -n -t test.jmx -r -R ip1:port1,ip2:port2 ;
(12)-X:停止远程执行,比如 -R ip1:port1,ip2:port2 -x ;
二、分布式压测
1、原理;
2、配置流程;
(1)每台机器均部署jmeter,确保jmeter版本一致;
(2)jmeter脚本上传到主压力机;
(3)配置文件和参数文件(比如csv参数文件),放在每台压力机上,并且目录相同;
(4)每台机器,配置文件都需要调整,jmeter.properties,设置 ssl.disable=true(禁用SSL,不建立加密连接);
(5)主压力机,配置文件增加从压力机ip和端口(jmeter.properties,设置 remote_hosts);
(6)每台机器,均后台启动jmeter-server,命令 nohup ./jmeter-server &;
(7)在主压力机上执行启动命令;
./jmeter -n -t ../jmx/genRandom.jmx -l ../jtl/result.jtl -r ;
./runall.sh jmx/ ;
(8)通过jtl生成HTML报告;
已存在jtl文件,执行./jmeter.sh -g ../jtl/result.jtl -o ../report ;
没有jtl文件,执行./jmeter.sh -n -t ../jtl/result.jtl -e -o ../report ;
GUI模式,工具-生成HTML报告;
使用定制版jmeter,生成word版测试报告;
(9)HTML报告;