平淡的生活,我依旧能梳理出生活的乐章!

不得不关注的:异常测试

上一篇 / 下一篇  2019-04-03 17:50:09

 

        不得不关注的:异常测试

测试过程中,有些异常场景,需特别关注,下面是我整理的一些容易碰到有很容易引起重大问题的异常点,需从代码设计阶段需考虑进去的问题。

1.幂等性测试

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

1.1常见幂等性场景

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

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

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

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

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

4) 根据具体业务分析。如我所测试系统中:1)保证金追加2)同一张票业务唯一性3)发送外围系统的一些重要通知等

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

1)用户重复提交

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

2)网络或消息重发

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

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

3)业务间的重试

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

测试方法:1)设计评审期间多关注2)模拟网络连接超时等触发重发机制。

2.缓存机制测试

为提升效率,很多系统应用了缓存机制,尤其一些电商网站或时效性要求高的系统,那么1)如何保持与DB同步性(即数据的实时性)2)缓存设置的失效性 3)缓存异常时处理机制 4)缓存数据的存储结构等就是测试时需关注的重点。

1)DB同步性(测试重点)

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

测试方法:1了解缓存内容,对数据进行操作;操作后缓存相应展示页面查看(一般前台页面查询时会体现。

2如数据库结构发生变化,需测试缓存中数据的存储

2)缓存失效性

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

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

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

缓存溢出或丢失时,系统的业务是否能正常处理。一般的处理逻辑:1)重试机制2)数据获取切换的DB。总之,不能因缓存异常,影响业务。

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

3.事物测试

事物测试的目的:

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

测试方法:

1)测试时模拟事务正常返回失败时的系统处理机制;

2)测试时,对数据库:做手脚,如事物中要进行数据库更新,则可对该数据进行行锁、或删除数据、或试数据状态无效,导致事务某一操作失败,进行了事物回滚。

3)大事物测试:如一个大事物中,包含了多个事物,需考虑事物之前逻辑顺序,以及模拟各个事物失败时,整个大事物的处理逻辑。

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.甲售票点卖出一张机票,修改余额AA-1.所以A15,A写回数据库.

  4.乙售票点也卖出一张机票,修改余额AA-1.所以A15,A写回数据库.

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

4.并发测试

什么是并发

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

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

测试预防:

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

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

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

5.其它

5.1金额相关

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

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

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

2)金额中浮点问题:

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

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

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

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

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

测试方法:1)通过并发测试,检测其唯一性。

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

先写到这里吧。


TAG:

jinsolo823的个人空间 引用 删除 jinsolo823   /   2019-04-08 15:07:24
平时测试都能考虑,就是不知道具体名字,没有系统的学习
 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

Open Toolbar