幂等性概念
数学中的定义:其任意多次执行所产生的影响均与一次执行的影响相同。比如f(f(x)) = f(x).
HTTP协议中的定义:在HTTP/1.1规范中幂等性的定义是:HTTP方法的幂等性是指一次和多次请求某一个资源应该具有同样的副作用。其中GET,PUT, DELETE
如何测试幂等性
幂等性如此重要,那我们在具体的测试执行中该如何设计用例场景呢。主要有以下几种方法(有其他方法手段,欢迎补充)
-
前端重复快速点击(一般前端会做提交)
-
网络重发,比如在扫码支付时,商户在扫码时,先断网扫码一次再重连扫码
-
对同一笔订单,不同商户同时扫码
-
对同一笔业务并发请求,比如并发提现
-
Nginx重发情况(这种情况还没试过,要对nginx比较熟悉才行)
开发如何保障幂等性
1.insert前先select
2.加悲观锁
3.加乐观锁
4.加唯一索引
5.建防重表
6.更据状态机
7.加分布式锁
8.获取token