您可以捐助,支持我们的公益事业。

1元 10元 50元





认证码:  验证码,看不清楚?请点击刷新验证码 必填



  求知 文章 文库 Lib 视频 iPerson 课程 认证 咨询 工具 讲座 Model Center   Code  
会员   
   
 
     
   
 订阅
  捐助
性能测试案例详解
 
作者:粥一样温柔
  5180  次浏览      20
 2021-6-2 
 
编辑推荐:
本文是一个完整的案例,介绍了从一开始的需求分析、到启动性能测试、业务分析、场景设计、性能目标、搭建的环境以及正常测试过程。
本文来自于简书,由火龙果软件Anna编辑、推荐。

需求分析

启动一个性能测试,首先要三方确定性能测试需求:

首先项目经理根据以往的系统运行情况给出了一些需求点;

测试要充分了解需求,比如要了解这次测试有哪些业务,尤其是优先级比较高的。

开发人员根据自己的经验给出一些建议,比如这次活动主要压力点,是在用户购买商品的下单流程上;

还需要弄清楚,预期通过的指标是什么,比如,活动期间,请求的平均响应时间不超过500ms;请求错误率不超过0.01%;预期用户有多少?最大并发用户数是多少?那些业务访问比较频繁等等;

业务

设计单场景和组合场景(有前后关系的场景)

业务访问压力较大的页面“首页”“商品详情页”“我的订单”“登录”页面和比较复杂的页面“订单流程”,容易在大压力下出现性能问题,因此这类场景需要优先覆盖;

一个性能测试场景要包括哪些部分;

性能目标:

并发用户数预期指标:

首先要明确本次性能测试,系统要支撑多少并发用户数,也就是系统要支撑多少用户进行订单流程,根据三方确认,项目经理明确表示,要支持100个用户同时进行下单,根据这个需求,我们需要逐步增加并发用户数进行测试,直到并发用户数增加到100,在这个情况下,系统性能表现和资源使用在接受范围,在这个预期指标下,我们会进行一定比例的放大,如1.5倍或两倍,实际上我们要验证比预计要高一些的情况;

响应时间预期指标:

对响应时间的指标,一般会根据产品对响应及时性的要求或者经验进行制定,为了保证用户操作的响应及时性,我们对服务端接口的响应时间要求比较高,根据三方确认,订单流程中每个请求的平均响应时间<500ms,这里强调一下,根据前面的章节介绍,响应时间是随着并发用户数的增加而增加的,所以这里可以理解为,系统在100个并发用户数同时下单的情况下,所有接口的平均响应时间应该在500ms以内。

除了保障系统性能以外,也需要保障系统的稳定可靠性。所以对系统出错情况也需要进行验证:

正常情况下,系统是不允许出错的。但在促销期间,可能因为访问量过大导致系统处理出错,这个出错率三方确认一般是小于0.01%,那超过0.01%则需要进行性能优化;

测试需求就订好了

测试准备

1.首先需要搭建一套比较接近生产环境的性能测试环境,这个环境需要独立部署,不能和功能测试环境和开发环境共用,这样性能测试结果才会比较准确;

2.选择性能测试工具,进行测试工具的安装和调试;

3.编写性能测试脚本,实现性能测试场景的逻辑;

4.准备性能测试数据,使业务能正常运行;

准备测试环境

主要包括两部分:

>用于运行被测服务的服务器集群,该集群尽可能和生产环境保持一致,越接近生产环境,我们的性能测试结果数据才会越准确。

这里我们的实例服务器集群大致是这样的,最前端是负载均衡,目前用的比较多的是Lvs,lvs将用户请求按一定的策略转发到上游服务器Webserver,我们用的是比较常用的nginx服务,它做的是反向代理,将请求代理到上游severlet容器服务,我们部署的是常用的tomcat容器,tomcat处理请求,获取数据,然后把数据返回给用户;

>性能测试另一个重要部分就是“负载机”;在负载机上安装性能测试工具,运行性能测试脚本,模拟用户行为,向服务端集群提交请求;

负载机用来挡压力,最重要的一点是本身不能成为瓶颈,如果负载机的压力比较大,则需要增加负载机的数量来达到挡压力的目的;

>负载机准备好之后,首先我们要保证网络的连通性,我们可以在负载机上打开浏览器,访问我们要测试的url,如果能打开访问地址,说明环境准备妥当,如果访问不了,则可能是网络不通,也可能是服务存在问题,需要调试分析;

实际的性能测试活动中,针对服务端性能测试的时候,要将负载机和服务器集群部署在同一个网络下,避免因为网络带宽等因素导致的性能测试数据不真实;

测试工具

接下来准备性能测试工具:

测试数据的准备

SKU=Stock Keeping Unit(库存量单位)。

一般情况下,这类基础数据可以通过SQL直接写入数据库;

用户账号怎么准备呢?

方法一是通过SQL直接写入数据库,像我们商品数据的插入数据一样,如果通过sql直接写入数据库的话,我们需要数据库表,以及它包括哪些字段,这些字段如何预设,我们来看看;

