性能测试从需求分析开始

自从年后转岗专职自动化测试岗位后,性能测试基本被我丢一边了,很久没更新性能测试相关的博客了。。。前端

今晚和朋友讨论完自动化测试框架的优化以后,有认识的同行问我一个性能相关的问题,就和他聊了下个人一些建议。。。数据库

这篇博客,就以今晚的性能话题为主,聊聊性能测试中,从需求分析开始,要作哪些事情吧。。。缓存

 

1、产品需求 服务器

一、业务场景:架构

一个问卷调查的功能,而后产品和业务会不定时经过前端界面去根据筛选条件查询相关问卷问题的答案明细,可是以为很慢,让测试这边给出一个指标。负载均衡

二、系统架构:框架

MySQL数据库,全部问卷问题相关的数据都存储在同一张表,单台服务器,无缓存,经过一个查询接口去查询返回数据。运维

三、数据量:工具

天天大概新增3000张问卷调查,每张问卷30个问题,每一个问题下面还有具体的答案,答案的数据类型、大小不清楚。性能

PS:从我我的的了解来看,对大部分测试人员来讲,遇到的性能需求大致都是这种范围不明确,指标不清楚的性能需求,那么如何作好测试工做,在体现本身价值的同时,还能学习提高呢?

 

2、具体问题具体分析

一、场景建模

和产品业务沟通,明确他们的操做场景,好比查询的条件(时间范围、问卷类型、分数范围、用户类型等),操做时间(具体到天天哪一个时间段有多少人进行这些操做)。

二、肯定指标

明确了业务场景后,确认不一样的操做下,用户(这里是产品和业务人员)的可接受值(好比天天早晨9:00-9:10,100我的进行查询操做,查询条件是最近一周A类型用户的B类型问卷,分数在80分以上),

可接受的最大响应时间不超过5S。

 

3、测试进行中

确认测试范围和具体的性能指标后,接下来就须要进行测试方案设计、测试用例设计等一系列的计划了,这个阶段是最耗费时间也是最麻烦的。

一、环境确认

首先须要确认测试的执行环境,是生产、UAT仍是独立的测试环境。测试环境对测试结果的影响是很大的,大致以下:

生产:在执行测试的过程不能对其余用户访问形成影响(时间选择很重要),测试数据污染要解决(数据隔离:线程标记、用户白名单、挡板、mock对象、测试数据落入影子库);

UAT:做为验收环境,通常来讲数据的准确性和系统版本都是最新和相对稳定的,但要考虑对其余业务的影响,理由同上;

测试:数据预埋、基础数据准备、测试数据准备、每次执行迭代后的数据初始化、服务器配置和生产是否能够等量代换等;

二、团队合做

性能测试不是一我的就能够搞定的,通常都须要运维、DBA、开发、测试配合来进行,所以作好沟通和协做很重要。

三、测试要作什么

上面的工做作完以后,你须要考虑测试执行工具和脚本开发的工做。须要作的事情以下:

①、和开发沟通,获取业务功能对应的接口文档(若是没有,想办法),参数字段的含义,对应的数据库表字段,形成的影响;

②、和运维沟通,确确认服务器的部署,配置(这里可能须要进行基准测试和配置测试);

③、和DBA沟通,确认测试数据预埋、基础数据准备、迭代后的数据初始化工做;

④、测试人员自己,须要准备测试数据,开发测试脚本,进行脚本调试,执行和监控分析等工做;

 

4、体现测试的价值

如何在性能测试中体现测试的价值?

我相信不少测试童鞋都经历过那种不被看中的阶段,但也要努力去改变现状,不断体现本身的价值。如何体现,请看下面:

一、作好沟通协调

①、和业务产品沟通,确认需求和场景;

②、和技术团队沟通,尽可能多沟通,达成一致(测试方案、测试用例、测试数据、测试环境);

二、本职工做要作好

①、测试方案、测试用例设计;

②、测试工具选型、测试脚本开发和调试;

③、测试数据的准备;

④、测试执行、监控和分析定位;

三、创造价值才能赢得尊重

职场,一切到头来还要从自身创造的价值来赢得尊重,那么如何从测试的角度创造价值?

①、提升交付的产品质量(覆盖率、风险分析、容错方案、容灾方案);

②、提升交付速率(解决问题的过程抛出问题,流程不规范、开发不规范、管理不规范等,抛出问题,而后推进解决问题)

③、打铁也要自身硬!所以不断学习提升本身的技术能力,不断总结沟通,才能更好和同事交流,从解决问题的角度出发,去解决问题,创造价值!

 

5、回归问题自己

上面说的有点跑题了,回到问题自己,说说我对这个性能需求的一些优化建议吧,仅供参考:

一、数据库优化

问题点:从上面描述的状况来看,天天产生的数据大概有10W+条,且只有一张表存储;

解决方案:分库分表,表能够拆分为问卷主表、问卷对应的问题表、问题对应的答案明细表等,长期来讲数据量不小,能够考虑分库,主从分离等,查询添加索引等方法。

二、处理逻辑优化

问题点:一次性查询的数据过多,致使前端展现较慢;

解决方案:查询结果分批次展现(好比有100W条数据,分为100个批次,每一个批次10000条数据)。

三、存储优化

问题点:没有缓存,直接从DB单表读取,容易形成超时和表锁;

解决方案:将数据放入缓存服务器(好比Redis),设定查询次数或者有效时间,多级缓存,提升缓存命中,防止缓存穿透和同时失效带来的瞬间DB压力。

四、业务优化

问题点:多人短期内查询大量数据,对服务形成巨大压力;

解决方案:和产品业务沟通,让查询操做时间在业务平缓期,拉长查询操做的时间线等。

五、服务优化

问题点:单台服务器;

解决方案:作服务集群和负载均衡,增长监控,设定阈值,超过阈值则临时增长新的服务器,分流。

 

原本问题自己只是想说需求分析的,不知不觉扯了不少相关的内容,固然其中有些内容也值得拆开详细讨论,性能测试,水太深啊。。。

仅供参考,但愿看到的童鞋能从中获取一些性能测试相关的思路,若是有其余建议但愿你们提出来,不胜感激。。。