在软件测试过程中,经常会遇到一些异常的场景,我们需要检测软件是否能正确处理,不出现崩溃、闪退等严重情况。而这些场景在正常的测试中较少遇到,因此需要模拟这些场景,以确保软件在异常条件下自身具有防护性的措施或者某种灾难性恢复的手段。所做的这些测试,就是容错性测试!
容错性测试,简单概括就是对于各种异常输入,软件都能正常响应。
下面给大家介绍几种需要考虑容错的测试场景:
场景一:生成请求内容
客户端发送请求前,会携带一系列的参数生成请求,这些参数有可能来源于数据库,系统(通过调用系统API获取),缓存等。在获取这些参数的时候,我们要考虑如果参数获取失败的情况下,客户端是否会出现异常。
常用的模拟方法:
1、将缓存清空;
2、将数据库对应的参数字段清空或者设置为异常;
3、将应用的所有权限禁止掉。
操作实例:
测试目的:读取参数信息时,读取出来的信息为空或者异常,客户端均不能出现严重的现象,即崩溃或者闪退。
具体操作:
①当我们在测试某条请求时,先明白该请求的各个参数来源(此时可以请教开发),若是来源于数据库,那么此时下载一个数据库操作软件,用该软件打开参数的存放地址,然后将参数值修改为空或者异常数据,然后再次触发请求,查看客户端是否出现异常。
②若是来源于缓存,我们可以进入到系统设置页面或者第三方软件,清除当前应用的数据缓存信息,然后再次启动应用,触发请求,查看客户端是否出现异常。
场景二:存放数据库
客户端在接收到数据之后,如果涉及到存放数据库的操作,我们要考虑获取到的数据格式,数据类型与客户端定义的不一致的情况下,客户端是否会出现异常。
常用的模拟方法:
1、对客户端接收到数据,将数据类型修改为与客户端不一致的数据类型;
2、对客户端接收的数据格式做异常处理,使得返回的数据格式不正确。
操作实例:
测试目的:客户端将与数据库不兼容的数据存放到数据库中时,要么做数据兼容处理,要么直接丢掉,不能出现客户端崩溃闪退等现象。
具体操作:当我们在测试某个逻辑时,接收到返回的数据信息时,先明白客户端数据存储的逻辑,若此时定义的某个字段为布尔型,那么我们就可以修改返回的数据信息中该字段为非布尔型,然后返回给客户端,查看客户端的反应。
场景三:读取数据库
客户端在处理某些逻辑时,涉及到数据的读写,将读取出现来的数据展现在页面内,如果涉及到数据库数据的读取,我们要考虑当数据库数据读取失败的情况下,客户端是否出现异常。
常用的模拟办法:
1、将数据库对应的字段设置为空或者异常数据;
2、将应用的所有权限禁止掉。
操作实例:
测试目的:客户端从数据库读取到异常数据时,客户端要确保不会出现闪退崩溃等现象。
具体操作:当我们在测试某个页面时,页面的内容来源于数据库,那么此时我们可以下载一个数据库操作软件,用该软件打开数据信息的存放地址,然后将数据信息修改为空或者异常数据,再次刷新页面,查看页面的显示是否正常。
场景四:处理服务端数据返回
首先强调一点,这里说的服务端数据返回,指的是客户端获取到服务端数据之后直接展现,没有数据库操作等行为,这种情况下,我们要考虑当服务端返回的数据信息异常时,客户端在解析数据展现时是否会出现异常。
常用的模拟办法:
1、修改服务端返回的数据类型和格式为异常信息或者为空。
操作实例:
测试目的:客户端接收到服务端返回的异常数据之后,要确保在展现时不出现闪退崩溃等现象。
具体操作:当我们在测试某个逻辑时,接收到服务端的数据信息时,直接修改返回的数据信息,将数据格式设置错误或者将数据类型做修改,然后返回给客户端,查看客户端的响应情况。
场景五:接收第三方接口或者SDK数据
在app的实现逻辑中,很多情况下会调用第三方的接口或者SDK,虽然我们无法直接测试第三方接口或者SDK内部的实现逻辑,但是我们要考虑当第三方接口或者SDK返回异常信息时,客户端是否出现异常。
常用的模拟方法:
1、请开发同学强制修改第三方接口或者SDK的返回结果,结果可以设置为空,或者异常。(也可以借助mock、Fiddler等工具模拟,具体用法可以参考部落中对应文章)
特例:合理对待空数据
容错测试中,我们经常会模拟空数据,以便验证客户端对空数据的处理情况,但是这里要注意的是,客户端处理空数据无非两种,处理或者不处理。如果涉及到逻辑状态时,不能处理,如果涉及到特定的配置文件替换,则可以处理。
举个例子:
客户端在某种状态下要弹一个对话窗,而对话窗是否弹出依靠数据库中的一个状态值。当服务端突然返回空数据时,我们要确保客户端不做处理,即不替换数据库数据,否则,空数据会替换本地数据库状态数据,导致弹窗会一直弹出,影响用户体验。
若本地策略要动态调整生效性,尤其是某些逻辑的云端开关,有时为了产品方便操作,配置为空数据或者关闭开关均可以屏蔽逻辑的生效性。不过此时要具体情况具体分析。
总之:
容错测试为考验产品对于异常输入的自我规避或者保护的处理,我们一方面要测试这种场景,但是更要注意的是,这种场景之后,如果下发的正常的数据,能否正常的恢复正常的产品运行,更是容错测试的一个重要方面!