第1章 性能测试基础
关于压力测试和负载测试:
压力测试是通过逐步增加系统负载,测试系统性能的变化,并最终确定在什么负载条件下系统性能处于失效状态,并以此来获得系统能够提供的最大服务级别的测试。
负载测试是通过逐步增加系统负载,测试系统性能的变化,并最终确定在满足性能指标的情况下,系统所能承受的最大负载量的测试。
简单点说就是:压力测试是看加多少负载就能使系统失效,负载测试是看在满足系统就快失效的一刹那间能承受的负载。
其实压力测试是一种特定类型的负载测试!
细分的话就是关注点不同
负载测试是对不同负载量的性能指标值进行记录,关注的是不同场景下的性能指标(响应时间、吞吐量等),不关注系统的稳定性、可靠性和可恢复性。
压力测试是测试系统在一定负载量(根据负载测试选取此负载量)长时间运行是否会出现内存泄漏等情况,关注系统的稳定性、可靠性和可恢复性。
对于B/S架构软件,一般会关注Web服务器性能:
平均每秒钟响应次数=总请求次数/秒数
平均每秒业务脚本的迭代次数
成功/失败的请求
成功/失败的点击数
每秒点击数
每秒成功/失败点击数
尝试连接数
吞吐率
C/S架构的程序,更注重数据库的指标:
用户连接数,即数据库的连接数量
数据库死锁
数据库Cache的命中情况
其他指标:CPU占用率、内存占用率、数据库连接池等。
第2章 JMeter基础知识
JMeter常用术语:
采样器(Samplers):向服务器发出特定的请求,并会在超时前等待服务器的响应;
逻辑控制器(Logic Controllers):控制JMeter测试脚本的执行顺序;
监听器(Listeners):收集测试结果信息,并以用户指定的方式展示;
配置元件(Configuration Elements):设置一些JMeter脚本公用的信息;
断言(Assertions):验证服务器返回的信息与用户期望是否相符;
定时器(Timers):保存JMeter测试脚本与时间相关的一些信息,如思考时间;
前置处理器(Pre-Processors):在前置处理器的作用范围内,任何采样器被执行前,都要先执行前置处理器;
后置处理器(Post_Processors):在后置处理器的作用范围内,任何采样器被执行后,都要执行对应的后置处理器;
测试计划(Test Plan):是测试脚本的根节点;
线程组(Thread Group):定义了一个虚拟用户池,其中每个虚拟用户都使用同样的测试脚本;
工作台(WorkBench):用来保存暂时不使用的测试元素,保存测试计划时,工作台中的内容不会一起保存。
JMeter测试结果字段:
Label:定义HTTP请求名称;
Samples:表示这次测试中一共发出了多少个请求;
Average:平均响应时长,默认情况下是单个Request的平均响应时长,使用Transaction Controller时,也可以以Transaction为单位显示平均响应时长;
Median:中位数,即50%用户的响应时长;
90%Line:90%用户的响应时长;
Min:访问页面的最小响应时长;
Max:访问页面的最大响应时长;
Error%:错误请求的数量/请求的总数;
Throughput:默认情况下表示每秒完成的请求数(Request per Second),当使用Transaction Controller时,可以表示类似LR的Transaction per Second数;
KB/Sec:每秒从服务器端接收到的数据量。
JMeter的一些配置、目录说明、命令等。
第3章 Web性能测试脚本录制与开发
JMeter日志文件/bin/jmeter.log,会记录告警或错误信息。
测试计划:函数测试模式,会记录每一次采样从服务器获取的数据,在监听器中配置了保存测试数据的文件,则这些数据就会被记录到该文件中,但该功能会影响JMeter性能。
线程组:是任何测试计划的起点,所有的逻辑控制器和采样器都必须放在线程组之下。其他测试元件可直接放在测试计划下,对所有想承租都生效。勾选调度器,持续时间优先级高于结束时间,启动延迟优先级高于启动时间
常用测试元件
监听器:所有的监听器都保存同样的数据,区别是如何展示数据。监听器可以在测试的任何地方添加,包括直接放在测试计划之下,收集测试数中相同或更低级别测试元件的数据。
定时器:若添加多个定时器,JMeter会将这些定时器的时长叠加起来共同作用。
断言会影响作用域内的所有采样器,如果要让断言只影响某个采样器,需要将断言作为该采样器的子项。
配置元件:只对其所在的测试数及其分支有效。用户定义的参数会在测试的初始阶段执行,无论它处于测试树的哪个位置。
前置处理器:会在采样器发出请求前做特殊操作。如果前置处理器附在某个采样器下,那么它只会在该采样器运行之前执行。通常用于在采样器发出请求前修改采样器的某些设置或更新某些变量的值。
后置处理器:通常用来处理服务器的响应数据,特别是服务器响应中提取数据。
JMeter执行顺序:
配置元件
前置处理器
定时器
采样器
后置处理器
断言
监听器
只有当作用域内存在采样器时,定时器、断言、前/后置处理器才会执行,逻辑控制器和采样器按照先后顺序执行。
JMeter属性与变量
JMeter的属性和变量都是大小写敏感的。
第4章 数据库性能测试脚本开发
JDBC Connection Configuration:
Variable Name Bound to Pool(绑定到连接池的变量名称):该值在整个测试计划中应该是唯一的,以便JDBC采样器区分不同的链接配置;
Database URL(数据库连接串):如jdbc:mysql://localhost:3306/mydb;
JDBC Driver class(数据库驱动程序):如com.mysql.jdbc.Driver;
Username:用户名;
Password:密码。
第9章 服务器监控测试脚本开发
第10章 详解JMeter测试元件
监听器:保存的文件CSV格式比XML的占用磁盘空间更小;
逻辑控制器:
循环控制器:设定其下元件的循环次数;
仅一次控制器:在其下的元件只会执行一次;
交替控制器:顺序执行其下的元件,第一次执行第一个,第二次第二个......,“忽略子控制器块”不明白用处;
If控制器:控制其下的测试元件是否执行;
配置元件:在作用域的初始阶段处理,初始化默认值和变量,一遍后续采样器使用。
CSV Data Set Config:被用来从文件中读取数据行,并将它们拆分后存储到变量中。
FTP请求缺省值:用于设置FTP请求的默认值。
HTTP授权管理器:指定针对Web页面(使用服务器校验限制)的一个或多个登录;
HTTP Cookie管理器:存储和发送Cookie。如果有一个HTTP请求和响应其中包含有Cookie,Cookie管理器会自动存储Cookie,接下来针对特定Web站点的所有请求中都会使用该Cookie。每个JMeter线程都有自己的“Cookie存储域”,可以在查看结果数中查看到。也可手动添加一个Cookie,会被所有线程共享。
HTTP请求默认值:设置HTTP请求使用的默认值,如多个HTTP请求使用同样的默认值。
JDBC Connection Configuration:根据提供的JDBC连接设置,可以创建一个数据库连接(被JDBC请求采样器使用)。MySQL驱动类com.mysql.jdbc.Driver,数据库URL:JDBC:mysql://host[:port]/dbname。
Java请求默认值:设置Java测试的默认值。
TCP采样器配置:提供TCP采样器的默认数据。
用户定义的变量:一个测试计划中所有的用户定义的变量,无论它们在哪里,都在初始阶段处理。
Random Variable:产生随机数字字符串
P178