如何成为一名优秀的软件测试?完成功能测试既能达到发版?成为项目负责人需要考虑哪些方面的测试?
2023年6月份从普通院校毕业开始软件测试生涯,从小白到项目负责人,薪资从5k到10k的变化,需要不断学习和总结经验。
以下是我就从事一年的软件测试总结一份除了功能测试之外,测试人员需要专题测试的内容,包括异步加载、防抖与节流、弱网、后端拦截缺失、权限问题、请求、响应时机错误、组件问题、高并发、大数据处理、上锁与解锁、react疯狂请求等。
一、异步加载(结合弱网多次测试复现)
1.数据不一致
(1)界面显示与实际数据不同步
由于异步加载的延迟,可能会出现界面上显示的数据与实际数据不一致的情况。
例如,用户在界面上看到的是旧的数据,而实际上新数据已经在后台加载完成,但还未更新到界面上,尤其是在需要实时数据的场景下,如金融交易软件、实时监控系统等。
(2)重复加载数据
如果异步加载的逻辑没有处理好,可能会导致重复加载数据的问题。
例如,在用户快速操作或网络不稳定的情况下,可能会触发多次异步加载请求,导致数据被重复加载和处理。
2.加载失败处理
(1)无反馈或错误提示不明确
异步加载失败时,如果没有适当的反馈机制,用户可能不知道发生了什么问题。
例如,页面上一直显示加载图标,但没有任何提示说明加载失败的原因。
或者错误提示不明确,用户无法理解问题所在,也不知道如何解决。
例如,只显示 “加载失败”,而没有具体的错误信息和解决方法。
(2)无法重试或恢复
如果异步加载失败后,没有提供重试或恢复的机制,用户可能无法继续操作。
例如,在加载数据失败后,用户无法重新尝试加载,或者无法手动刷新页面以获取最新数据,可以结合弱网进行复现这类情况。
二、防抖与节流
节流: n 秒内只运行一次,若在 n 秒内重复触发,只有一次生效;
防抖: n 秒后在执行该事件,若在 n 秒内被重复触发,则重新计时;
1.防抖
(1)响应延迟过度
由于防抖会在触发事件后等待一段时间,如果这段等待时间设置过长,可能会导致用户操作的响应明显延迟,影响用户体验。
例如,在一个搜索框中,用户输入字符后需要等待较长时间才能看到搜索结果,可能会让用户觉得系统反应迟钝。
(2)丢失关键事件
如果在防抖等待期间发生了一些关键事件,但由于防抖机制的存在,这些事件可能被忽略。
比如在一个实时数据监测系统中,防抖可能导致一些重要的短暂数据变化被错过。
2.节流
(1)缺少节流,多次请求
节流目的是为了限制统一操作多次请求,导致服务器负担过重。同时对于请求过慢的过程,更加需要节流操作来限制用户过度点击操作(也可以前端进行限制)
例子,在提交表单的数据比较多时,可能会导致响应比较慢,客户认为没有点击成功,重复多次点击,最后提示报错。
(2)数据更新不及时
节流会限制函数在一定时间内的执行次数,如果时间间隔设置不当,可能会导致数据更新不及时。
例如在一个动画效果中,节流可能会使动画的帧率降低,导致画面不流畅。
(3)遗漏重要操作
在节流的时间间隔内,如果发生了多个重要操作,可能只有其中一个被执行,其他操作被忽略。
比如在一个游戏中,玩家的连续操作可能因为节流而被部分忽略,影响游戏体验。
(4)并发问题
当多个事件同时触发节流时,可能会出现并发问题,导致数据不一致或错误的操作。
例如在一个多用户的在线系统中,多个用户同时触发了一个节流的操作,可能会导致系统状态的混乱。
三、弱网
1.数据传输、功能错误、异常处理
(1)数据传输不完整或错误
网络信号弱可能导致数据在传输过程中丢失部分数据包,使得接收端接收到的数据不完整。例如,在上传文件时,可能会出现文件损坏或部分内容丢失的情况。
数据错误也可能发生,例如在下载软件更新时,可能会因为网络问题导致下载的文件出现错误,安装后软件无法正常运行。
(2)功能响应缓慢或超时
在弱网条件下,请求和响应的时间会大大延长。这可能导致用户操作后长时间没有反馈,影响用户体验。例如,点击按钮后,页面加载时间过长,甚至出现超时错误。
对于一些实时性要求较高的功能,如在线游戏、视频通话等,弱网可能会导致卡顿、延迟,甚至功能无法正常使用。
(3)操作失败或异常中断
弱网可能导致正在进行的操作突然失败或中断。例如,在填写表单并提交时,如果网络中断,提交可能会失败,而且用户可能会丢失已经输入的数据。
对于一些需要连续网络连接的操作,如在线支付、文件上传等,网络不稳定可能会导致操作异常中断,需要重新进行操作。
2.用户体验
(1)界面显示异常
弱网可能导致界面加载不完整或显示错误。例如,图片无法加载、文字显示不全等。
界面响应缓慢也会影响用户体验,例如下拉刷新时,界面长时间停留在刷新状态,没有任何反馈。
(2)错误提示不明确
在弱网情况下,应用程序应该提供明确的错误提示,让用户知道问题所在并采取相应的措施。如果错误提示不明确或不准确,用户可能会感到困惑和不满。
四、后端拦截缺失(使用接口测试)
1.数据完整性和一致性问题
(1)非法输入数据
没有拦截机制可能导致用户输入不合法的数据,从而破坏数据库的完整性和一致性。
例如,输入不符合数据格式要求的日期、数字等,或者输入过长或过短的字符串。比如,一个注册功能如果没有对用户输入的邮箱地址进行验证,可能会导致用户输入错误格式的邮箱地址,后续在发送邮件验证等操作时会出现问题,修改密码等操作也会存在这类问题。
(2)重复数据提交
如果后端没有拦截重复提交的请求,可能会导致数据重复插入数据库,造成数据混乱。
例如,在表单提交时,如果用户多次点击提交按钮或者网络延迟导致请求重复发送,没有拦截的话会导致相同的数据被多次插。
2.安全漏洞相关bug
(1)SQL 注入攻击
没有拦截可能导致恶意用户通过输入特定的 SQL 语句来操纵数据库。
例如,在用户输入的查询参数中插入恶意的 SQL 代码,从而获取或修改数据库中的敏感信息,比如,一个搜索功能如果没有对用户输入进行过滤,攻击者可以输入 “' OR 1=1 --” 这样的字符串,可能导致返回数据库中的所有记录。
(2)跨站脚本攻击(XSS)
后端没有拦截可能使得恶意用户在输入内容中插入脚本代码,当其他用户查看包含这些内容的页面时,脚本会在他们的浏览器中执行。这可能导致用户信息泄露、会话劫持等问题。
例如,在评论区如果没有对用户输入的内容进行过滤,攻击者可以输入 “<script>alert('XSS')</script>”,当其他用户查看该评论时,浏览器会弹出警告框。
(3)命令注入攻击
恶意用户可能通过输入特定的命令字符串,让后端服务器执行危险的系统命令。如果没有拦截,可能会导致服务器被攻击、数据被破坏等严重后果。
比如,在一个文件上传功能中,如果没有对文件名进行严格检查,攻击者可以上传一个包含恶意命令的文件,服务器在处理这个文件时可能会执行这些命令。
五、权限问题
1.权限验证漏洞(接口测试)
(1)接口绕过权限验证
攻击者可以通过某种方式绕过权限验证机制,访问受限制的资源或执行未经授权的操作。
例如,通过修改 URL 参数、利用系统漏洞或使用特殊的工具和技术,使用普通权限的cookie访问高级权限接口是否后端做了权限配置拦截。
(2)权限继承冲突
当多个用户或角色之间存在复杂的权限继承关系时,可能会出现权限冲突。
例如,一个用户同时属于两个不同的角色,这两个角色对某个资源的权限设置不同,导致用户在访问该资源时出现权限混乱。
(3)权限干扰
如果某个请求需要获取其他模块的数据,如字典数据,禁用字典权限后,再请求后可能会导致强制退出。
六、请求、响应时机错误
1.请求时机错误
(1)请求过早或过晚
很多开发图方便可能把所有的get操作同时发生,这样如果后端有数据更新或者页面刷新时,这些接口都被覆盖或者已经和原来数据不一致导致bug出现。
例如,get请求都是在点击填写表单按钮请求,刷新页面,表单使用下拉框就不会有get的数据。
1.响应时机错误
(1)等待时间过长
用户通常对请求的响应时间有一定的期望,如果响应时间过长,用户可能会感到不耐烦。这可能会降低用户对系统的满意度,甚至导致用户流失。
例如,在一个移动应用中,如果加载页面的时间过长,用户可能会切换到其他应用。
(2)错误提示不明确
如果请求和响应时间导致的错误没有明确的提示信息,用户可能会感到困惑。他们不知道问题出在哪里,也不知道如何解决。
例如,当一个请求超时后,只显示一个通用的错误信息,用户可能无法确定是网络问题还是系统故障。
七、组件问题
1.兼容性问题
(1)不同平台兼容性问题
组件在不同的操作系统、浏览器或设备上可能表现不一致。
例如,一个在 Windows 系统上运行良好的组件,在 Mac 系统上可能出现布局错乱或功能异常。或者一个在 Chrome 浏览器中正常工作的组件,在 Firefox 浏览器中可能出现兼容性问题。
(2)版本兼容性问题
当组件的版本发生变化时,可能会与其他组件或整个系统产生兼容性问题。
例如,一个库的新版本可能改变了某些函数的参数或返回值,导致依赖该库的组件出现错误。或者一个组件的升级可能导致与旧版本的系统不兼容,需要进行大量的适配工作。
2.特殊组件问题
(1)组件边框大小问题
某些组件的边框是随着数据多少而改变的大小的,那么如果说数据响应比较慢,则组件无法判断,会提前给出边框,导致后面的数据超出边框。
例如,小编之前遇到遇到正式环境出现类似bug,测试环境没有出现,开发和测试定位好久都无法定位成功,最后是通过弱网测试发现复现增高才定位到bug原因,最后固定组件大小解决问题。
八、边界值
1.数值边界问题
(1)精度损失
在处理浮点数时,接近边界值的数值可能会导致精度损失。由于浮点数的精度有限,当数值非常接近其边界值时,可能会出现舍入误差或精度降低的情况。
例如,在以往的商城测试中,订单里面有单价和总价格,如果是先算商品价格再加起来计算总价格则会丢失精度过大,这是比较常用的做法,但是不适用于高精度的系统;如果先加所有商品后舍弃后面位数则精度更准确,对于高精度的系统有很多帮助,但是可能客户自己计算和系统算出有出入。不管使用那种方案都会有精度损失,按照实质的场景采取最佳方案即可。
(2)溢出错误
当数值接近其数据类型的上限或下限时,可能会发生溢出错误。
例如,一个无符号整数类型的变量,如果被赋予一个超过其最大值的值,可能会导致溢出,结果可能是错误的或不可预测的,比如在一个计数器应用中,如果计数器达到了其最大值,继续增加可能会导致溢出,使得计数器的值变为一个非常小的负数
九、高并发、大数据处理(接口测试、文件导入)
1.数据不一致问题
(1)数据丢失或不一致
在高并发或大数据环境下,数据的写入操作可能会因为冲突或其他原因而失败,导致数据丢失或不一致。
例如,两个用户同时修改同一数据,后提交的用户可能会覆盖前一个用户的修改,导致数据丢失或不一致。
2.性能问题
(1)响应时间过长
在高并发情况下,系统可能会因为处理大量请求而导致响应时间过长。这可能会影响用户体验,甚至导致用户放弃使用系统。
例如,在一个电商网站的促销活动中,大量用户同时访问网站,导致页面加载时间延长,购物车结算速度变慢。
(2)系统奔溃
如果系统无法承受高并发的压力,可能会出现崩溃的情况。这可能是由于资源耗尽、数据库连接超时、内存泄漏等原因引起的。
比如,一个在线游戏在大量玩家同时登录时,服务器可能会因为负载过高而崩溃,导致玩家无法正常游戏。
(3)数据库性能减低
大数据量和高并发访问可能会对数据库造成巨大压力,导致数据库性能下降。例如,查询速度变慢、写入操作延迟、索引失效等。
十、上锁与解锁
1.上锁时机不对或滥用上锁
(1)上锁时机不对
上锁实质上是限制操作,比如说后端请求限制提示不能操作,或者是前端没有这个权限隐藏功能或者点击提示不能操作,这使得系统更加安全,同时,还能提高易用性。上锁一般是放在“入口”,但很多产品没有考虑到这个问题进去某个页面才上锁导致页面请求出现数据不全或者强制退出。
(2)滥用上锁
上锁一般用于购买商品、使用购物券,再支付这个过程要将商品或者购物券减一,但是有些产品设计上锁不删除操作,就会导致同一个页面的商品、购物券被上锁后其他用户点击无法购买。有两个方案可以避免,第一上锁的商品或者购物车隐藏、第二将同一面额购物券合并一块,只要是点击就在数量减一,减少多人卡一个购物券。
十一、react使用useEffect出现疯狂请求
1.接口循环请求
一个模糊搜索接口循环请求接口,20分钟请求了1万次这个接口,导致页面卡顿,系统奔溃。