性能测试的一些入门概念
功能测试、自动化测试,性能测试 区别
- 功能测试 在于找bug 预期结果与实际结果进行比较
- 自动化测试 模拟一个用户的操作来发现问题
- 性能测试 不是模拟1个人,**模拟多个人同时**,关注点在于 多个人操作时 响应时间,接口服务器性能测试中,一定是多个人同时操作,才是性能测试
性能的概念
- Q: 100个人同时登录接口进行登录,性能中的avgRT应该在多少,是可以被接受的?
- A:可接受的范围 为1.5s 1.5 APDEX 用户满意度指数
Apdex全称是Application Performance Index,是由Apdex联盟开发的用于评估应用性能的工业标准。Apdex标准从用户的角度出发,将对应用响应时间的表现,转为用户对于应用性能的可量化范围为0-1的满意度评价。
事务
- 指的是 一个请求行为,并不一定只有一个接口,所以,一个事务可能是多个接口 。是从发起,到网络传输,收到响应的过程
jmeter:默认情况下,1个接口请求一次,认为一个1个事务Transation。jmeter 也可以通过务控制器,挂载多个接口请求,合并成为1个事务
性能测试
指: 通过工具,模拟多用户发起请求,获取**性能指标值*
用工具来模拟多个人的方式很多种 主要包含 进程 和线程
- + 线程: 使用进程的资源,来进行测试。jmeter、lr
- + 进程: 资源拥有者,资源消耗会比较大。LR
- + 进程+ 线程: ngrinder
- + 协程: python+locust
协程不是系统级线程,很多时候协程被称为“轻量级线程”、“微线程”、“纤程(fiber)”等。简单来说可以认为协程是线程里不同的函数,这些函数之间可以相互快速切换协程和用户态线程非常接近,用户态线程之间的切换不需要陷入内核,但部分操作系统中用户态线程的切换需要内核态线程的辅助,协程是编程语言(或者 lib)提供的特性(协程之间的切换方式与过程可以由编程人员确定),是用户态操作。协程适用于 IO 密集型的任务。常见提供原生协程支持的语言有:c++20、golang、python 等,其他语言以库的形式提供协程功能,比如 C++20 之前腾讯的 fiber 和 libco 等等
性能指标
- 平均响应时间 avgRT 90%
- TPS: 服务器每秒处理的事务数
- 吞吐量:在一次性能测试过程中网络上传输的数据流量的总和。吞吐量/传输时间,就是吞吐率
+ 1、没有网络瓶颈:tps 数值 = 吞吐量数值
+ 2、如果网络有瓶颈: tps 数值 != 吞吐量数值
- 吞吐率 每秒钟能通过多少kb数据
- 吞吐率也可以用来指系统的业务吞吐能力
业务数/小时或天” “访问量/天” “页面访问量/天” 来衡量。例如在银行卡审批系统中,可以用“千件/每小时”来衡量系统的业务处理能力。
- 服务器资源利用率 cpu、内存、io的利用率
并发用户数
- 严格意义的并发 同一时间发起相同请求
所有的用户在同一时刻做同一件事情或者操作,这种操作一般是指做同一类型的业务, 例如,在贷款审批业务中,一定数目的用户在同一时刻对已经完成的审批业务进行提交(操作的不是同一记录); 还有一种是特例,即所有用户进行完全一样的操作
- 广义范围的并发 同一时间发起请求(相同、不相同)
多用户同时对系统进行操作,因此属于并发的范畴
- 集合点:集合多个人在同一时间发起相同请求
并发用数100 发起请求,一秒钟会发起多少请求?(请求的频率)不知道,所以1秒钟总请求量,不知道是多少
负载测试
通过在被测系统上不断增加压力,直到性能指标达到极限,例如响应时间超过预定指标或者某种资源已经达到饱和状态。这种测试可以找到系统的处理极限,为系统调优提供依据
- 逐步增加并发用户数,
- 区间怎么判断
有没有报错
tps下降
响应时间变长
假如服务器每秒可以处理50个事务,最大用户请求为300
先找每日最大处理事务,假定服务器 处理时间为白天的8个小时
每小时可以处理 50 t/s * 60 * 60 = 18w 个请求 ,8小时 取 6~7 的值乘以 50*6=300个
一天 18w * 8h = 144w 访问量 ,pv日均访问量