全国咨询/投诉热线:400-618-9090

首页技术文章正文

如何做性能测试?[软件测试培训]

更新时间:2019-11-12 来源:黑马程序员 浏览量:

要解决性能测试这个问题,我们可以分为三大步:

第一步:了解性能测试

第二步:熟悉性能测试流程

第三步:从性能测试原理分析性能测试流程和相关的技术知识

下面我们详细介绍

一.了解后端性能测试

1.为什么要做性能测试?

1.1 这里提供了2个案例:

示例1:

游戏行业:某游戏上线新功能,目标是全服游戏群体,结果上线后,先后出现了服务器崩溃,游戏功能图标加载缓慢等问题,导致玩家怨声载道,为此,游戏运营商不得不发放了许多奖励。具体损失不表,为赶进度而发布的功能,也因为生产事故导致延期更长的时间

这就是典型的没有进行性能测试,或者说性能测试不充分导致出现的生产事故。在游戏行业还比较好,毕竟损失的只是虚拟的货币和玩家的游戏热情,但是在传统行业呢?

示例2:

传统航空行业:2019年9月5日,波音777X飞机在压力测试的过程中,舱门炸毁。

如果,波音的777X飞机没有经过压力测试就试飞了,那么当遇到同样的条件时,舱门必然炸毁,整个飞机就会直接暴露到高空低压低氧的环境,全飞机的人生存将会受到直接威胁。

通过这两个案例,我们知道,在一些极限的场景下,软/件和硬件会造成极大的破坏和损失,因此,我们需要进行性能测试,来验证软件在高压力下,高并发下,高负载下的实际工作情况。

2. 什么是性能测试?

性能测试就是模拟一些极端场景,对软/硬件性能进行测试,判断其极限性能和在极限性能边界上的运行状态。

性能测试主要分为前端性能,网络性能和后端性能

• 前端性能:是指对前端相关的数据指标进行测试,主要是HTTP请求,JavaScript,多媒体数据,CDN,缓存等进行测试,主要关注响应时间。一般优化方向是,缩小数据包,提高缓存命中率,即时响应。

• 网络性能:是指数据包在网络中传播时的性能,主要关注网络带宽,网络吞吐量,网络延时,丢包率等指标。

• 后端性能:前端发起请求后,经过的各类中间件和服务器处理的性能。比如:apache、nginx、rabbitmq、storm、zookeeper、dubbo、mysql数据库等。主要关注TPS(Transaction Per Second 每秒事务请求数),CPU,内存,交换内存,IOPS(IO吞吐量),TCP连接数等指标)

3.性能测试的目标

总之,性能测试的目的,就是为了提前发现软/硬件的瓶颈,从而可以进行评估和改进的一种测试。

本文重点介绍软件性能测试中的后端性能测试。

二.熟悉性能测试流程

本章节主要是为了介绍常用的性能测试流程

性能测试流程可以简单的划分为4个阶段:

• 性能需求分析阶段

• 准备阶段

• 执行阶段

• 报告和总结阶段


1573542498293_性能测试01.jpg

性能需求分析阶段

• 熟悉项目相关的资源,如:架构设计,软/硬件环境配置,线上业务运营数据(交易量、用户活跃度、请求分布等等)

• 根据运营数据或者指标,确定性能测试要达到的目标,如:支持xx用户并发,TPS达到多少,响应时间达到多少,还有CPU,网络,IO的负载情况等等

• 设计性能测试计划:与功能测试计划差不多,主要对以下内容进行设计(根据实际情况设计,比如有的公司只看结果,就可以省略许多不必要的文案说明):

– 项目背景

– 项目结构

– 测试功能/范围

– 软/硬件资源准备和对比

– 技术术语

– 时间/人力安排

– 度量方式

– 准入准出条件

– 各阶段需要接收和交付的文档

– 压测工具和监控工具

– 风险项

– 其他

• 设计性能测试场景

主要有以下场景:

– 基准测试:了解系统在静置时的资源消耗,如cpu,io,网络带宽,网络连接的情况。如果有干扰,务必排除。

– 单次连续请求测试:1次连续请求情况下的tps,响应时间,服务器资源消耗情况,主要用于参考。

