接口的幂等性
什么是幂等性
什么是接口的幂等性?可能大家在测试过程中多多少少会接触到,但是一问到专业的名词可能会有些卡壳,
再一次面试过程中,面试官问了我接口的幂等性是什么意思,我脑海里闪现出了这个词的意思,然后印象里是在某些论坛中读过关于幂等性的文章,且接触过相关的测试工作,
但是具体说什么意思的话可能一时语塞,并没有答上来,感觉很难受。接口的幂等性就是用户对于同一操作发起的一次请求或者多次请求的结果是一致的,不会因为多次点击而产生了副作用。最简单的例子就是支付,
我们在支付过程中,无论什么原因都只能扣用户一次钱,或者我们在提交订单时,无论什么原因只能提交一笔订单。
什么情况下需要保证幂等性
首先说下接口的功能,接口无非是查询数据库中数据并返回或者操作数据库中的数据,操作的话又分为新增,修改,删除。
其中查询和删除是天然的幂等性,只要查询条件一致,返回的数据一定是一致的;删除条件一致,数据删除的结果也是一致的。
需要特别注意的是新增和修改
如何测试幂等性
幂等性如此重要,那我们在具体的测试执行中该如何设计用例场景呢
-
前端重复快速点击(一般前端会做提交)
-
网络重发,比如在扫码支付时,商户在扫码时,先断网扫码一次再重连扫码
-
对同一笔订单,不同商户同时扫码
-
对同一笔业务并发请求,比如并发提现
-
Nginx重发情况(这种情况还没试过,要对nginx比较熟悉才行
如何保证幂等性
-
token机制,防止页面重复提交
-
悲观锁获取数据的时候加锁获取select * from table_xxx where id='xxx' for update;注意:id字段一定是主键或者唯一索引,不然是锁表
-
乐观锁
乐观锁只是在更新数据那一刻锁表,其他时间不锁表,所以相对于悲观锁,效率更高。
-
分布式锁
-
状态机幂等