想必大家在日常的测试工作中,经常会碰到以下这些场景:
场景一:
测试人员:有一个数据为空的场景还没有验证。
研发人员:这个场景不会出现,因为没有删除逻辑。
场景二:
研发人员:本次需求时间紧任务重!这里肯定不会出现数据为空的情况,异常处理来不及加,先不加了或者忘记加了。
场景三:
测试人员:逻辑删除了所有的测试数据,认为测试到了数据为空的情况。但实际上,底层数据逻辑会查询所有数据,然后在逻辑层根据“是否被删除”字段做处理,未能真正验证空数据的异常情况。
...等等
这些场景问题引发了一个思考"不存在的场景真的不存在吗?",今天我们就从案例出发剖析空场景的重要性,同时给大家分享29个常见空场景及测试方法!希望对大家有所启发帮助!
空场景的重要性
以下是京东开发者分析了过去十年中因空指针异常(NullPointerException, NPE)而导致的多起著名互联网公司事故:
例如:
·2016 年 API 故障,因空指针异常导致部分第三方应用无法正常使用,影响了许多依赖 Twitter 数据的应用程序;
·2017 年消息丢失,因空指针异常导致部分用户的消息丢失或无法发送;
· 2018 年乘车系统中断,因空指针异常导致乘车系统中断,用户无法呼叫车辆;
·2019 年“双 11”购物节故障,因空指针异常导致系统崩溃,部分用户在支付环节遇到问题;
·2020 年购物车故障,因空指针异常导致用户在结账时出现错误,无法完成购买;
· 2021 年支付系统故障,因一处空指针异常在高峰期出现支付系统故障,用户无法进行支付操作;
这些比较大的负面影响,导致用户满意度大幅下降,公司盈利损失,同时获客成本大幅提高。
这些案例警示我们,预防和解决空指针异常问题不仅是技术层面的挑战,更是关乎公司生存与发展的重要任务。
29个空场景及测试方法汇总
上面我们了解了空场景的重要性,那平常的工作中又该如何预防和干预呢?保持对空场景的敏感度,多记录多总结是必不可少的。
下面就给大家分享汇总的29个空场景及测试方法,帮助大家从此告别背锅侠!
01:未初始化的对象
场景:尝试调用未初始化的对象方法。
测试方法:确保所有对象在使用前都已正确初始化。
02:空返回值
场景:方法返回 null,而不是预期的对象。
测试方法:对所有方法的返回值进行 null 检查,特别是在接收外部数据或 API 调用的地方。
03:集合中的空元素
场景:集合(如 List、Set、Map)中包含 null 元素。
测试方法:在操作集合时添加 null 检查,避免对 null 元素进行操作。
04:外部库或 API 调用
场景:调用外部库或 API 时返回 null。
测试方法:对所有外部调用进行 null 检查,确保返回值不为空。
05:对象属性未初始化
场景:访问对象的属性时,属性未初始化。
测试方法:在对象初始化时确保所有属性都已赋值,或添加 null 检查。
06:依赖注入失败
场景:依赖注入框架未能正确注入依赖对象。
测试方法:在使用依赖对象前进行 null 检查,确保依赖已正确注入。
07:多线程环境
场景:多线程环境下的竞争条件导致对象未初始化。
测试方法:使用同步机制确保对象在多线程环境中安全初始化。
08:用户输入
场景:用户输入为空或非法值。
测试方法:对用户输入进行验证和检查,确保输入值不为空。
09:数据库查询结果
场景:数据库查询返回 null 结果。
测试方法:对所有数据库查询结果进行 null 检查,避免操作 null 结果。
10:配置文件或环境变量
场景:配置文件或环境变量中缺失关键配置。
测试方法:加载配置时进行 null 检查,确保所有关键配置已正确加载。
11:文件读取
场景:文件读取操作返回 null(例如文件不存在)。
测试方法:在读取文件前检查文件是否存在,确保文件读取操作返回非 null 值。
12:Web 请求参数
场景:Web 请求中缺少必需的参数。
测试方法:对所有 Web 请求参数进行验证,确保所有必需参数均已提供且不为空。
13:缓存失效
场景:缓存失效或未命中时返回 null。
测试方法:在使用缓存结果前进行 null 检查,确保缓存命中返回非 null 值。
14:序列化/反序列化
场景:对象序列化或反序列化时出现 null 值。
测试方法:在序列化和反序列化操作时进行 null 检查,确保过程正确完成。
15:后台服务返回值
场景:调用后台服务接口时,返回 null。
测试方法:对所有后台服务调用的返回值进行 null 检查,确保返回值不为空。
16:事件驱动系统
场景:事件处理过程中,事件对象为 null。
测试方法:在事件处理代码中检查事件对象,确保其不为空。
17:迭代器
场景:使用迭代器遍历集合时,迭代器的 next()方法返回 null。
测试方法:在遍历集合时检查每个元素,确保其不为空。
18:回调函数
场景:回调函数的参数为 null。
测试方法:在回调函数中添加参数检查,确保传递的参数不为空。
19:配置对象
场景:加载配置对象时,某些配置属性为 null。
测试方法:在使用配置对象前,检查其所有属性,确保不为空。
20:定时任务
场景:定时任务执行时,所需的依赖对象为 null。
测试方法:在定时任务执行前检查所有依赖对象,确保其已初始化。
21:动态加载类
场景:通过反射或动态加载类时,类实例为 null。
测试方法:在动态加载类后检查实例对象,确保其不为空。
22:分布式系统
场景:分布式系统中,远程调用返回 null。
测试方法:对所有远程调用的返回值进行 null 检查,确保返回值不为空。
23:日志记录
场景:日志记录过程中,日志对象为 null。
测试方法:在记录日志前检查日志对象,确保其不为空。
24:错误处理
场景:错误处理过程中,错误信息对象为 null。
测试方法:在处理错误时检查错误信息对象,确保其不为空。
25:依赖链
场景:多个依赖对象中的一个为 null,导致整个依赖链失效。
测试方法:在使用依赖链中的每个对象前进行 null 检查,确保所有依赖对象都已正确初始化。
26:多语言支持
场景:多语言支持时,语言资源对象为 null。
测试方法:在加载多语言资源时检查资源对象,确保其不为空。
27:插件机制
场景:插件机制中,加载的插件对象为 null。
测试方法:在加载插件后检查插件对象,确保其不为空。
28:缓存机制
场景:缓存机制中,缓存对象为 null。
测试方法:在使用缓存对象前检查其是否已正确加载,确保不为空。
29:API 网关
场景:通过 API 网关调用服务时,返回值为 null。
测试方法:在 API 网关处理请求时检查返回值,确保不为空。
看完这些空场景及测试方法,那么:
#1.你觉得因空场景导致线上出现问题,到底是谁的责任?测试人员如何杜绝背锅?
#2.你工作中都遇到过哪些印象深刻的空场景情况?
#3.你们公司针对测试部门有BUG数量的奖励计划吗?针对空场景未测试导致线上出现BUG一般都是如何处理的?
总结:
感谢每一个认真阅读我文章的人!!!
作为一位过来人也是希望大家少走一些弯路,如果你不想再体验一次学习时找不到资料,没人解答问题,坚持几天便放弃的感受的话,在这里我给大家分享一些自动化测试的学习资源,希望能给你前进的路上带来帮助。
软件测试面试文档
我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
视频文档获取方式:
这份文档和视频资料,对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!以上均可以分享,点下方小卡片即可自行领取。