性能测试的基础概念(一)
本文我们主要关注以下几个问题:
- 什么是软件性能测试?
- 性能测试的目的?
- 性能测试分类及工具选用?
- 性能测试的步骤。
- 性能测试应该关注的指标。
什么是软件性能测试
系统的性能是一个很大的概念,覆盖面非常广泛,对一个软件系统而言,包括:执行效率,资源占用,系统稳定性,安全性,兼容性,可靠性,可扩展性 等。
性能测试是为描述测试对象与性能相关的特征并对其评价,而实施和执行的一类测试。
它主要通过自动化的测试工具模拟多种正常,峰值以及异常负载条件来对系统的各项性能指标进行测试。通常大家把性能测试,负载测试,压力测试统称为性能测试。
不同群体眼中的性能测试
系统用户群体眼中的性能测试
通常系统用户在软件性能方面最关注的两个点是耗费成本和处理能力。
- 耗费成本:系统的运行环境,即软/硬件配置要求不是很高,购买成本较低,间接其实意味着系统在运行时使用较少的CPU,内存网络等资源。
- 处理能力:系统的业务处理能力,包括单位时间内处理的业务数量,每个业务处理的时间,能支持多少用户同时做业务,系统能否长时间稳定提供服务等。这也就是后续将要学习的性能指标方面的一部分内容,这些内容也是最直接和最真实的系统用户感受。
管理人员的性能关注点
性能关注点 | |
---|---|
应用服务器,数据库服务器 | 资源利用率 |
支持用户数 | 系统容量 |
最大并发用户 | |
是否可以更换硬件提高性能,代码是否可优化,是否可优化SQL语句 | 可扩展性 |
稳定性,能否支持7*24H处理业务 | 稳定性99.99% |
开发人员关注的性能问题
作为软件开发群体,他们是系统的缔造者,如果把软件看成一个孩子的话,那么开发群体无疑就是孩子的父母,每个父母都希望自己的孩子及健康又聪明、漂亮。
开发群体关注的性能问题 | |
---|---|
健康 | 持续稳定的运行 |
聪明 | 业务响应速度准确、快速 |
漂亮 | 系统的功能强大,易用性、兼容性 |
性能测试的目的
性能测试是一项综合性的工作,致力于暴露问题,评估系统性能趋势。性能测试工作实质上是利用工具去模拟大量用户操作来验证系统能够承受的负载情况没找出潜在的性能问题,分析并解决;找出系统性能变化趋势,为后续的扩展提供参考。
专业术语
性能测试
模拟用户负载来测试系统在负载情况下,系统的响应时间、吞吐量等指标是否满足性能要求。
负载测试
负载测试是通过逐步增加系统负载,测试系统性能的变化,并最终确定在满足系统性能指标的前提下,系统能够承受的最大负载量的测试。简而言之,负载测试是通过逐步加压的方式来确定系统的处理能力和能过够承受的各项阈值。例如通过逐步加压得到“响应时间不超过10秒”、“服务器平均CPU利用率低于85%”等指标的阈值。
简单说,负载测试可以帮我们定容定量,找出系统性能拐点,给予生产环境规划建议。这里的性能指标包括TPS(每秒事务数)、RT(事务平均响应时间)、CPU Using(CPU利用率)、Mem Using(内存使用情况)等软硬件指标。
压力测试
压力测试(强度测试):在一定软硬件条件下,通过高负载的手段来使服务器资源(强调服务器资源,硬件资源)处于极限状态,测试系统在极限状态下长时间运行是否稳定,确定是否稳定的指示包括TPS、RT、CPU Using、Mem Using等。
并发
并发测试是测试多个用户同时访问同一个应用/同一个模块或者数据数据记录时是否存在死锁或其他性能问题。
- 狭义:所有用户在同一时刻做同一件事情或操作,这种操作一般针对同一类型的业务,或者所有用户在进行完全一样的操作,目的是测试数据库和程序对并发操作的处理。
- 广义:多个用户对系统发出了请求或者进行了操作,但这些请求和操作可以是不同的。对整个系统而言,仍然有很多用户同时操作。
- 狭义并发强调对系统的请求操作完全是相同的,多用于性能测试、负载测试、压力测试、稳定性测试场景;广义并发并不限制对系统的请求操作,多适用于混合场景/稳定性测试场景。
事务
- 事务是性能测试脚本中一个重要特性。要度量服务器性能,需要定义事务,每个事务都包含开始标记和结束标记。事务用来衡量脚本中一行代码或者多行代码的执行所耗费的时间。
- 例如,访问某个网站,可以把浏览首页定义为一个事务,也可以把登录定义为一个事务,还可以把两者合并起来定义为一个事物,主要看实际测试需要。
- 在单独事件/操作定义为一个事物时,统计时间较为准确。
响应时间/平均响应时间(RT/ART)
指一个事务花多长时间完成(多长时间响应用户请求),为了是这个响应时间更具代表性,会统计更多的响应时间然后取平均值,即得到事物平均响应时间(ART),为了方便大家通常会直接用RT来代替ART,两者代表同一个意思。
TPS
每秒完成事务数,通常指每秒成功的事务数,性能测试中重要的综合性性能指标。
点击率
从客户端发起请求服务器的数量,一般用于衡量客户端性能,问题一般出现在网络或者本机。
资源利用率
资源利用率是指资源的使用程度,比如服务器(网络及数据库)的cpu利用率,内存利用率,磁盘利用率,网络带宽利用率等。
- cpu:他就像人的大脑,主要是进行判断和处理,能反映出系统的繁忙程度,一般分为系统CPU(%sys)与用户CPU(%use),其中系统CPU是处理系统本身所占用的资源,用户CPU则是处理程序所占用的资源,对象不同。
- Load Averge:之一短时间内CPU正在处理和等待CPU处理的任务,也就是CPU使用队列的长度的统计信息。这里的Load Average值就像地铁里等待进站上车的乘客,越多则Load Average值就越大。
- Memory:他就像是人大脑的记忆区域,将各种信息收集起来存放。数据从内存读取要比从磁盘上读取速度快,而内存经常发生内存泄漏或内存溢出的现象。
- 队列可以理解成地铁进站的排队现象,队列长,说明处理能力可能达到了极致或是遇到了阻塞。
- 网络:重点关注网络的流量,看是否存在网络带宽的瓶颈。
性能测试工具对比
自研/开源 | 商业工具 |
---|---|
能够开发出最适合应用的测试工具 | 依赖于工具本身的特性,较难扩展 |
易于学习和使用 | 依赖于工具的易用性和所提供的文档 |
工具的稳定性和可靠性不足 | 稳定性和可靠性有保障 |
可形成组织特有的测试工具体系 | 很难与其他工具集成 |
LR | Jemeter |
---|---|
入手快,3个部分 | 入手慢,元件/插件较多 |
录制脚本简单 | 录制脚本需第三方插件badboy |
报表齐全,收集数据方便 | 需添加较多插件 |
场景设计较简单 | 新的线程组,不是自带的 |
大并发时数据较准确 | 大并发数据不太准确(TPS很高,响应时间小一点) |
支持线程和进程 | 只支持线程 |
测试单个SQL,直接用Jemeter较方便 |
PS:线程相当于生产线,进程相当于整个车间