Docker应用环境CentOS7+Docker+Jenkins (2)
一、性能测试
1、概念和定义
性能测试:对被测试的软件执行指定的测试过程和测试场景,观察其是否可以达到或者满足指定的设计目标。
性能测试一般都是使用工具软件进行执行。
性能测试不仅仅是观察和注重被测试软件在运行峰值的具体表现,还注重其在正常运行下的表现。
常用的性能测试方法:
假如说,一个办公系统,最多支持1000人同时在线办公。(超过1000人在线,系统崩溃)
1)一般性能测试
在不给被测试软件施加任何压力的情况下(低于50%指标),观察系统运行期间的具体表现。
2)负载测试
给被测的软件系统施加一定的压力(一般的60%~80%的指标),观察系统运行期间的具体表现。
3)压力测试
给被测的软件系统施加接近或者达到、甚至超过预定指标的压力(一般95%到110%),持续运行直到系统崩溃为止,观察系统运行期间的具体表现
4)稳定性测试
一般指,持续运行被测试的系统,按照一般性能测试指标或者负载测试指标长时间运行,观察系统运行期间的具体表现。
绝大多数系统,要求至少是7*24小时运行。
5)大数据量测试
按照系统的设计指标,对系统进行大量数据的写入和提取的测试操作,观察系统的运行表现。
6)恢复性测试
系统运行崩溃后,恢复正常运行需要的时间。
7)并发测试
指的是按照系统测试目标,在同一时间(绝对相同)对被测试的系统发送数据请求,观察系统运行时的表现。
2、性能测试的查看指标
1)并发数
同一时间,多个用户,向被测试系统发起数据请求,对被测试的系统产生压力的人数。称为并发人数,或者简称并发数。
有几个类似术语:
系统用户数:系统的所有在册用户。(实际中,数据库中存在的用户的数量)
在线用户数:登录系统或者正在使用系统的用户量。(实际中,在线用户一般能够达到系统用户数的20%)
并发用户数,一般也就是在线用户数的10%。
2)响应时间
response time。
一般指的是请求从发送到服务器返回响应呈现到用户界面和系统所需要的时间。
因此,如果响应时间过长。可以:
更换网络运营商。
服务器性能提升,CPU、内存、网卡
优化代码结构
用户可能需要增加带宽、更换计算机、更换应用程序
3)网络吞吐量、吞吐率
吞吐量:在一定的时间内,用户端和服务器端进行收发数据的总量。以字节为单位。
吞吐率:指的是在一定时间内,用户端和服务器端进行收发数据的平均值。以B/S(字节数每秒)、p/m(页面数每分钟),或者一些其他的自定义的衡量。
4)请求数(事务数)每秒
每秒钟向服务器发送的请求的个数。也称为点击率。
事务指的是用户在系统中完成一个任务发送的所有请求的综合称为一个事务。
5)服务器的系统运行的性能指标:
以Windows系统为例:
系统资源监视器:
Linux系统中,可以使用top命令,查看系统中各进程消耗的系统资源(CPU、内存、网络、硬盘)
所有的所谓的性能参考指标都是:
1)性能测试执行期间进行监控性能是否达标的,所以测试之前要有具体的标准。
2)指标不是用来测试的。
3、性能测试常用的手段方法
1)通过设置大量的线程数(用户数)
2)设置请求的频率和数量
A:每秒是1次请求,连续请求10000次
B:每次请求100,连续100次。
注意,A、B从不同维度来讲,对系统的压力是不同的。
3)设置单次请求的数据大小
A:一个请求,一次发送10KB数据,连续发送1000次;
B:一个请求,一次发送1MB数据,连续发送10次;
C:一个请求,词义发送10M数据,发送一次
4)设置请求的发送时间
因此,性能测试,就是通过以上四种手段的较差组合,检验和验证系统的性能是否达标。
4、性能测试和功能测试的区别
功能测试:主要保证软件的功能是否正常能用;
性能测试:保证软件能够又快、又好的运行,提供更好的服务。
性能测试是在功能测试的基础上
性能测试也是检查被测试的软件系统在指定的性能参数下是否能够正常运行。
因此,性能测试的重点就是:1设计和使用何种测试手段;2、执行中分析和监控数据,以及发现性能瓶颈(其实就是性能缺陷)3、协助分析性能瓶颈的原因,进行性能优化(开发、运维、设计)
二、性能测试的流程
1、概述
1)获取测试需求。性能测试就是做性能需求分析。
2)制定测试方案,选择测试工具
3)设计和编写性能测试用例、测试脚本
4)性能测试的执行。
5)性能瓶颈分析和优化
6)性能测试回归
2、获取性能测试需求
1)系统要承载的用户有多少。
2)系统中每一个业务的使用状况。
3)每个业务的使用频率和时间
4)业务或者系统运行期间,系统服务器的承载能力(CPU、内存、网络、磁盘等资源的消耗)
3、制定和设计测试方案,选取测试工具
1)考虑做哪些方面的测试。性能测试往往都是综合性的手段一起应用,目标也是系统的多项指标综合考量。
如果将一般性能测试、负载测试、压力测试综合考虑。
例如,一个系统的最多承载1000个用户同时在线。设计测试方案:
用户(线程)梯次增加:每分钟增加10个用户,加到500的时候暂停增加,
运行1小时后,再以每分钟5个用户的数量增加到900,然后暂停增加,
运行2小时后,再以每分钟3个的数量,增加到1000,然后暂停增加,
运行3小时后,再以每分钟5人对的数量,增加到1200,然后暂停增加。
2)考虑做哪些业务的测试。性能测试不是针对所有功能。
如果要想考察不同的业务的响应时间、吞吐量等。
例如,一个系统用户登录1次,进入系统后将浏览商品、查看商品信息、添加商品到购物车、下订单和提交订单,退出系统。设计测试方案:
准备100个用户账号、密码;一起登录(并发)
每个用户使用账号购买20件商品,提交订单。使用参数化读取参数中的商品数据。
3)确定好系统的承载能力。系统运行期间达到或者应该具备的能力。
以满足上述1)、2)中的业务和操作为准,服务应该具备的能力(预期资源消耗的指标以及其他性能指标):
例如:
①500用户登录系统,每次登录的响应时间99%必须在1秒以内。
②900用户以内登录系统,每次登录的响应时间95%必须在1.5秒以内;99%以上必须在2秒以内
③800个用户在系统中购物时,浏览商品页面的响应时间95%以上必须在1.5秒以内。
④提交订单的响应时间不得超过2秒,成功率必须达到99.99%;
⑤系统运行期间,web服务器的CPU消耗不超过80%,内存利用率不得超过75%,网络吞吐率不得低于100MB/s,磁盘的读写速度不得的高于1000KB/s。
4)选取测试工具
公司有钱,业务比较多,还需要专业的数据分析,选择Loadrunner。
公司没钱,业务比较简单,对于测试结果无太多数据分析,选择JMeter。
看实际需要,JMeter支持的插件、控件很多,可以弥补其本身功能不足的缺陷,甚至可以进行企业自研的插件开发。
性能测试执行的时候,除了执行工具之外,还需要有性能的监控工具,结果数据分析工具。
Loadrunner是所有性能测试工具中唯一具备:脚本录制、脚本设计、测试场景设计、测试执行、过程监控、结果数据分析于一身的工具。
4、设计测试脚本
将测试方案中设计好的各种用户登录场景、购物场景等通过测试工具进行操作和完成。
5、测试执行
运行测试脚本和过程数据监控。
6、结果分析
对着测试结果的数据,分析每一个数据的含义,争取找出性能瓶颈和解决方案。
三、JMeter用于性能测试
1、JMeter设置线程的运行逻辑
默认的,在JMeter中设置线程的运行,可以完成基本的请求的发送相关的性能场景设计。
1)设置发生运行错误时,jmeter的表现
2)设置线程数。想要发送的请求用户越多,线程数就要更多。例如,如果需要100个人登录,则需要设置100个线程。
3)循环次数。指的是一个线程对请求的发送次数。一个用户同样的操作做多少次。
4)ramp-up时间:线程运行完所需要的时间
5)设置线程每次迭代都相同。
6)设置持续时间。可以限定脚本的运行总时间。
7)启动延迟。设置脚本立即启动还是延迟一定时间后启动。
2、设置运行结果和监听器
1)设置监听器的-图形结果
显示的内容是测试脚本执行后,吞吐量的分布情况。(统计学的标准差、方差、离散数学)
2)设置监听器的-响应时间图
将测试中响应时间的分布进行图表显示
3)设置监听器的-聚合报告
聚合报告显示统计请求中响应时间的分布状态。
4)设置监听器的-汇总报告
汇总报告显示吞吐量的数据信息,包含发送和接受。
3、使用其他插件设计更精良的测试脚本和结果监听
1)将JMeter的插件管理器添加到jmeter的lib/ext目录中。
可以通过插件管理器管理JMeter使用的各种第三方插件。
2)启动JMeter,打开插件管理器。
通过JMeter【选项】中的【Plugins Manage】
在【installed Plugins】中查看已经安装的插件。
在【Available Plugins】中查看需要的插件。
3)安装两个插件。
jpgc-stand set:设置性能测试线程数据和加载方式。
PerfMon: 配合其他插件监控被测系统的服务器的系统资源消耗的性能参数。
3)创建一个可以设置线程详细运行的线程组
选择线程组的时候,选择【jp@gc-stepping Thread Group】
创建后,实际效果:(下图是JMeter的默认显示效果)
①【this group will start】:脚本中要运行的线程总数
②【first,wait for】:第一次加载线程要等待的秒数
③【then start】:然后添加的线程数
④【next add】:后续每次添加的线程数
⑤【every】:添加线程数之间的间隔时间
⑥【using ramp-up】:加载和启动线程所需的时间
⑦【Then hold load for】:所有线程加载完毕后持续运行的时间
⑧【finally,stop】:最后线程的结束数量
⑨【every】:线程退出时间隔的时间
4、JMeter收集和监控被测系统的服务器资源数据
1)在被测试系统的服务端,启动服务代理程序
Windows系统,使用【startAgent.bat】完成。
Linux系统,使用【startAgent.sh】完成。
下图是Windows中启动服务器代理。
2)JMeter中添加监听器
性能数据收集器
实际效果如下:
通过添加监听内容,完成服务器系统资源数据的收集。
5、JMeter做性能测试的流程总结
1)配置测试环境。
需要安装JMeter以及各种插件
要在被测试系统的服务器上安装serverAgent代理程序(也需要配置JDK环境)并启动
2)被测试系统的环境配置
开发语言(Java、PHP、python……)
数据库(mysql、Oracle、SQL Server、redis……)
应用服务(Apache、tomcat、IIS、Nginx……)
其他插件:docker等……
注意:配置测试系统的环境时,问清楚使用的软件,使用什么版本,安装顺序,安装步骤和配置参数
3)设计好测试用户(线程)的数量、加载方式、运行方式、运行时长、退出方式
4)设置好测试中所使用的的脚本(请求)、参数化、断言
5)设置好监听器,服务端系统性能数据监控、请求的响应时间数据监控、图形监控、聚合报告、查看结果树
6、JMeter性能测试各个工具之间的关系和运行原理
服务器一般都是各种云平台的服务器:阿里云、腾讯云、百度云、华为云、网易云……
云服务器一般都是用于公网的测试
内网测试的话,都是企业自己的内网服务器。