【测试经验】Bug集锦

一、重构时删除"无用"代码

问题:

某列表接口返回有图片链接数据,现发现原有链接的协议头缺失,导致在App端无法正常下载请求图片。

原因:

查看db中图片链接的数据源,db中存储的图片链接数据并没有带协议头;

再排查App前端代码,是直接获取接口response中图片链接进行下载展示,没有拼接协议头操作;

抓包查看生产环境该接口,接口返回图片链接带有协议头"https",故原来应该是在Api对图片链接进行过处理;

但开发排查后发现该接口为透传调用依赖方service,service返回的图片链接并没有协议头,接口逻辑中未对response进行处理;

我建议将代码切到release分支,使用“https”在代码中进行全局搜索,最终发现,Api逻辑中确实未对图片链接进行图片处理,但是在Model中图片链接字段get方法中进行了协议头拼接处理,

但在接口迁移技改过程中,开发觉得原有get&set方法过于冗余,故将原有get&set删除,换为使用lombok@Getter、@Setter注解进行处理,也将图片链接协议头拼接逻辑删除,导致返回给C端的图片链接缺失协议头。

二、使用异步操作优化性能

问题:

用户首次预约后,未自动绑定账号所对应的学生。

原因:

为使该接口的请求时间更短,故使用异步的方式调用的预约注册服务。

当异步进行的注册操作未完成时进行绑定学生操作,会因查询不到学生信息而导致绑定失败。

三、敏感操作未进行加锁,未考虑事务原子性,数据一致性

问题:

偶现实际购买次数>限制购买次数,消耗货币数量>发放货币数量。

原因:

1、没有考虑事务的原子性,要么都成功,要么都失败,并且扣减次数&货币的操作应该在发放商品之前

2、没有进行加锁处理,导致并发处理情况下,还没进行扣减操作前,又使用未扣减前的状态进行了请求。

原文地址:https://www.cnblogs.com/6970-9192/p/11330486.html