前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >不得不关注的【异常测试】

不得不关注的【异常测试】

作者头像
软件测试君
发布2021-07-09 11:39:30
6400
发布2021-07-09 11:39:30
举报
文章被收录于专栏:测试人生测试人生
测试过程中,有些异常场景,需特别关注,下面是我整理的一些容易碰到有很容易引起重大问题的异常点,需从代码设计阶段需考虑进去的问题。
一、幂等性测试

幂等性在软件中是指调用接口或服务时,多次相同的输入会有相同的结果反馈和等同一次的处理结果。

1、常见幂等性场景

但不是所有业务都需要保证幂等性,常用的那些场景需要保证幂等性呢?

2、幂等性导致问题的常见原因

1) 电商网站涉及订单提交;

2) 涉及金额方面:如:付款、转账、额度扣减;

3) 一些消息类发送等:如短信、邮件等;

4) 根据具体业务分析。如我所测试系统中:

  • 保证金追加
  • 同一张票业务唯一性
  • 发送外围系统的一些重要通知等;

日常测试过程中,我们需要根据具体的业务场景,在设计评审和案例设计过程中需确定哪些场景要保证幂等性,这样测试过程中才能快速发现问题。

3、常见场景
3.1、用户重复提交

测试方法:

前端、后端进行重复提交(目前很多系统已经做了小白级别的控制,即前端重复提交,但实际情况中,重点场景一定要做到前、后端均进行控制

3.2、网络或消息重发

目前很多提交都是异步提交,如短信发送,一般点击发送过去就会提示发送成功。但实际是否发生成功,后续会有系列处理机制,根据消息的一些本身机制,后续处理过程中会进行重发机制。(MQ中可设置重复发送机制)。

测试方法:

可在终端最后一步,或中间环节人为触发多次发生。如:在消息队列中重发,多次补收同一内容的报文等。

3.3、业务间的重试

有些业务特意设置在链接超时或者失败时需重试,这时候就需要验证幂等性处理。

测试方法:

  • 设计评审期间多关注
  • 模拟网络连接超时等触发重发机制。
二、缓存机制测试

为提升效率,很多系统应用了缓存机制,尤其一些电商网站或时效性要求高的系统,需要关注:

  • 如何保持与DB同步性(即数据的实时性)
  • 缓存设置的失效性
  • 缓存异常时处理机制
  • 缓存数据的存储结构等就是测试时需关注的重点。
2.1、DB同步性(测试重点)

如对商品重要属性进行了:新增、编辑(价格、库存等重要信息)、删除时,如应用了缓存机制,那测试过程中就需要关注:DB的修改要同步缓存中。

数据库的字段进行更新,缓存中的存储结构未进行更新。

测试方法:

  • 了解缓存内容,对数据进行操作;操作后缓存相应展示页面查看(一般前台页面查询时会体现。
  • 如数据库结构发生变化,需测试缓存中数据的存储
2.2、缓存失效性

有些关键数据放缓存中是有失效性的,需根据具体业务去了解相关失效性,还是永远存储。

测试方法:

根据业务关键性数据的设置缓存的时间来测试业务的失效性。

2.3、缓存异常时系统处理(异常测试重点)

缓存溢出或丢失时,系统的业务是否能正常处理。

一般的处理逻辑:

  • 重试机制
  • 数据获取切换的DB。总之,不能因缓存异常,影响业务。

总之:

缓存类测试,需设计阶段时就需要考虑:逻辑性、容错性、一致性等问题,测试人员也需了解相关方面的知识及机制。

三、事物测试

事物测试的目的:

3.1、确保事物原子性:

即在一个事物在某个节点发生故障,所有数据库状态的更新或一些操作(如给外围发了通知)能正确回滚到事物开始之前。(测试重点,日常类似问题会很多)

测试方法:

  • 测试时模拟事务正常返回失败时的系统处理机制;
  • 测试时,对数据库:做手脚,如事物中要进行数据库更新,则可对该数据进行行锁、或删除数据、或试数据状态无效,导致事务某一操作失败,进行了事物回滚。
  • 大事物测试:如一个大事物中,包含了多个事物,需考虑事物之前逻辑顺序,以及模拟各个事物失败时,整个大事物的处理逻辑。
3.2、确保事物隔离性:

多个事物并发处理数据时,能互不干扰,保证数据的正确性。

测试方法:并发测试,大的方面主要包括:

  • 同时新增(主要看唯一性验证);
  • 对同一数据同时修改保存;对同一数据一方删除,一方修改;对同一数据两方同时删除;

具体举例如下(可忽略举例,比较啰嗦)

购买某一商品的活动序列:

  1. 客户在前端选择了商品,此时该商品的价格、数量等都已经确定,系统也对其做了相应的计算,单未提交;
  2. 系统管理员在管理端对该商品进行操作,如:删除、修改数量、修改金额、商品下架等
  3. 此时回到步骤1的页面,点击【提交】看系统如何处理?

电子商务网站中用户积分使用的一个活动序列:

  1. 某一客户在机器A上读取自己账户的积分为100元;
  2. 在机器B上读取自己账户的积分同样为100元;
  3. 在A机器上使用该客户80元积分;
  4. 在B机器上使用该客户70元积分;
  5. 此时在A.B两个机器上的操作员对使用积分的购物同时点击【提交】

正确的结果是:应该只有一方成功,另一方给出合理提示信息;

但处理不当就会导致:两个都成功,用户积分为负值

飞机订票系统中的一个活动序列:

  1. 甲售票点(甲事务)读出某航班的机票余额A,设A=16.
  2. 乙售票点(乙事务)读出同一航班的机票余额A,也为16.
  3. 甲售票点卖出一张机票,修改余额A←A-1.所以A为15,把A写回数据库.
  4. 乙售票点也卖出一张机票,修改余额A←A-1.所以A为15,把A写回数据库.

结果明明卖出两张机票,数据库中机票余额只减少1。

四、并发测试

什么是并发

多线程对同一段代码同时执行,叫并发;但单个cpu的硬件环境是不坑内个有多个线程,一般多个cpu才能实现多并发。

目前实现并发控制的方式:数据库行级锁:悲观锁、乐观锁;全局分布式锁;使用代码级别的同步(synchronized)和锁机制(Locks、atomic).代码级别的锁对于多机或分布式部署,不生效。

测试预防:

1)业务场景分析:那些功能会出现并发。

2)静态代码分析的一些工具可以检测出来。

