为什么想认识"性能测试" ?
在公司里,在产品上线前,项目负责人总会和测试某某说:"上线前,把软件的性能测试一。" 这是一个很常见的对话场景。我对性能测试的感觉一直是:江湖一直有它的传说,但是没有人见过它的全貌。大概意思就是感觉对它知道一星半点,但是总到实践的时候会觉得它特别神秘,不知如何入手。但是它又是很重要的一个测试类型,毕竟关乎到用户体验。如果功能都是好的,用户结果因为性能问题导致弃用辛苦开发的软件,得不偿失,所以作为质量的把关者还是要把这个困难的大山还是啃啃。
性能测试是如何定义的 ?
性能测试是通过自动化的测试工具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进行测试。负载测试和压力测试都属于性能测试,两者可以结合进行。通过负载测试,确定在各种工作负载下系统的性能,目标是测试当负载逐渐增加时,系统各项性能指标的变化情况。压力测试是通过确定一个系统的瓶颈或者不能接受的性能点,来获得系统能提供的最大服务级别的测试。
影响性能的因素
性能测试想要模仿的真实场景
我们可以看到请求经过客户端发送,在网络的传输下,到达了服务器集群,服务器对数据进行处理,然后会通过网络返回个给客户端。所以我们可以看到影响性能的三个方面:客服端(也就是设计的软件),网络部分(比如网络的快慢肯定会影响请求的发送和响应),再就是服务器方面(比如服务器对数据处理的快慢)
网路上收集整理得一般性能测试分析出需要调优的几点:
硬件上的性能瓶颈:
一般指的是CPU、内存、磁盘I/O 方面的问题,分为服务器硬件瓶颈、网络瓶颈(对局域网可以不考虑)、服务器操作系统瓶颈(参数配置)、中间件瓶颈(参数配置、数据库、web服务器等)、应用瓶颈(SQL 语句、数据库设计、业务逻辑、算法等)。
应用软件上的性能瓶颈:
一般指的是应用服务器、web 服务器等应用软件,还包括数据库系统。
例如:中间件weblogic 平台上配置的JDBC连接池的参数设置不合理,造成的瓶颈。
应用程序上的性能瓶颈:
一般指的是开发人员新开发出来的应用程序。
例如,程序架构规划不合理,程序本身设计有问题(串行处理、请求的处理线程不够),造成系统在大量用户方位时性能低下而造成的瓶颈。
操作系统上的性能瓶颈:
一般指的是windows、UNIX、Linux等操作系统。
例如,在进行性能测试,出现物理内存不足时,虚拟内存设置也不合理,虚拟内存的交换效率就会大大降低,从而导致行为的响应时间大大增加,这时认为操作系统上出现性能瓶颈。
网络设备上的性能瓶颈:
一般指的是防火墙、动态负载均衡器、交换机等设备。
例如,在动态负载均衡器上设置了动态分发负载的机制,当发现某个应用服务器上的硬件资源已经到达极限时,动态负载均衡器将后续的交易请求发送到其他负载较轻的应用服务器上。在测试时发现,动态负载均衡器没有起到相应的作用,这时可以认为网络瓶颈。
性能测试出现的原因及其定位十分复杂,这里只是简单介绍常见的几种瓶颈类型和特征,而性能测试所需要做的就是根据各种情况因素综合考虑,然后协助开发人员DBA运维人员一起定位性能瓶颈。
性能指标
响应时间 t1+t2+t3
从发起请求到请求响应的时间
网络传输时间 t1 t3
服务器处理时间 t2
先看一个请求从发出到用户看到结果的过程:用户发送一个请求后,通过网络传输、DNS解析等步骤到达Server端后,Server通过各种算法处理,将结果通过网络传输返回到Client,Client要经过解析渲染等步骤,最后才呈现给用户。
并发数
单位时间内发起请求的用户数
线程数---- 虚拟用户数
吞吐量吞吐率 (事务/s Kb/s) 吞吐量:即单位时间内系统能处理的请求数量,吞吐量也是可直接反映服务器所能承受的压力。
吞吐率:即单位时间内系统处理的请求的数量大小。
TPS
即Transaction Per Second,每秒通过事务数。TPS是直接反映系统性能的指标。TPS值与系统性能成正比。
资源利用率
CPU:对于CPU都不陌生,简言之,是用来处理\判断事务的,CPU一般有系统CPU与用户CPU,前者是 处理系统占用的资源 ;而后者是处理应用程序占用的资源 。
内存:即数据存储区域。一般读数据时从内存中读取要比硬盘读取快很多 ,但需要关注的是内存溢出或内存泄漏问题。
I/O:即,Input/Output,输入/输出。关注与磁盘的交互频率等。
性能测试工具
Jmeter
LoadRunner
自研