当前位置: 首页 > news >正文

简单谈一谈幂等测试

1、什么是幂等测试

幂等是一个抽象的概念,在编程中一个幂等操作的特点是其任意多次执行所产生的影响均与一次执行的影响相同,即多次调用方法或者接口不会改变业务状态,可以保证重复调用的结果和单次调用的结果一致。幂等测试,则主要是为了验证同一个请求被执行一次与被执行多次的效果是否是一样的。

2、幂等测试的常见场景

(1)前端重复提交
用户在前端提交一些数据给后台服务时,后台需要根据用户提交的数据在数据库中创建记录。如果用户不小心多点了几次,后端收到了多次提交,这时就会在数据库中重复创建多条记录。这就是接口没有幂等性带来的 bug。
(2)接口超时重试
调用接口时,有可能会因为网络原因而调用失败,这时,一般在设计的时候会对接口调用加上失败重试的机制。如果第一次调用已经执行了一半时,发生了网络异常。如果没有幂等处理,这时再次调用时就会因为脏数据的存在而出现调用异常。
(3)消息重复消费
在使用消息中间件来处理消息队列时,如果消费者突然断开连接,那么已经执行了一半的消息会重新放回队列。当消息被重新消费时,如果没有幂等性,就会导致消息重复消费时结果异常。

3、实现幂等的方式

对于前端而言:在用户提交一次操作后,前端将按钮置灰、隐藏等,可以让用户在接口响应之前无法再次提交。当然前端做此校验也只能拦截一部分,毕竟可以通过工具重复调用接口,因此幂等主要还是需要后端来实现。后端实现幂等的常见方式如下。
(1)通过token机制
比如用户在购物提交订单时,服务端提供一个发送token的接口,服务端生成的token一般放在redis中,前端在提交购物订单时,先请求获取token的接口,下单时带着此token放在请求接口头部,同时请求后端接口, 服务端在接受到下单接口的token,判断redis中该token是否存在,如果存在,则代表是第一次请求下单接口,允许下单。下次如果同样的订单及token再次下单时,该token不存在,就表示重复提交下单,服务端直接返回重复下单或其他友好文案。
(2)数据库去重表
往去重表里插入数据的时候,利用数据库的唯一索引特性,保证唯一的逻辑。唯一序列号可以是一个字段,例如订单的订单号。
(3)状态机实现
对于很多业务是有一个业务流转状态的,每个状态都有前置状态和后置状态,以及最后的结束状态。
以订单为例,已支付的状态的前置状态只能是待支付,而取消状态的前置状态只能是待支付,通过这种状态机的流转我们就可以控制请求的幂等。
(4)其他方式
当然还有其他很多方式比如利用redis,加锁等许多方式,针对不同的业务使用合适的实现幂等的方法。

4、如何测试幂等性

(1)网络重发,比如在扫码支付时,商户在扫码时,先断网扫码一次再重连扫码。
(2)系统重发,比如接口请求超时,通过接口补处理机制,触发新的请求。
(3)消息重发,比如通过某个消息中间件重复推送消息,查看消费者是否重复消费。
(4)接口重发,比如对同一笔订单,通过脚本重复提交。

http://www.lryc.cn/news/8867.html

相关文章:

  • typescript复习笔记
  • webstorm开发electron,调试主进程方案
  • 2W字正则表达式基础知识总结,这一篇就够了!!(含前端常用案例,建议收藏)
  • 自学web前端觉得好难,可能你遇到了这些困境
  • ASEMI中低压MOS管18N20参数,18N20封装,18N20尺寸
  • [NetBackup]客户端安装后server无法连通client
  • 黑马Java后端项目实战--在线聊天交友
  • 【实战系列 2】Yapi接口管理平台Getshell-Linux后门权限维持与痕迹清除
  • 设计模式之抽象工厂模式(C++)
  • Kotlin新手教程一(Kotlin简介及环境搭建)
  • 【虚拟仿真】Unity3D打包WEBGL实现全屏切换
  • java对象内存结构分析与大小计算
  • RabbitMQ学习(七):交换器
  • cmd命令大全
  • Git的使用方法(保姆级)
  • TypeScript 学习之泛型
  • 新手学习node.js基础,node.js安装过程,node.js运行环境及javascript运行环境.
  • Maven的安装步骤(保姆级安装教程)
  • Axure教程(一)——线框图与高保真原型图制作
  • wholeaked:一款能够追责数据泄露的文件共享工具
  • 动态规划——股票问题全解
  • 想做游戏开发要深入c/c++还是c#?
  • 【JMeter】【Mac】如何在Mac上打开JMeter
  • JAVA面试八股文一(并发与线程)
  • C语言二级指针
  • [java-面试]初级、中级、高级具备的技术栈和知识点
  • 「5」线性代数(期末复习)
  • 记一次20撸240的沙雕威胁情报提交(2019年老文)
  • 佳能镜头EOS系统EF协议逆向工程(三)解码算法
  • 搞互联网吧,线下生意真不是人干的