– 负载测试:逐渐增加并发请求数,查看tps,响应时间,错误率,服务器资源消耗情况,主要用于分析最大性能。

– 压力测试:在最大性能的临界点上保持压力进行测试,查看服务器在高压力情况的处理情况。

– 稳定性测试:连续xx天内,在一定的并发下进行测试,查看服务器运行情况是否能达到需求设计

准备阶段

• 搭建性能测试环境

• 设计性能测试用例

• 准备测试数据

• 编写测试脚本

执行阶段

• 运行性能监控工具

• 按照测试场景,执行测试用例。

• 分析:分析性能瓶颈,针对不同的业务场景,分析的侧重点也不一样,比如计算密集型,IO密集型的业务,还有线程锁,垃圾回收机制等等

• 调优

结果阶段

• 总结测试结果,输出性能测试报告

三.了解性能测试需要用到的技术

本章节,主要是通过性能测试的原理,了解性能测试需要使用的各方面的知识和技术。

性能测试原理介绍:

性能测试,本质就是模拟客户端请求,对服务器进行高并发,高流量的压力测试,从而验证服务器提供服务的能力,并找出瓶颈点,提出或者进行优化。

问题:

1. 怎么模拟高并发,高流量?

2. 怎么进行性能优化?

1. 怎么模拟高并发:

– 使用多线程技术,模拟高并发。

– 如果并发太高,如10w并发以上,则需要使用负载均衡和分布式处理技术,jmeter工具支持多台机器作为负载机。

2. 怎么模拟高流量:

– 在每个请求中塞入大量数据即可

3. 怎么进行性能优化

– 这是个大问题,下文《怎么进行性能优化》会有更详细的讲解

那么怎么提升性能呢?我们首先介绍一个衡量性能标准的一个参数:TPS(Transaction Per Second 每秒事务请求数)。

我们再看一下TPS计算公式:

TPS = 总请求数/ 平均响应时间

总请求数:在一段时间内发送的所有请求数量

平均响应时间:所有请求的平均响应时间

通过这个公式,我们可以知道,当分母越小时,TPS越大。所以要提升性能,我们只需要提高平均响应时间就可以了。那么怎么减少平均响应时间呢?【本文来自:黑马程序员

我们先看一个客户端到服务器的请求流程图:

1573542577305_性能测试02.jpg

图中,客户端发送请求经过了互联网到服务器,服务器经过内部处理,从数据库中读取了数据,然后把数据返回给客户端。这过程中,经历的时间大致可以分为:C1+T1+T2+T3+N2+T4+T5。

所以,要把平均响应时间缩小,我们只需要缩小这8个时间就够了,其中主要包括:

• 网络时间(T1+T2+T3+T4+T5),

• 服务器内部处理时间(N1),

• 数据库处理时间(N2),

• 客户端处理时间(C1)。

所以我们可以就可以从这三个方向去优化:提高网络传输速率,服务器内部处理速率,数据库处理速率,客户端处理速率,其中客户端处理速度也和服务端优化策略基本相同

性能优化:

网络传输速率的提高:

1,采用光纤,配置路由表,缩短网络传输距离与路由器跃点数量。

2,如果是实时服务,那么需要配置缓存服务器,尽量避免缓存穿透

服务器内部处理速率的提高:

1. 计算密集型:优化思路是提高CPU利用率,采用多线程的思路进行。但是线程数量不能超过cpu核心数。因为线程数量超过cpu核心数后,cpu会分片执行超过部分的线程,会增加cpu读取线程缓存的压力,使计算能力下降

2. IO密集型:

– 优化思路是提高存储的效率,如使用固态硬盘,阵列,分布式等技术。

– 由于IO密集型中,CPU可能会等待IO操作完成。所以我们可以使用超过CPU核心数的线程来访问IO,从而提高性能(但如果磁盘繁忙,线程数再多也只是在磁盘队列中排队,增加CPU线程数来访问IO的方法,适用于IO读/写操作并不繁忙,但是需要长时间寻址的场景)

– 注意:因为磁盘内部只有1个线程处理IO操作,所以要真正实现磁盘的并发,需要使用多个磁盘,也就是磁盘阵列

数据库处理速率:

• 数据库直接和IO进行交互,所以提高IO性能,能提高数据库性能。