示例中,青果商城的数据库表为i“yx_sc_d_fguser”字段如下:

了解了表和字段,我们可以通过insert语句插入数据;

为了提高效率可以用脚本自动化进行插入;

方法二录制脚本进行账号注册;

我们可以用Jmeter把这个过程录制下来,形成性能测试脚本,然后运行这个脚本来进行注册;

若涉及到验证码验证的过程,一般会修改代码,注释到验证码验证的过程,

测试账户准备完成之后,我们还要为每个用户添加收货地址,添加地址可以用录制脚本的方法实现;

测试脚本:

先录制好原始脚本,然后进行编辑,比如设置事务控制器,设置思考时间等;

首先设置事务控制器:

我们需要将简单控制器,变为事务控制器;

所谓事务,代表的是一组完整的操作,我们把用户在浏览器上的一次操作成为事务,从用户点击操作开始,到页面上呈现出结果结束;

单登录页面,我们使用“仅一次控制器”;因为订单操作中是不包括登录操作的,这里记录登录是为了记录登录状态,后续的操作都是在登录状态下进行操作的;这里需要将登录移到操作动作的第一步;

然后设置思考时间

添加断言:

先设置全局断言;

然后对每个请求,进行单独的断言,验证每个请求返回的body是否符合预期;

首先我们应该弄明白每个请求应该返回的断言,我们可以利用开发者工具来查看;

如上图:checkLogin页面,返回的内容中有code:200;

我们就在checkLogin请求下添加断言:

也就是说断言要添加两类,全局断言,http请求要返回200,单页请求下的断言需要符合预期;

接下来我们添加几个比较常见的监听器:聚合报告,查看结果树(可以帮助我们调试和分析请求)

由于使用了事务控制器,我们推荐一个Jmeter比较好用的插件,解压到Jmeter的安装目录下,然后重启Jmeter

添加Transaction perSecond可以查看每秒完成的事务数,可以看到他的趋势变化图

添加Response Times Over Time,方便查看每个响应的变化情况

监视器添加好了,点击保存;

接下来是参数化测试数据:关于参数化,我们提供了三种方法

三种参数化方法

①CSV Data Set Config

我们以登录信息(PhoneNumber,password)作为参数,用CSV Data Set Config的方法进行参数化。

首先添加CSV Data Set Config元件,如图:

找到我们的要参数化的文件

在CSV Data Set Config元件中输入参数化文件的路径,参数化名字等信息

下游传参改成参数化的名字,这样就能将参数化文档中的参数,动态参数化啦

csv Data set config

②函数助手的添加

生成随机函数

利用函数助手生成随机函数,带入下游的请求。如下图:

将随机参数传给后面的请求

③如果前面的请求传参较多,并且是json格式的字符串,那我们可以考虑使用java的json库来解析。比如,收货地址(收获人,收获地址等),是从前面的请求传递来的。

需要解析的json字符串

添加后置处理器 BeanShell PostProcessor

写入一段java代码:解析出对应的参数

在下游的请求中参数话对应字段,并且变量名需要跟后置处理器一致:

要注意的是,我们在后置处理器中包含了json库,所以在jmeter中我们需要加入这个json依赖包。

将依赖包放到lib/ext下。

 

到这里,我们的脚本就准备的差不多了。

由于涉及登录,为了保存我们的登录信息,记得添加cookie 管理器。这样,后续的请求才会在登录的状态下进行。

好了,到了这里,我们的测试脚本就准备完成了。

 

 
   
5180 次浏览       20
相关文章

微服务测试之单元测试
一篇图文带你了解白盒测试用例设计方法
全面的质量保障体系之回归测试策略
人工智能自动化测试探索
相关文档

自动化接口测试实践之路
jenkins持续集成测试
性能测试诊断分析与优化
性能测试实例
相关课程

持续集成测试最佳实践
自动化测试体系建设与最佳实践
测试架构的构建与应用实践
DevOps时代的测试技术与最佳实践
最新课程计划
信息架构建模(基于UML+EA)3-21[北京]
软件架构设计师 3-21[北京]
图数据库与知识图谱 3-25[北京]
业务架构设计 4-11[北京]
SysML和EA系统设计与建模 4-22[北京]
DoDAF规范、模型与实例 5-23[北京]
 
最新文章
大数据平台测试
微服务架构下的测试之道
从零开始掌握微服务软件测试
如何进行测试需求分析:从接收需求到用例设计
python_selenium自动化测试框架
最新课程
测试需求分析与测试用例设计
性能测试方法与技术
自动化测试框架设计高级实践
接口自动化测试方法与工具
软件测试方法与实践(贯穿案例)
更多...   
成功案例
某支付企业 单元测试与重构培训
北京 用户体验、可用性测试与评估
某军工研究单位 自动化测试方法、案例与工具
知名消费金融公司 探索性测试与测试分析
北京 航天科工某子公司 软件测试架构师
更多...