性能测试理论
1、mockserver
1.1什么是mockserver?
Mock本意就是模拟或者效仿,我们可以把Mock理解为一个替身,在软件开发领域,通常就是指模拟对象,故mockserver就可以理解为测试替身的服务。Mock是为了解决不同的单元之间由于耦合
而难于开发、测试的问题。所以Mock既能出现在单元测试中,也会出现在集成测试、系统测试过程中。在官网选择下载 Standalone Moco Runner ,下载之后,你将会得到一个
moco-runner-1.3.0-standalone.jar 文件。moco官网地址:https://github.com/dreamhead/moco。
1.2不同角色对mockserver的使用场景
1.2.1程序员
前端程序员
场景:前端已写好⻚⾯,但是后端的接⼝没写好,那么前端程序员正确的姿势是什么?正确的姿势就是模拟后端。
现在前端程序员来模拟后端返回的产品列表的数据:
(1)编写HTTP请求的json文件,将其和moco放在同一位置;
(2)打开控制台,进入到存放moco和json文件的目录,运行如下命令: java -jar moco-runner-1.3.0(moco版本)-standalone.jar http -p 12306(指定的端口) -c product.json(文件名);
(3)打开postman运行HTTP请求。
后端程序员
场景:A给B服务⼀个⻋牌号,那么B返回⻋辆的其他信息。
现在A程序员来模拟B返回的产品的数据:
(1)编写HTTP请求的json文件,将其和moco放在同一位置;
(2)打开控制台,进入到存放moco和json文件的目录,运行如下命令: java -jar moco-runner-1.3.0(moco版本)-standalone.jar http -p 12306(指定的端口) -c park.json(文件名);
(3)打开postman运行HTTP请求。
1.2.2测试人员
场景:测试过程中,没有数据怎么办?解决办法,自己造数据(手动造数据或者代码造数据),自己moco数据。
(1)自己造数据,编写HTTP请求的json文件,将其和moco放在同一位置;
(2)打开控制台,进入到存放moco和json文件的目录,运行如下命令: java -jar moco-runner-1.3.0(moco版本)-standalone.jar http -p 12306(指定的端口) -c products.json(文件名)
(3)打开postman运行HTTP请求。
2、性能测试
2.1什么是软件性能
在软件的⻆度⽽⾔, 性能它⾸先是⼀种指标,具体可以说就是软件系统或构件对于其及时性要求的符合程度,另外⼀种就是软件产品的 ⼀种特性,其实就是响应时间。对⼀个产品⽽⾔,性能的
及时性是⽤响应时间或者吞吐量来进⾏衡量,对⽤户⽽⾔,响应时间就是端到端的⽤户基本体验。
2.2不同角色对性能的理解
2.2.1用户视角
在⽤户的⻆度⽽⾔,软件性能就是⽤户操作的响应时间。⼀般⽽⾔关于响应时间业界的说法具体如下:
(1)1-3秒,属于优的表现;
(2)3-5秒,可以接受,属于中间的表现;
(3)5秒以上,⽆法接受 。
所以在实际的⼯作⾥⾯,如果响应时间是⼤于5秒,那么就需要向程序员提单,让程序员来进⾏具体的优化。
2.2.2运维视角
运维除了关注响应时间外,也会关注更多底层的资源信息,这些资源信息具体可以汇总为如下:
(1)系统资源(CPU和内存)
(2)数据库资源(IOPS资源)
(3)JVM内存是否够⽤及系统的最⼤容量。
2.2.3开发视角
开发的关注度会更加的全⾯,毕竟代码都是程序员来编写的,具体可以汇总为如下:
(1)前后交互的响应时间;
(2)中间件的参数设置;
(3)内存释放泄露;
(4)连接数泄露;
(5)是否存在不合理的内存使用方式 ;
(6)是否存在不合理的线程同步方式;
(7)系统中是否存在不合理的资源竞争;
(8)系统架构&代码结构。
2.2.4测试视角
测试关注的视⻆属于全栈性的,需要考虑⽤户视⻆的产品体验,也要监控以及关注运维视⻆和开发视⻆,所以性能测试中测试的具体⼯作职责可以总结为:
(1)设计合理的场景和测试⽤例来验证系统的资源数据;
(2)验证在⾼并发的情况下架构是否满⾜;
(3)给架构师以及开发⼈员提供中间件配置参数的合理值范围;
(4)使⽤技术⼿段监控系统,DB,中间件,全链路监控的⽅式来监控系统资源情况。
2.2.5WEB前端
所谓前端的性能⽬前也是性能测试中⽐较热⻔的技术之⼀,关注的点具体汇总为如下:
(1)浏览器的资源加载(HTML解析,图⽚资源加载,CSS⽂件资源加载);
(2)前端缓存技术的优化是否合理性;
(3)前端与后端的交互性耗时。
2.3性能测试常用术语
性能测试的过程中,任何的指标不能超过75%,一旦超过75%,说明可能存在瓶颈。
2.3.1响应时间
响应时间(Response Time)=⽹络时间+应⽤程序的处理时间,简单的可以理解为一个完整的http请求流程所需的时间。
以测试平台为案例: WebServer:nginx 应用Server:Django服务 DataServer:MySQL。
2.3.2并发用户数
性能测试的核心是验证当前系统能否支持现有用户的访问,也就是说系统可以承受在同一时间段多少用户来访问系统,并发用户数是以秒为单位的,可以说:不论从业务视角出发,还是服务端承
受压力而言,描述的是同一时间同时向客户端发出请求的客户,某些时候也称为“并发测试”。这中间主要体现的是服务端承受的最大并发访问数。
并发用户数:N个用户向服务发送请求
在线用户数:仅仅在线,但是并不代表发送了请求,即平时所说的僵尸用户。
2.3.3吞吐量
主要用于数据传输方面,也就是被测试系统的执行效率。该术语⽤于描述数据传输速度(字节/秒或者⽐特/秒),在某些情况下(如DB层⾯),吞吐量指的是操作的速度,也就是每秒操作数或者每
秒业务数。或者也可以说单位时间内客户端请求的数量,直接体现系统的性能承载能力。
2.3.4性能计数器
即性能测试过程中需要收集的数据: WebServer:HTTP连接数 、应用Server:服务被部署的系统的CPU和内存资源 、DataServe:IOPS。
2.3.5IOPS
该术语主要是针对数据库的,也就是每秒发⽣的输⼊/输出操作的次数,是数据传输的⼀个度量⽅法。⽤于磁盘的读写,IOPS值的是每秒读和写的次数。IOPS衡量的是读写的速度。
2.3.6使用率
对于服务所请求的资源,使⽤率描述的是所给定的时间区间内资源的繁忙程度。对于储存资源来说,使用率指的是所消耗的储存容量。
如⼀个业务中,会使⽤⼤量的内存资源,总的内存资源是4G,在⼀定数据量的情况下执⾏该 业务形态,内存使⽤率从100M⼀直占⽤到3G,然后随着业务形态内存资源得到释放呈下降的趋势,那
么可以说内 存使⽤率最⾼为75%。
Out Of Memory(OOM):内存溢出,是指程序在申请内存时,没有足够的内存空间供其使用,出现out of memory。
memory leak:内存泄漏,是指程序在申请内存后,无法释放已申请的内存空间,一次 内存泄露危害可以忽略,但 内存泄露堆积后果很严重,无论多少内存,迟早会被占光。
内存泄漏的堆积最终会导致内存溢出,内存溢出就是你要的内存空间超过了系统实际分配给你的空间,此时系统相当于没法满足你的需求,就会报内存溢出的错误。
2.3.7思考时间
思考时间英文名称是Think Time,也称为休眠时间,在业务视角,思考时间指的是用户在进行操作时,每个请求之间的间隔时间。
2.3.8TPS/QPS
事务指的是某个操作或者是⼀组操作的组合,如登录的事务那么就是输⼊账户和密码,点击登录按钮跳转到登录成功的⻚⾯并且信息都加载出来。
TPS统计的是每秒处理的事务数,即系统每秒能够处理的事务的数量。
QPS指的是 每秒查询率,如DB服务器在规定时间内处理流量多少的衡量标准。
2.5性能测试理论
2.5.1资源调度
(1)CPU密集型:计算型的,应⽤程序执⾏繁重的计算,通常运⾏时间⽐较⻓,会占⽤⼤量的CPU。即CPU占用很高,内存占用很低。
(2)IO密集型:读写型的,应⽤程序执⾏I/O,计算不多,会占⽤⼤量的内存资源系统的最⼩粒度是线程,也就是说系统调度中粒度最细的就是对线程的调度。即CPU占用很低,内存占用很高。
(3)线程优先级:在没有资源的的情况下,一般来说优先级高的优先处理,线程优先级由低到高可以分为1-10 10个优先级,如果没有设置优先级就默认优先级是5。
2.5.2等待队列