• 0
  • 0
分享

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

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

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

  一、产品需求

  1、业务场景:

  一个问卷调查的功能,然后产品和业务会不定时通过前端界面去根据筛选条件查询相关问卷问题的答案明细,但是觉得很慢,让测试这边给出一个指标。

  2、系统架构:

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

  3、数据量:

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

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

  二、具体问题具体分析

  1、场景建模

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

  2、确定指标

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

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

  三、测试进行中

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

  1、环境确认

  首先需要确认测试的执行环境,是生产、UAT还是独立的测试环境。测试环境对测试结果的影响是很大的,大体如下:

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

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

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

  2、团队合作

  性能测试不是一个人就可以搞定的,一般都需要运维、DBA、开发、测试配合来进行,因此做好沟通和协作很重要。

  3、测试要做什么

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

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

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

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

  ④、测试人员本身,需要准备测试数据,开发测试脚本,进行脚本调试,执行和监控分析等工作。

  四、体现测试的价值

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

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

  1、做好沟通协调

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

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

  2、本职工作要做好

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

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

  ③、测试数据的准备;

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

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

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

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

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

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

  五、回归问题本身

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

  1、数据库优化

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

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

  2、处理逻辑优化

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

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

  3、存储优化

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

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

  4、业务优化

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

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

  5、服务优化

  问题点:单台服务器;

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

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


作者:老_张    

来源:http://www.51testing.com/html/65/n-4477565.html

  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          • 1、按严重程度分类:是指bug对软件质量的破坏程度,即此bug的存在将对软件的功能和性能产生什么样的影响。崩溃(Blocker):系统无法正常运行。阻碍开发或测试工作的问题;造成系统崩溃、死机、死循环、导致数据库数据丢失,与数据库连接错误,主要功能丧失,基本模块缺失等问题。如:代码错误、死循环、数据库发生死锁、重要的一级菜单功能不能使用等(该问题在测试中较少出现,一旦出现应立即中止当前版本测试)。严重(Critical):很明显的错误性的bug。系统主要功能部分丧失、数据库保存调用错误、用户数据丢失,一级功能菜单不能使用但是不影响其他功能的测试。功能设计与需求严重不符模块无法启动或调用,程序重...
            14 13 3717
            分享
          • 接口测试是测试系统组件间接口的一种测试。接口测试主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点。测试的重点是要检查数据的交换,传递和控制管理过程,以及系统间的相互逻辑依赖关系等。测试的策略:接口测试也是属于功能测试,所以跟我们以往的功能测试流程并没有太大区别,测试流程依旧是:评审测试接口文档(需求文档);根据接口文档编写测试用例(用例编写完全可以按照以往规则来编写,例如等价类划分,边界值等设计方法);执行测试,查看不同的参数请求,接口的返回的数据是否达到预期。那么设计测试用例时我们主要考虑如下几个方面:功能测试:接口的功能是否正确实现了;接口是否按照设计文档中来实现(比如user...
            12 12 2962
            分享
          • 其实,在版本测试过程中,bug被拒的情况是很常见的。当得知自己的bug被拒之后,应该怎么操作呢  与开发争吵显然不是办法,我们的最终目的是不要遗漏bug,所以具体情况需要具体分析。【第一种,手滑误点拒绝】不要犹豫不要纠结,不用沟通,直接重新打开,不用虚,咱这是实打实的bug【第二种,对需求理解不一致】讲证据,把需求原型截图奉上,找证人,与产品再次沟通,最好是三方沟通,很有可能是产品说这个地方不做了但是没有通知测试,或者此处有改动但是只有一方知道,再或者开发在实现时觉得不好达到产品说的效果,给了另外一个替代方案,产品也表示可以接受了,那这个时候,我们也就不用纠结了,直接关闭bug就好,...
            6 5 7458
            分享
          • SoapUI 压力测试SoapUI  想要进行 压力测试,就要使用其中的 LoadTest 功能。创建 LoadTestLoadTest 能实现 压力测试 的效果,我们可以先创建 Test Suit,也就是测试套件,然后在 Test Suit 中去创建 LoadTest。下图就是创建好的 LoadTest压力测试结果运行之后我们可以查看到详细的运行参数以及曲线图更高效的压力测试我准备两个接口,每个接口我想运行 100 次,但是我不想这两个接口混在一起 测试,所以我可以用到 Apifox 的 测试套件(Test Suit)准备接口我们先准备两个接口,待会测试要用到/api/v...
            0 0 1553
            分享
          • 随着技术和数字化的快速发展,企业努力确保其应用程序在所有浏览器和平台上流畅运行。在今天的情况下,企业依靠互联网存在来提高他们的投资回报率并扩大他们的在线影响力。这就是为什么大多数 Web 应用程序都设计为与多个浏览器兼容的原因。这对于任何响应式 Web 应用程序都非常重要,因为必须确保应用程序在任何给定时间与每个浏览器和浏览器版本兼容。尽管如此,跨浏览器测试还是被忽视了,因为开发人员在将跨浏览器测试纳入QA工作流程时面临许多挑战。随着时间的推移,客户的注意力持续时间越来越短,如果网站加载看起来有问题,他们会毫不犹豫地按下浏览器上的后退按钮。那么,有什么解决办法让Web应用程序和网站在每个浏览器...
            0 0 967
            分享
      • 51testing软件测试圈微信