• 数据库有自己的数据结构,所以优化数据存储和查询的相关算法,也能提高数据库性能

• 索引优化

• 缓存优化

• 数据库连接优化

• 数据库查询语句优化

• 分表分库

• 分布式处理

性能优化方向也可以用一个思维导图来表示:

硬件优化:加cpu升级,cpu阵列;使用ssd固态硬盘;主板用最先进的,内存用最高的,网络用专线等等。

操作系统优化:

• windows操作系统,去掉不需要的服务,根据实际业务场景调整线程,虚拟内存,缓存的大小等相关配置项,需要专业人士操作

• Linux操作系统:与windows基本相同

中间件优化:根据不同的业务场景,选择不同的中间件,调整配置等等,如nginx中启用的cpu核心数量等等

架构优化:采用分布式存储架构,分布式服务器架构,负载均衡等

代码优化:许多问题都是代码的问题,如果代码问题能准确定位,可以考虑优化代码。

数据库优化:优化索引,配置,数据库连接,算法等等

算法优化:这个不提了,算法属于底层的优化,需要非常扎实的计算机基础知识和优秀的逻辑思维以及灵感

其他:线程,进程,网络等等

性能监控

我们要分析数据,就必须得到数据,所以需要性能监控工具来采集和展示数据,才能进行分析。

那么我们要怎么进行监控呢?这里我们可以借助已经实现的工具来进行。

Linux:

• 可以使用sysstat工具包中的sar命令来监控CPU,内存,IO,网络的运行情况,具体用法参考:http://lovesoo.org/linux-sar-command-detailed.html

• 可以使用ps命令查看线程运行情况

JAVA:可以使用jstack,jprofile,jstat,jmap,jps工具来进行查看,这是java自带的工具包,用于分析java的堆栈信息

Windows:

• 可以使用widnows自带的资源监视器监控和采集数据

数据库监控:

• mysql数据库有自带的监控工具,但是收费

• 可以使用免费的工具进行监控,如innotop

• 可以使用综合能力强大的工具监控,如zabbix(也能监控服务端)

其他:

• 前端性能监控:Yslow,谷歌开发者模式->performance,使用windows.performance 进行定制化开发

• Android监控:

– 网易开源的Emmagee,

– 腾讯开源的GT,

– 科大讯飞的iTest,

– Google的开源Battery

– 自己开发

• IOS监控:

– 自己开发,参考:http://www.cocoachina.com/articles/19680

• 服务器中间件:nginx,apache,dubbo,redis,kafka等

看到需要学习这么多技术,可能会让大家感到许多压力。但是大家不用慌,这里介绍一个开源的性能测试工具,功能强大也好用,不满意还可以二次开发,它就是jmeter

jmeter可以很好的支持并发操作,并有内置模块收集TPS,响应时间等关键性能指标。服务端性能也可以使用jmeter插件来实现监控,只要掌握jmeter工具的使用和性能测试流程,性能测试就不再遥远!

总结

想要做好性能测试,的确需要比较扎实的基本功和丰富的应用经验,但是如果想快速入门进行性能测试,可以重点掌握性能测试流程和jmeter工具就可以初步达到要求了。

本文来自:黑马程序员 软件测试学院

javaee

python

web

ui

cloud

test

c

netmarket

pm

Linux

movies

robot

http://www.itcast.cn/subject/uizly/index.shtml?seozxuids

14天免费试学

基础班入门课程限时免费

申请试学名额

15天免费试学

基础班入门课程限时免费

申请试学名额

15天免费试学

基础班入门课程限时免费

申请试学名额

15天免费试学

基础班入门课程限时免费

申请试学名额

20天免费试学

基础班入门课程限时免费

申请试学名额

8天免费试学

基础班入门课程限时免费

申请试学名额

20天免费试学

基础班入门课程限时免费

申请试学名额

5天免费试学

基础班入门课程限时免费

申请试学名额

0天免费试学

基础班入门课程限时免费

申请试学名额

12天免费试学

基础班入门课程限时免费

申请试学名额

5天免费试学

基础班入门课程限时免费

申请试学名额

5天免费试学

基础班入门课程限时免费

申请试学名额

10天免费试学

基础班入门课程限时免费

申请试学名额
在线咨询 我要报名