3)设计评审阶段关注类似问题,从设计阶段规避。

五、其它
5.1、金额相关

金融行业,金额测试由为关键。

1) 金额极值测试,尤其和外围第三方交互过程中,对于大额度传输的测试。(传输类型不一致,会导致大金额成科学技术,会让千万以上数据按各位处理)

测试方法:

常规边界值,了解一些不同数据类型的处理格式。

2)金额中浮点问题:

1)是否进行了合理的四舍五入;

2)同一批次下,单条数据进行了四舍五入后,总合计是否正确,多一分或少一分

3)不同数据库下进度处理的测试(支持多数据库时,如有些数据库存储时会自动四舍五入,有些会做直接截取)

5.2、流水号、业务编号(如订单号)等唯一性及最大值测试。

很多系统的一些关键字段值,都是按照一定的规则自动生成的。如时间戳+随机数;日期+数据库sequence numbe序列号或者时间戳+数据库自增长ID等,那测试过程中就要确保其唯一性,以及最大值时的处理机制。

测试方法:

  • 通过并发测试,检测其唯一性。
  • 通过修改一些序列号或自增长ID到最大值后,检查系统处理机制。如用sequence序列号数据库修改到最大,检查是否能合理生产唯一编号)

先写到这里吧。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-05-31,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 软件测试君 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、幂等性测试
  • 1、常见幂等性场景
  • 2、幂等性导致问题的常见原因
  • 3、常见场景
  • 3.1、用户重复提交
  • 3.2、网络或消息重发
  • 3.3、业务间的重试
  • 二、缓存机制测试
  • 2.1、DB同步性(测试重点)
  • 2.2、缓存失效性
  • 2.3、缓存异常时系统处理(异常测试重点)
  • 三、事物测试
  • 3.1、确保事物原子性:
  • 3.2、确保事物隔离性:
  • 四、并发测试
  • 五、其它
  • 5.1、金额相关
  • 5.2、流水号、业务编号(如订单号)等唯一性及最大值测试。
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档