• 起因:接触某地公积金系统升级项目,所有的业务接口前面都有一个传入业务类型并获取业务编号的接口。在业务接口中,必传上一个接口从服务器获取的唯一编号,最初不明白这样设计的意义在哪里。
    • 再因:在测试社区中看到2021年接口测试行业白皮书,里面介绍到了幂等测试这样一个概念。
    • 结果:通过业务唯一键的传入,可以避免幂等测试想要规避的重发问题。解决金融行业上的错误记账、重复扣费问题。

    幂等测试概念:幂等性是系统接口的一种承诺,承诺只要调用接口成功,多次相同的输入会有相同的结果反馈和等同一次处理的影响力。声明为幂等的接口会认为外部调用失败是常态,并且失败后必然会有重试。简单的说,幂等测试就是验证数据一致性和事务完整性,通常我们会说防重放。—引用自Kingwin91幂等手记

    幂等必要性
    用户重复提交——非常容易发生,前端、后端均需要控制;
    网络重发——容易遗漏,但有可能发生;
    消息重发——容易遗漏,但有可能发生;
    系统间重试——需要根据业务情况来判断是否需要重试,哪些情况哪些系统需要重试;
    以上可能会造成重复扣费等生产事故。

    解决方法
    以上文中金融产品的思路来说:

    1. 接口A传入【业务类型】的码值,返回服务器生成该次业务的唯一编码
    2. 接口B传入接口A得到的唯一编码,并且传入业务入参。正常请求得到反参

    每一个事务都包含这两个步骤,如果发生网络重发和用户重复提交,系统可以根据唯一编号是否是处理过的业务。处理过的业务将不再执行,避免了资金重复扣费等带来的问题。

    测试思路
    在接口测试时,就可以想一下这个接口的业务如果幂等,会不会带来损失。
    用同一套参数重复提交,查看服务器返回是否规避了重复提交。所以如果没有在接口逻辑上规避业务幂等,就需要测试人员在接口测试阶段进行重复提交验证。