- 起因:接触某地公积金系统升级项目,所有的业务接口前面都有一个传入业务类型并获取业务编号的接口。在业务接口中,必传上一个接口从服务器获取的唯一编号,最初不明白这样设计的意义在哪里。
- 再因:在测试社区中看到2021年接口测试行业白皮书,里面介绍到了幂等测试这样一个概念。
- 结果:通过业务唯一键的传入,可以避免幂等测试想要规避的重发问题。解决金融行业上的错误记账、重复扣费问题。
幂等测试概念:幂等性是系统接口的一种承诺,承诺只要调用接口成功,多次相同的输入会有相同的结果反馈和等同一次处理的影响力。声明为幂等的接口会认为外部调用失败是常态,并且失败后必然会有重试。简单的说,幂等测试就是验证数据一致性和事务完整性,通常我们会说防重放。—引用自Kingwin91幂等手记
幂等必要性:
用户重复提交——非常容易发生,前端、后端均需要控制;
网络重发——容易遗漏,但有可能发生;
消息重发——容易遗漏,但有可能发生;
系统间重试——需要根据业务情况来判断是否需要重试,哪些情况哪些系统需要重试;
以上可能会造成重复扣费等生产事故。
解决方法:
以上文中金融产品的思路来说:
- 接口A传入【业务类型】的码值,返回服务器生成该次业务的唯一编码
- 接口B传入接口A得到的唯一编码,并且传入业务入参。正常请求得到反参
每一个事务都包含这两个步骤,如果发生网络重发和用户重复提交,系统可以根据唯一编号是否是处理过的业务。处理过的业务将不再执行,避免了资金重复扣费等带来的问题。
测试思路:
在接口测试时,就可以想一下这个接口的业务如果幂等,会不会带来损失。
用同一套参数重复提交,查看服务器返回是否规避了重复提交。所以如果没有在接口逻辑上规避业务幂等,就需要测试人员在接口测试阶段进行重复提交验证。