如何开展性能测试?

来源:https://www.cnblogs.com

之前有在自己建的测试群直播分享了一些性能测试的基础内容,当时有人说希望有个实战的分享,想了想某些东西属于公司机密不方便直接直播分享,

这里就拿最近我做的一个性能测试实例来举例子说说,理解为主。

先看看一个完美的性能测试流程是怎样的,如下图:

当然,实际工作中能实现这种完美的流程很难,下面挑重点的介绍。

一、获取测试需求

大概上周三接到这样一个性能测试需求,大概的业务逻辑如下图:

简单概括下业务逻辑,就是:发起一个拼团,其他人点击活动进去,领券,然后领券时要验证拼团的有效性,在买单用券时,先验证是否是会员,如果不是,先注册会员,再将券和会员绑定!

具体的性能指标是:验证上图4个场景中的接口,在响应时间为3S和5S时,服务器的TPS值(这属于系统性能能力验证的应用领域)。

测试的系统,是公司的微信会员系统,系统架构相对熟悉,这里不过多介绍。

二、测试计划和方案

所谓的测试计划,无非就是某人用多久时间用什么资源什么方法完成什么事情。

由于这次性能测试需求工作量不大,且时间足够,所以就我一个人完成测试的大部分工作,当然,一部分需要开发协助。

测试方案,就是测试计划的补充和扩展。

比如这次性能测试,我预计用一周时间完成这些测试工作,设计用例、场景建模、准备测试数据、测试脚本开发、环境搭建等各需要多久时间,在哪一天甚至是上午还是下午完成这些工作。

三、执行前的准备工作

环境搭建:测试环境由于之前会员系统也进行过性能测试,测试环境搭建这一步工作量不大,开发很快就配置完成,所以这里不赘述。

场景建模:个人理解,就是考虑哪些场景下可能存在性能瓶颈,相应的设置对应的测试脚本和测试逻辑,以尽可能模拟生产环境(由于对业务蛮熟悉,这里也不赘述,需要提及的一点是:

一定要理解、熟悉系统业务,因为需求的产生,就是用户+场景)。

测试数据准备:测试数据准备常用的有这两种方式:将生产数据复制一份过来、开发脚本预埋造数据(但无论哪种,一定要注意数据隔离,防止数据污染)。

测试脚本开发:首先,需要从开发那里获取开发接口文档数据库表设计文档

       然后,通过工具或者写测试脚本调试接口,先保证接口可以成功调用(我用的工具是jmeter+MySQL)。

四、执行测试脚本

在保证接口可以成功调用之后,先进行单接口基准测试,即:对一个接口进行压力测试,不断加压,直到响应时间达到或超过指标,观察当前其并发数和TPS。

个人经验是同样的并发数,多执行几次,得到一个平均值或稳定值(即TPS和TRT曲线相对稳定的值),并记录下来。

如下图:

记录的目的,可以通过直观的数据变化,得到单个接口的最大TPS和不同并发情况下的响应时间变化。

PS:记得前几天从一本书上看到这样一句话:80%的性能瓶颈可以通过分析TPS和TRT的数值变化得到(虽然有点片面,但也不失为一种方法)。

比如按照上图记录的数值变化来看,很明显领券接口性能极差,这时候就可以告知开发,通过查看log、检查代码、SQL语句等方法来查询原因(当然个人能力足够的话,这些可以自己来做)。

五、监控调试

jmeter这个性能测试工具本身就用监听器这个元件提供了一定的监听数值报告元件,但毕竟开源工具,其本身的组件功能不够强大,可以通过下载支持jmeter的增强型功能插件来进行监控。

jmeter插件下载地址:https://jmeter-plugins.org/

下载后可以解压缩,将plugins-manager.jar放入jmeter安装目录lib/exe,然后重启jmeter即可。

可以通过点击下图圈出来的按钮检验是否成功安装:

无论是对服务器资源使用率还是测试数据报表生成,甚至TPS、TRT等的监听,该插件都提供了组件支持,具体的使用方法请自行寻找。。。

所谓的监控调试,就是一个不断调整重复的过程,这个需要根据性能测试的目的,应用领域去判断具体如何执行。。。

六、最终报告

根据上面的几个步骤,得到测试结果,分析系统存在的瓶颈,然后采用各种方法提出解决方案或优化建议,最后对本次性能测试进行一个完整的总结,这样,一次性能测试就完成了。

在整个过程中,费时较长一般是在测试数据准备和测试执行、监控调优阶段。

最后吐槽一句:性能测试水太深,想潜水的做好准备,别稀里糊涂扎进来,太刺激。。

欢迎参加众测:

https://wap.ztestin.com/site/register?usercode=FAAAQwMQGAAXAwQBA3QhExcDHAQDPjVaABMIQg%3D%3D

本文分享自微信公众号 - 软件测试培训(iTestTrain)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-10-19

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏深度学习自然语言处理

【ACL2019】最佳长论文阅读笔记,降低机器翻译中的exposure bias

文章知乎链接 https://zhuanlan.zhihu.com/p/92654122

8710
来自专栏FunTester

Java 8,Jenkins,Jacoco和Sonar进行持续集成

本文的范围是解释安装和设置必要工具的所有步骤,以使Java 8的CI服务器完全正常运行。请注意,该证明已在Windows 7的开发人员机器上完成,但很容易做到。...

9710
来自专栏大数据成神之路

消息可靠性、重复消息、消息积压、利用消息实现分布式事务

可以利用消息队列的有序性来验证是否有消息丢失。在Producer端给每个发出的消息附加一个连续递增的序号,然后在Consumer端来检查这个序号的连续性。如果没...

11620
来自专栏云服务器教程

Linux云服务器怎么在Nginx/Tomcat/Apache服务中绑定域名

配置Tomcat服务绑定域名的步骤,其中部分与Tomcat相关的路径,您需要根据实际情况进行调整。

18070
来自专栏Java架构沉思录

由一次线上故障来理解下TCP三握、四挥; Java堆栈分析到源码的探秘

该服务主要是提供对外的代理接口,大部分接口都会调用第三方接口,获取数据后做聚合处理后,提供给客户端使用。

10910
来自专栏AiSmart4J

为什么使用消息队列?

其实就是问问你消息队列都有哪些使用场景,然后你项目里具体是什么场景,说说你在这个场景里用消息队列是什么?

8620
来自专栏Java3y

为什么要用消息队列?

消息队列在互联网技术存储方面使用如此广泛,几乎所有的后端技术面试官都要在消息队列的使用和原理方面对小伙伴们进行360°的刁难。

9710
来自专栏大白技术控的技术自留地

知乎高赞:中国有什么拿得出手的开源软件产品?(整理自本人原创回答)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

8520
来自专栏码匠的流水账

聊聊rocketmq的pullThresholdForQueue

rocketmq-client-4.5.2-sources.jar!/org/apache/rocketmq/client/consumer/DefaultMQ...

6500
来自专栏Java识堂

Java世界最常用的工具类库

Java世界有很多实用的工具类框架,今天介绍3个使用频率最高的框架。有很多实用的工具类并没有全部列出来,只列出了最基础的一部分,感兴趣的小伙伴,可以看官方的ap...

7320

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励