首页 > 技术文章 > 幂等测试

summer-sun 2016-05-26 20:51 原文

1.什么是幂等

  • 数学

       f(n) = 1^n  就是一个幂等函数

  • 编程

       任意多次执行所产生的影响与一次执行相同,不用担心重复执行会对系统造成改变

2.为什么要做幂等

  • 故障:

     保底系统因为线上swallow消息重复发送,产生了三个线上问题:
    a、ts-treasure-pool大面积告警,全部为db主键冲突的错误。
    b、同一笔保底抵扣数据,在归还保底时当做两笔进行归还,影响总数据量1500笔左右。
    c、同一笔保底申请审核通过后,被当做两笔审核通过进行了保底占用和预付款生成,共9笔。

3.什么时候要做幂等

  • 场景:

    同样的请求可能需要重试(或可能被重复调用)的情况
    按业务场景做针对性判断,利益相关型业务(支付、结算等)

  • 接口类型:

     PegionService 接口
     Swallow消费机
     Http接口

4.如何做到幂等

  • 一般情况下:利用唯一交易号(或流水号)实现

         eg1:创建统一订单  case337

  • eg2:更新订单可用数量  case2178

        eg3: 支付成功后消耗抵用券 PCT_CouponConsume

               幂等要做到:
                    1、同一个OutBizID,多次消耗该抵用券的结果都是成功。
                    2、但对于一个CouponID,只能被消耗一次,如果换一个OutBizID来调用时应该始终返回失败。

5.如何测试幂等

  • 方法

     可在iTest上新增待测Pegions接口、Http接口、发送指定topic的swallow消息的幂等测试用例,重复执行来模拟多次调用

  • 检查点

      检查接口返回的Response是否幂等
      检查对数据库数据的变更影响是否幂等

 

推荐阅读