一、moco
1.1什么是moco?
Mock:替身
server:服务
mock:测试替身的服务
1.2不同角色对moco使用的场景
程序员
前端程序员
前端已写好⻚⾯,但是后端的接⼝没写好,那么前端程序员正确的姿势就是模拟后端。
现在前端程序员来模拟后端返回的产品列表的数据:
将此文件保存,保存到moco的Java文件同一等级目录下
之后打开控制台,运行这个moco(具体操作为先打开控制台,进入保存文件的位置,复制位置,再控制台打开这个文件、输入命令java -jar moco-runner-1.3.0-standalone.jar http -p 12306 -c products.json)
之后再postman中输入地址(http://localhost:12306/products)并执行
后端程序员
后端已写好接口,但是前端的页面没写好,那么前端程序员正确的姿势就是模拟前端。
现在后端程序员来模拟前端返回的数据:例如停车场收费系统
A给B服务一个车牌,那么B返回其他信息
将此文件保存,保存到moco的Java文件同一等级目录下
之后打开控制台,运行这个moco(具体操作为先打开控制台,进入保存文件的位置,复制位置,再控制台打开这个文件、输入命令java -jar moco-runner-1.3.0-standalone.jar http -p 12306 -c park.json)
之后再postman中输入地址(http://localhost:12306/parking)并执行
测试
测试过程中,⽆数据,怎么办?
⾃⼰造数据
⾃⼰mock数据
将此文件保存,保存到moco的Java文件同一等级目录下
之后打开控制台,运行这个moco(具体操作为先打开控制台,进入保存文件的位置,复制位置,再控制台打开这个文件、输入命令java -jar moco-runner-1.3.0-standalone.jar http -p 12306 -c products.json)
之后再postman中输入地址(http://localhost:12306/products)并执行
二、性能测试
1.1、什么是软件性能
互联⽹的技术基本已全⾯的进⾏普及,所以对于⽤户⽽⾔软件的⽤户体验是⾮常重要的。在软件的⻆度⽽⾔, 性能它⾸先是⼀种指标,具体可以说就是软件系统或构件对于其及时性要求的符合程度,另外⼀种就是软件产品的 ⼀种特性,其实就是响应时间。对⼀个产品⽽⾔,性能的及时性是⽤响应时间或者吞吐量来进⾏衡量,⼀个⽤户操作⾏为,或者说是事务,⽐如单个的事务,响应时间就是完成事务所需要的时间,对⽤户⽽⾔,响应时间就是 端到端的⽤户基本体验。
1.2、不同角色对性能的理解
1.2.1、用户
在用户的角度下,性能就是用户操作的响应时间。
一般情况下业界对响应时间的界定如下:
1——3秒 比较优秀
3——5秒 一般,可以接受
5秒以上 不能接受
所以在做性能测试的过程中一定要注意,当响应时间超过5秒的时候就要提单了,让程序员来具体的优化。
1.2.2、运维
运维除了关注响应时间之外,也比较关心底层的信息资源,这些资源具体可以汇总如下:
系统资源(CPU和内存)
数据库资源(IOPS资源)
JVM内存是否够⽤
系统的最⼤容量
1.2.3、开发
开发的视角更加的全面,毕竟代码都是程序员写的,具体可以汇总如下:
前后交互的响应时间
中间件的参数设置
内存释放泄露
连接数泄露
是否存在不合理的内存使⽤⽅式
是否存在不合理的线程同步⽅式
系统中是否存在不合理的资源竞争
系统架构&代码结构
1.2.4、测试
用户的视角属于全栈性的,所以需要考虑用户视角的产品体验,也要也要监控以及关注运维视⻆和开发视⻆,所以性能 测试中测试的具体⼯作职责可以总结为:
设计合理的场景和测试⽤例来验证系统的资源数据
验证在⾼并发的情况下架构是否满⾜
给架构师以及开发⼈员提供中间件配置参数的合理值范围
使⽤技术⼿段监控系统,DB,中间件,全链路监控的⽅式来监控系统资源情况
1.2.5、WEB前端
所谓前端的性能⽬前也是性能测试中⽐较热⻔的技术之⼀,关注的点具体汇总为如下:
浏览器的资源加载(HTML解析,图⽚资源加载,CSS⽂件资源加载)
前端缓存技术的优化是否合理性
前端与后端的交互性耗时
三、性能测试的常用术语
1.1、响应时间
响应时间指的是一次完整的HTTP请求流程
即响应时间(Response Time)=网络时间+应用程序处理的时间
以测试平台(上图)为案例:
WebServer:nginx
应用Server:Django服务
DataServer:MySQL
1.2、并发用户数
性能测试的核心是验证当前系统是否能够支持现有用户的访问,也就是说系统可以承受在同一时间段多少用户前来访问系统
并发用户数;以秒为单位,可以说:不论从业务视角出发,还是服务器承受压力而言,描述的是同一时间向客户端发出请求的用户,某些时候也被称为“并发测试”。这中间主要体现的是服务器承受的最大并发访问数。
并发用户数:N个用户同时向服务发送请求
在线用户数:仅仅在线,但是并不代表发送了请求,也被称为僵尸用户
1.3、吞吐量
主要用于数据传输方面,也就是被测试系统的执行效率。该术语用于描述传输速度(字节/秒或者比特/秒),在某些情况下(如DB层面),吞吐量指的是操作的速度,也就是每秒操作或者每秒业务数。或者也可以说单位时间内用户端请求的数量,直接体现系统的性能承载能力。
1.4、性能计数器(性能测试中获取的数据)
WebServer:HTTP连接数
应用Server:服务被部署的系统的CPU和内存资源
DataServe:IOPS(每秒读取的数量)
1.5、IOPS
该术语主要是针对数据库的,也就是每秒发生的输出/输入操作的次数,是数据传输的一个度量的方法。用于磁盘的读写,IOPS值的是每秒读和的次数。
IOPS衡量的是读写的速度
1.6、使用率
对于服务所请求的资源,使用率描述的是所给定的时间区间内资源的繁忙程度。如果在一个业务中,会使用大量的内存资源,总的内存资源是4G,在一定数据量的情况下之心该业务形态,内存使用率从100M一直占用到3G,然后随着业务状态内存资源给得到释放呈下降的趋势,那么可以说内存使用率最高为75%
Out Of Memoty(OOM):内存泄漏
1.7、思考时间
思考时间英文名称是Think Time,也称为休眠时间,在业务视角,思考时间指的是用户在进行操作时,每个请求之间的间隔的时间。
1.8、TPS/QPS
事务指的是某个操作或者是⼀组操作的组合,如登录的事务那么就是输⼊账户和密码,点击登录按钮跳转到登录成 功的⻚⾯并且信息都加载出来。
TPS:统计的是每秒处理的事务数,即系统每秒能够处理的事务的数量。
QPS:指的是 每秒查询率,如DB服务器在规定时间内处理流量多少的衡量标准。
三、性能测试理论
1.1、调度
CPU 密集型:应用程序执行繁重的计算,通常运行时间比较长,会占用大龄CPU
IO密集型:应用程序执行IO,计算不多,会占用大量的内存资源,系统最小粒度是线程,也就是说系统调度中国粒度最细的就是对线程组的调度。
线程优先级:
线程组优先级分为1---10
默认的优先级为5
优先级高的优先处理
执行的速度
1.2队列
先进先出,没有优先级的情况下谁跑的快谁先进。