性能测试定义:指通过自动化的测试工具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进行测试。
1.2.性能测试类型
1.基准测试:在给系统施加较低压力时,查看系统的运行状况并记录相关数做为基础参考
2.负载测试:是指对系统不断地增加压力或增加一定压力下的持续时间,直到系统的某项或多项性能指标达到安全临界值,例如某种资源已经达到饱和状态等 。
3.压力测试:压力测试是评估系统处于或超过预期负载时系统的运行情况,关注点在于系统在峰值负载或超出最大载荷情况下的处理能力。
4.稳定性测试(可靠性测试):在给系统加载一定业务压力的情况下,使系统运行一段时间,以此检测系统是否稳定。24X3小时
5.并发测试:测试多个用户同时访问同一个应用、同一个模块或者数据记录时是否存在死锁或者其他性能问题,
1.3.性能测试指标
1.一个理发店,3个理发师,30分钟搞定一个顾客
2.每次同一时刻会有不同数量的客户进店要求理发
3.顾客要求苛刻,最多等30分钟
4.思考顾客理完头发时间变化
不同数量的客户同时进店,享受完服务所用的时间
同时进店客户数,1h内完成的剪头数量
1.4.用户数
1注册用户数
注册用户数指软件中已经注册的用户,这些用户是系统的潜在用户,随时都有可能上线。这个指标的意义在于让测试工程师了解系统数据中的数据总量和系统最大可能有多少用户同时在线。
2在线用户数
在线用户数是指某一时刻已经登录系统的用户数量。在线用户数只是统计了登录系统的用户数量,这些用户不一定都对系统进行操作,对服务器产生压力。
3并发用户数
不同于在线用户数,并发用户数是指某一时刻向服务器发送请求的在线用户数,他是衡量服务器并发容量和同步协调能力的重要指标,从这个含义上讲,我们可能会如下两种理解:
同一时刻向服务器发送相同或者不同请求的用户数,也就是说,既可以包括对某一业务的相同请求,也可以包括对多个业务的不同请求
同一时刻向服务器发送相同请求的用户数,仅限于某一业务的相同请求
1.5.事务的相应时间
事务是指用户在客户端做一种或多种业务所做的操作集,事务的响应时间就是衡量用户执行这些操作集所花费的时间。在性能测试中,一般通过计算事务的开始时间和结束时间的差值来获取事务的响应时间。
一个事务表示一个“从用户发送请求->web server接受到请求,进行处理-> web server向DB获取数据->生成用户的object(页面),返回给用户”的过程,一般的响应时间都是针对事务而言的。
1.6.每秒点击数
每秒点击数是指每秒钟像web服务器提交的HTTP请求数,它是衡量服务器处理能力的一个常用指标。需要注意的是,这里的相应时间并非鼠标的一次单击操作,因为在一次单击操作中,客户端可能向服务器发出多个HTTP请求,切勿混淆。
1.7.吞吐率
吞吐率通常指单位时间内从服务器返回的字节数,也可以单位时间内客户提交的请求数。吞吐率是大型web系统衡量自身负载能力的一个重要指标,一般来说,吞吐率越大,单位时间内处理的数据就越多,系统的负载能力也强。吞吐率与很多因素有关,服务器的硬件配置,网络的宽带及拓扑结构,软件的技术架构等。
1.8.业务成功率
指多用户对某一业务发起操作的成功率。例如,测试网络订票系统的并发处理性能,在早上8:00——8:30半小时的高峰里,要求能支持10万比订票业务,其中成功率不少于98%。也就是说系统允许200笔订票业务超时或者因其他原因导致未能订票成功。
1.9.TPS
TPS表示服务器每秒处理的事务数,他是衡量系统处理能力的一个非常重要的指标,在性能测试中,通过检测不同用户的TPS,可以估算出系统处理能力的拐点。
1.10.资源利用率
资源利用率就是指资源的使用情况
CPU使用率70%—80%
内存使用率80%以下
网络带宽利用率 100Mbps=12.5MB/s
2、性能测试流程
1.11.需求分析
测试对象:常用的核心业务,数据量、并发量较大,比如:注册,登录,搜索,添加购物车,下单,支付
性能指标:要求500万用在8小时内完成
测试场景:单一场景,测试某一个单一功能,
混合场景,多功能组合的场景,多业务测试
1.12.测试计划
测试目标、测试人员安排、测试进度安排
压力机选择:配置、要求,数量
风险
1.13.测试方案
测试工具:jmeter。loadrunner
测试环境:数据库,服务器,架构设计,有条件下尽量和生产环境(线上环境)一致
测试策略:单一场景,测试某一个单一功能,
混合场景,多功能组合的场景,多业务测试
监控工具:Windows系统中perfmon.exe
1.14.用例设计
1.15.测试执行
1.16.定位分析问题
前端
后端:代码、软件、硬件
网络
#2、jmeter介绍 jmeter是一款性能测试工具 开源、免费、多平台使用
1.测试计划是使用 JMeter 进行测试的起点,它是其它 JMeter 测试元件的容器。
2.线程组:代表一定数量的并发用户,它可以用来模拟并发用户发送请求。实际的请求内容在Sampler中定义,它被线程组包含。可以在“测试计划->添加->线程组”来建立它,然后在线程组面板里有几个输入栏:线程数、Ramp-Up Period(in seconds)、循环次数,其中Ramp-Up Period(in seconds)表示在这时间内创建完所有的线程。如有8个线程,Ramp-Up = 200秒,那么线程的启动时间间隔为200/8=25秒,这样的好处是:一开始不会对服务器有太大的负载。线程组是为模拟并发负载而设计。
3、取样器(Sampler):模拟各种请求。所有实际的测试任务都由取样器承担,存在很多种请求。如:HTTP 、ftp请求等等。
4、监听器:负责收集测试结果,同时也被告知了结果显示的方式。功能是对取样器的请求结果显示、统计一些数据(吞吐量、KB/S……)等。
6、断言:用于来判断请求响应的结果是否如用户所期望,是否正确。它可以用来隔离问题域,即在确保功能正确的前提下执行压力测试。这个限制对于有效的测试是非常有用的。
7、定时器:负责定义请求(线程)之间的延迟间隔,模拟对服务器的连续请求。
5、逻辑控制器:允许自定义JMeter发送请求的行为逻辑,它与Sampler结合使用可以模拟复杂的请求序列。
8. 配置元件维护Sampler需要的配置信息,并根据实际的需要会修改请求的内容。
9. 前置处理器和后置处理器负责在生成请求之前和之后完成工作。前置处理器常常用来修改请求的设置,后置处理器则常常用来处理响应的数据。
#3、jmeter工具使用
1、线程组是什么
进程: 一个正在执行的程序对应一个进程
线程: 一个进程有多个执行线程
线程组: 按照线程性质对线程分组
三者关系: 一个进程有多个线程组,一个线程组有多个线程
并发执行:多个线程同时执行,特点:执行结束的顺序与开始的顺序不一致
顺序执行:按照线程的启动顺序挨个执行
默认情况下,线程组中的线程是并发执行
每一个线程都要执行组内的http请求
设置线程组顺序执行:勾选测试计划中的(独立运行每个线程组)
1.1.2. 线程组主要包含三个参数:线程数、准备时长(Ramp-Up Period(in seconds))、循环次数。
1.1.3. 线程数:虚拟用户数。一个虚拟用户占用一个进程或线程。设置多少虚拟用户数在这里也就是设置多少个线程数。
1.1.4. 准备时长(秒):设置的虚拟用户数需要多长时间全部启动。如果线程数为20 ,准备时长为10 ,那么需要10秒钟启动20个线程。也就是每秒钟启动2个线程。
1.1.5.循环次数:每个线程发送请求的次数。如果线程数为20 ,循环次数为100 ,那么每个线程发送100次请求。总请求数为20*100=2000 。如果勾选了“永远”,那么所有线程会一直发送请求,一到选择停止运行脚本。
1.1.6.. 调度器:设置线程组启动的开始时间和结束时间(配置调度器时,需要勾选循环次数为永远)
1.1.7.持续时间(秒):测试持续时间,会覆盖结束时间
1.1.8.启动延迟(秒):测试延迟启动时间,会覆盖启动时间
1.1.9.启动时间:测试启动时间,启动延迟会覆盖它。当启动时间已过,手动只需测试时当前时间也会覆盖它。
1.1.10.结束时间:测试结束时间,持续时间会覆盖它。
2、http请求
一个HTTP请求有着许多的配置参数,下面将详细介绍:
名称:本属性用于标识一个取样器,建议使用一个有意义的名称。
注释:对于测试没有任何作用,仅用户记录用户可读的注释信息。
服务器名称或IP :HTTP请求发送的目标服务器名称或IP地址。
端口号:目标服务器的端口号。
方法:发送HTTP请求的方法,可用方法包括GET、POST、HEAD、PUT、OPTIONS、TRACE、DELETE等。
Content encoding :内容的编码方式,默认值为iso8859
路径:目标URL路径(不包括服务器地址和端口)
3、监听器
监听器(Listener)负责收集测试结果,同时也被告知了结果显示的方式。我们常用的包括:聚合报告、查看结果树、用表格查看结果,都支持将结果数据写入文件。其他的添加上去看看就行。
4、聚合报告
lable:对应每一个http请求,显示的是http请求的Name,如百度http请求name为baidu
Samples:表示这一次的测试中一共发出了多少请求,如上图所示,sougou和baidu的http请求每个都发出30个请求
Average:平均响应时间,指的是所有的请求的平均响应时间,如上图的30个请求的总的响应时间除以30得出的平均响应时间,默认的情况下是单个请求的平均响应时间,但当使用了“事务控制器”时,则以事物为单位显示平均响应时间
Median:中位数,也就是50%用户的响应时间
90%Line:90%用户的响应时间
Min:最小响应时间
Max:最大的响应时间
Error%:本次测试中出现错误的请求的数量/请求的总数,如上图所示,本次的测试中,sougou的http请求66.6%的请求出错,而baidu的请求则没有出错的请求
Throughput:吞吐量,默认情况下表示每秒完成的请求数,如上图所示,每秒完成的请求数分别为6.6个每秒,6.2个每秒
Recived KB/Sec:每秒从服务器端接收到的数据量,以kb为计算的单位
检查点-断言
断言(Assertions)可以用来判断请求响应的结果是否如用户所期望的。它可以用来隔离问题域,即在确保功能正确的前提下执行压力测试。这个限制对于有效的测试是非常有用的。
5.Jmeter组件参数化 ## (重点中的重点)
5.1.参数化是什么
动态的获取并设置数据
5.2.为什么使用参数化
执行批量操作,批量添加批量删除,人工效率太低
运用程序代替人工获取并设置数据,安全高效
比如:对被测系统的用户名和密码进行参数化,来模拟多个用户同时登录系统
5.3.参数化实现之CSV Data Set Config
通过这个组件可以动态获取并设置数据,实现批量添加操作
CSV Data Set Config:
Filename:所需数据文件的路径。如和脚本同一路径,可直接填写文件名
File encoding:编码和文件保持一致即可,默认为ANSI。如有中文,建议为UTF-8
Variable Names:引用变量时的变量名,对应数据文件中的每一列,以逗号分隔。如不填写,文件的第一行数据将被读取为变量名
Delimiter:在.txt、.dat文件中,可以用逗号(,)或者Tab键(\t)来区分列与列
Allow quote data:选项选为“true”的时候对全角字符的处理出现乱码
Recycle on EOF:到数据文件结尾时是否循环读取。设置为True时,线程数过多,数据文件读取到最后一行时,会再次从第一行开始读取。设置为False,到达文件结尾时如继续读取,则值会默认为<EOF>,可通过设置jmeter属性csvdataset.eofstring来改变该值。
Stop thread on EOF:Recycle on EOF设置为False,Stop thread on EOF设置为True,则读取数据文件最后一行后,停止测试,不管还有多少线程组未执行。
Sharing mode:共享模式。默认在所有线程组中使用,可选择每个线程组单独打开
6、Jemeter脚本录制方式
BadBoy脚本录制
使用Jmeter自带的代理服务器进行脚本录制
7、正则表达式
在使用Jmeter的时候,我碰到过这样一个问题,就是用户session关联的问题,咱们知道,在网站有登录功能的时候,我们会获取到一个sessionID,这个sessionID是唯一的,代表一次唯一的会话,每次登录都是一个新的值,当我们使用badboy录制脚本,导入到Jmeter中时,在执行线程组时候,发生过用户session过期的问题,因为我们在Jmeter中使用的session是一个定值,导致登录失败。这个我是这样来解决,在登录的时候,我们获取到这个session,然后设置一个后置处理器--正则提取器将这个session提取出来,作为一个变量,在进行其他操作的时候,使用这个变量就可以了。这样就完美解决这个问题。
|