下面会介绍性能测试的几个基本点
目录
性能测试定义
性能测试指标
性能测试的类型
性能测试的需求
性能测试的流程
性能测试的原则
性能测试的定义
定义:
一个测试过程
目的:
为评估系统在一个给定的环境和场景中的性能表现是否与需求一致,便于对软件系统的治疗进行度量
(概括:在特殊场景下测试软件性能是否与需求一致)
评估方向:
1、软件系统的响应速度
2、效率
3、资源使用
...
考量标准:
-
系统是否存在性能缺陷
-
找出系统弱点,识别系统瓶颈
-
系统性能调优
-
验证系统稳定性、可靠性
性能测试的指标
1、性能测试一定要接触工具来协助完成
2、性能测试重点关注:空间和时间上的很多 峰值 和 异常的系统运行 情况(如:多用户并发操作、大数据量积累、超负荷运行、系统长期使用...)
3、性能测试借助 所监控和收集 的各项指标来分析系统的性能
(它涵盖了:软件指标(软件本身)、硬件指标(CPU、内存等)、资源运行情况(内核指标))
(性能要求高的软件倘若在最后测试时才发现性能问题,通常是系统架构或者某些关键算法设计得不合理导致)
(这时候再进行修复会给整个项目带来很大的困扰,甚至会推翻这个系统。)
(这种问题通常的做法是杀死项目。如果进行二度研发的费用会高出很多。如果是算法和架构问题那么重新选择算法和架构会延迟产品上线时间,人员维护的成本也会超出预算。)
性能测试的要点:
分类型:
1、(应用软件)通常在功能测试基本完成后进行(系统测试阶段)
2、(系统软件)通常在单元测试阶段就开始(操作系统或者数据库这一类的软件(组成一个完整软件的一个部分))
3、性能测试计划、测试方案和测试用例、测试结果分析大多情况统一在一个文档里——《性能测试方案文档》
4、性能测试环境应考虑两个点:
真实性:
有效性:
主要从以下方面考虑:
1、硬件环境:(CPU、内存...)
2、软件环境:(软件版本、参数设置、操作系统或数据库的版本、被测的应用版本以及使用到的第三方软件的版本、数据库的并发读写数等)(这些东西通常通过运维人员可以直接获取)
3、测试使用场景一致性:(使用的基础数据、模拟用户真实使用场景的一致性)
4、性能测试的重点和难点:
(1)前期数据设计
(2)后期数据分析
(这些都需要使用到Python去辅助我们完成工作)(千万不要认为借助工具可以代替我们做所有的测试工作,工具只是帮助我们收集大量的测试数据,分析数据和确定系统瓶颈偶在才是关键,这需要经验和技术功底)
5、 测试人员需要考虑全面的性能,包括用户、开发、管理员等各个视角的性能。
测试人员在做性能测试时除开要关注表面的现象如响应时间,也需要关注本质,比如用户看不到的服务器资料利用率,架构设计是否合理?代码是否合理等言方方面面。
6、性能测试用例通常具备高复用性。不随系统某个功能点的修改而变更。
性能测试的类型
在这里先介绍类型在介绍应用场景。
类型:
基准测试:给系统施加较低压力时,查看系统的运行状况并记录相关数作为基础参考。
负载测试:对系统不断地增加压力或增加一定压力下的持续时间,直到系统的某项或多项性能指标达到安全临界值,例如某种资源已经达到饱和状态等
压力测试:(这里要注意与负载测试进行区分。二者概念狠像。)系统在峰值负载或超出最大载荷情况下的处理能力。 关注点:评估系统处于或超过预期负载时系统的运行情况
稳定性测试:给系统加载一定业务压力的情况下,使系统运行一段时间,以此检测系统是否稳定
并发测试:测试多个用户同时访问同一个应用、同一个模块或者数据记录时是否存在死锁或者其他性能问题
(这里要搞清楚什么是“死锁”:指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象 例如:永远在互相等待的进程称为死锁进程)
容量测试:测试系统在满足性能目标的前提下能支持的用户数、事务数等。用于规划将来性能需求增长的情况下,对系统资源增长的要求(硬件要求)
3、测试眼中的性能?
1、需要考虑用户、开发、管理员等各个视角的性能。
2、关注表面的现象如响应时间,也需要关注本质
用户看不到的服务器资料利用率,架构设计是否合理
关注点:
在客户端性能测试:
并发性(重点)、疲劳强度、大数据量、速度...
在网络上性能测试:
网络带宽、延迟、负载、TCP端口变化如何影响用户响应时间...(利用工具分析应用瓶颈)
服务器性能测试:
工具监控、系统本身命令监控。(Linux当中的TOP命令...监控硬件情况)
这里介绍部分Linux的操作基础篇:
系统:
usname -a:查看内核/操作系统/CPU信息
head -n l /etc/issue:查看操作系统版本
cat /proc/cpuinfo:查看CPU信息
hostname:查看计算机名
lspci -tv:列出所有PCI设备
lsusb -tv:列出所有USB设备
lsmod:列出加载的内核模块
env:查看环境变量
资源:
free -m:查看内存使用量和交换区使用量
df -h:查看各分区使用情况
du -sh:查看指定目录的大小
grep MemToal/proc/meminfo:查看内存总量
grep MemFree/proc/meminfo:查看空闲内存量
uptime:查看系统运行时间、用户数、负载
cat /proc/loadavg:查看系统负载
磁盘和分区
mount | column -t:查看挂接的分区情况
fdisk -l:查看所有分区
swapon -s:查看所有交换分区
hdparm -i /dev/hda:查看磁盘参数(仅适用于IDE设备)
dmesg | grep IDE:查看启动时IDE设备检测状况
网络
ifconfig:查看所有网络接口属性
iptables -L:查看防火墙设置
route -n:查看路由表
netstat -Intp:查看所有监听端口
netstat -antp:查看所有已经建立的连接
netstat -s:查看网络统计信息
进程
ps -ef:查看所有进程
top:实时显示进程状态
系统性能测试指标:
首先要分架构进行分析,常见的前端架构有两种:
1、B/S架构
B/S结构程序一般会关注的通用指标如下:
平均每秒钟响应次数-总请求时间/秒数
成功的请求
失败的请求
成功的点击次数
失败的点击次数
每秒点击次数
每秒成功的点击次数
每秒失败的点击次数
尝试链接数
2、C/S架构
C/S结构程序一般会关注的通用指标如下:
数据库的测试指标
用户连接数,也就是数据库的连接数量
数据库死锁
数据库CACHE的命中情况
多用户测试情况下的内存,CPU,系统资源调用情况(硬件)
(C/S架构和B/S架构前面有提到)
系统性能测试指标(七大维度)
1、响应时间(Response Time):
系统对请求作出响应的时间
2、事务响应时间(Transaction Response Time):
事务指的是一组密切相关的操作组合。例如:一次访问包括多次HTTP请求与响应,这些请求和响应的过程和结果称为“事务”
3、并发用户(Concurrent Users):
指同一时间使用相同资源的人或组件去执行请求和访问
4、吞吐量(Thoughput):
单位时间内系统处理的客户请求的数量
5、每秒事务量(Transaction Per Second,TPS):
每秒钟系统能够处理的交易或事务的数量
6、点击率(Hit Per Second,HPS):
每秒钟客户端向WEB服务器提交的http请求数
7、资源利用率(Resource Utilization):