性能测试06:性能测试工具JMeter
JMeter 4.0风格默认为黑色背景:Options选项下的 Look and Feel 还有多种风格可以选
JMeter的组成:
测试计划 -> (线程组, 它还包括 断言,定时器,监听器,配置元件, 后置处理器,前置处理器,逻辑控制器,Sampler)
Jmeter实现多并发
线程组:负载发生器,用多线程或者多进程的方式来模拟用户的使用行为。JMeter是以线程的方式来进行模拟用户的并发访问的。
JMeter实现逻辑分支控制:
逻辑控制器:用来控制测试脚本的逻辑判断,也可以理解为如何控制脚本的运行。例如,如果控制器,就是当满足什么样的条件后执行哪一步操作。
JMeter实现配置管理:
配置元件:用来提供一些配置相关的信息,如HTTP请求头、cookie管理,提供参数化数据。还可以进行用户自定义 变量等配置,用来定义常量等。
JMeter实现关联:
后置处理器:用于对Sampler发出的请求后得到的服务器响应进行处理。一般用来提取响应中的特定数据。
System.out.println("${title}"); - 如果使用Bean Shell去提取字符串的话,那么一定记得加上引号
JMeter实现数据预判
断言:断言用于检查测试中得到的相应数据是否符合预期,断言一般用来设置检查点,用以保证性能测试过程中的数据交互是否与预期一致。
Jmeter断言失败的时候会打印断言,成功的话不会打印断言。 一般断言用户功能测试验证。响应断言基本能满足大部分需求。
JMeter监控数据可视化
监听器:这个监听器不是用来监听系统资源的组件。它是用来对测试结果数据进行处理和可视化的一系列组件。例如:查看结果树、聚合报告。
JMeter函数助手例子:注意对于结果是字符串的函数,必须用引号括起来
随机数(__Ramdom): 例如 System.out.println(${__Random(0,99,rad)});
参数化助手(__CSVRead) :注意文件列号从0开始, 循环的时候,一个线程会读取银行,如果某行已经被一个线程读取了,那么当前现成不会去读取它,但是如果线程数大于csv中的文件行数,那么多余的线程会循环读取csv中的行。
例如: System.out.println("${__CSVRead(E:\Guweiping\software\apache-jmeter-2.10\myJmeter\csvData.csv,0)}");
计数器(__counter): 例如 System.out.println("False = " + ${__counter(False,counter)});
唯一数(__UUID): 例如 System.out.println("UUID = " + "${__UUID}");
JMeter实现分布式并发:一般在大并发量的情况下,一台电脑不至于支撑压力的时候,使用分布式
1) Master(主压力机器)在jmeter.properties中添加remote_hosts,e.g. remote_hosts=127.0.0.1,172.19.248.248:1099
2) Slave(从压力机器)在jmeter.properties中添加server_port, e.g. server_port=1099
3) Slave启动jmeter-server, e.g. ./jmeter-server (这里假设Slave机器是Ubutu)
4) 重启Master机器的Jmeter
操作:
(1) 如在windows机器上(Master),进入jmeter bin 目录(E:\Guweiping\software\apache-jmeter-2.10\bin), 编辑jmeter.properties文件, 去掉remote_hosts前面的注释符号#, 改成remote_hosts=127.0.0.1,172.19.248.248:1099 (注意:如果slave是linux 机器,首先在其上使用ifconfig查看其ip地址)
(2) 在Linux机器上(Slave),进入jmeter bin 目录(/opt/apache-jmeter-4.0/bin), 编辑jmeter.properties文件, 去掉server_port前面的注释符号#, 成为server_port=1099
(3) 在Linux机器上(Slave),进入jmeter bin 目录(/opt/apache-jmeter-4.0/bin), 运行 ./jmeter-server 去启动Slave.
(4) 在Master机器上,重启JMeter, 检查菜单Run -> Remote Start,可以看到上面配置的Slave机器ip和port显示出来了 (改示例中是172.19.248.248:1099 )
注意:有时候如果失败,那么检查一下防火墙是否关闭,可能的失败原因:
1) 启动 ./jmeter-server 失败,错误为:
Server failed to start: java.rmi.server.ExportException: Listen failed on port: 0; nested exception is:
java.io.FileNotFoundException: rmi_keystore.jks (No such file or directory)
解决方法: 修改jmeter.properites: server.rmi.ssl.disable=true (实际检测结果是,Master和Slave机器上的jmeter.properites中都必须对此项做同一修改)
看到如下信息,表示成功启动了:
root@agu:/opt/apache-jmeter-4.0/bin# ./jmeter-server
Created remote object: UnicastServerRef2 [liveRef: [endpoint:[172.19.248.248:40385](local),objID:[-3a930e1f:16416c9ce6d:-7fff, 4070085255494437772]]]