异常场景测试
什么是异常测试?
异常测试是有别于功能测试和性能测试的⼜⼀种测试类型,通过异常测试,可以发现由于系统异常、依赖服务异常、应⽤本⾝异常等原因引起的系统问题,可以帮助我们改善以后的测试设计⽅案,提⾼系统的稳定性。
为什么要做异常测试?
常规的功能测试过程中,主要关注的是业务的正常逻辑是否能够⾛通,以及在正常逻辑多并发运⾏过程中是否有潜在的性能问题,往往忽视了各种异常情况对服务造成的影响。随着产品规模的扩⼤以及业务的不断迭代,我们⽆法预料每个应⽤可能出现的异常情况。所以在测试过程中不但要关注正向测试也需要关注异常场景的测试。
如何展开异常测试?
从异常测试的定义来看,想要开展异常测试,⾸先需要知道怎么去设计异常测试⽤例,应该使⽤哪些测试⽅法来模拟异常场景?接下来我将以电商业务为例从接⼝异常和业务操作异常两个维度进⾏具体的介绍。
⼀、接⼝异常测试
接⼝异常测试可能会与业务操作异常有部分重叠,但个⼈觉得接⼝异常测试放在接⼝测试阶段⽐较合适,并且接⼝异常测试可以为后续业务操作异常测试做铺垫。
整体流程:了解产品需求,分析需求特点-》了解接⼝实现逻辑-》设计接⼝⽤例-》确定测试⽅法
关注重点:依赖服务调⽤异常和输⼊异常时,业务代码能否容错及容错逻辑是否合理。
测试内容:主要包括输⼊异常、操作异常、服务异常等。
接⼝类型:http接⼝、scf接⼝
1、http接⼝测试
电商商品上架平台为后台系统,存在很多新增、删除、修改模板等操作,业务逻辑会要求在新增修改等操作时不允许为空或重复等校验,⼀般像这类操作前端和后端都会做校验,单纯从页⾯只能测试前端校验逻辑是否正确,⽆法测试后端校验是否正确,通过http接⼝测试就可以覆盖到后端的校验逻辑。所以基于业务逻辑在进⾏接⼝测试时会重点关注以下异常情况,其中主要包括:
前端测试和后端测试的区别重复和⾮空校验:名称重复、必填项字段为空等
异常参数:参数不完整、参数重复等
异常查询:缺少分页信息、缺少品类id\型号id等
数值校验:设置参数为⾮数值类型、包含特殊字符等
测试⼯具主要使⽤Yapi平台:在设计接⼝case时通过异常参数的传参,可以清楚的验证异常场景下接⼝的返回值。
2、scf接⼝测试
在测试订单流程时,会重点关注订单状态的流转。以竞拍接⼝为例,为避免出现超卖,会针对接⼝进⾏并发测试,来校验后端在参拍时是否对回收单状态进⾏了校验。
测试⽅式:使⽤注解的⽅式对TestNg线程池和执⾏次数进⾏配置
invocationCount:表⽰执⾏的次数
threadPoolSize:表⽰线程池内线程的个数
⼆、业务操作异常测试
业务操作异常测试⼀般是放在功能测试的后期,因为业务异常⽤例的设计需要对项⽬有⼀定的理解,是业务强相关的。整体流程主要分为以下四步:
结合业务需求,确定业务重点-》了解开发实现逻辑-》设计异常场景⽤例-》确定测试⽅法
1、基于业务的异常场景测试
以电商上传商品业务为例,商品添加为后台操作系统,商品上传存在新增、编辑、删除等功能,映射逻辑的上传都是通过导⼊excel的⽅式。所以在测试期间会重点关注页⾯异常操作和excel上传异常。
(1)页⾯异常操作
思路:由于在接⼝测试阶段已经将对应模块的接⼝异常case覆盖到,所以在功能测试阶段只需要重点关注页⾯层⾯的异常操作。
异常测试点:提交时快速多次点击、频繁添加/删除
测试⽅法:主要通过页⾯频繁操作对系统并发情况进⾏验证
(2)excel上传
思路:了解对应上传功能校验逻辑,针对校验逻辑设计异常case
异常测试点:上传内容包含特殊字符、⽂件格式不正确、⾮空校验、最⼤条数限制、表头顺序是否⼀致、业务内部逻辑
测试⽅法:主要通过修改上传的excel⽂件中的内容,来模拟异常数据的上传
2、通⽤性异常场景测试
(1)幂等校验
消息重发:⽬前很多提交都是异步提交,如短信发送,⼀般点击发送就会提⽰发送成功。但实际是否发送成功,后续会有系列处理机制,根据消息的⼀些本⾝机制,后续处理过程中会进⾏重发机制。
测试⽅法:可在终端最后⼀步,或中间环节⼈为触发多次发送。如:在消息队列中重发,多次补收同⼀内容的报⽂等。
业务间的重试:有些业务特意设置在连接超时或者失败时需重试,这时候就需要验证幂等性处理。
测试⽅法:可以通过模拟⽹络连接超时或服务超时等触发重发机制。
(2)缓存测试
为提升效率,很多系统应⽤了缓存机制,那么对于缓存测试以下三点在测试过程中需重点关注。
DB同步性:如对商品重要属性进⾏了新增、编辑(价格、库存等重要信息)、删除时,如果应⽤了缓存机制,那测试过程中就需要关注DB的修改是否同步到缓存中、数据库的字段进⾏更新缓存中的存储结构是否进⾏更新等。
测试⽅法:
①了解缓存内容,对数据进⾏操作,操作后缓存相应展⽰页⾯查看
②如数据库结构发⽣变化,需测试缓存中数据的存储
缓存失效性:有些关键数据放缓存中是有失效性的,需根据具体业务去了解相关失效性,还是永远存储。
测试⽅法:根据业务关键性数据的缓存设置时间来测试业务的失效性。
缓存异常时系统处理:缓存溢出或丢失时,系统的业务是否能正常处理。⼀般的处理逻辑:重试机制、数据获取切换到DB。总之,不能因缓存异常,影响业务。
测试⽅法:模拟缓存溢出
3、与第三⽅交互
与第三⽅的交互⼀般都是mq交互或服务调⽤,所以在测试过程中会重点关注幂等校验以及服务调⽤超时的情况。
测试⽅法:
重复发送mq
使⽤Yapi平台对接⼝进⾏mock 、修改服务超时响应时间、模拟第三⽅服务返回异常
总结与展望
整体来说前期的接⼝测试,测试过程中的功能测试,测试后期的异常测试基本可以组成⼀个完整的测试⽅案,覆盖整个测试周期。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论