支付类幂等性测试分享

主题: 支付类幂等性测试分享

HI all:

最近在测试扫码支付的时候,尝试测试了支付接口的幂等性,结合实例和网上资料一并分享给大家。

  1. 幂等性概念
  1. 数学中的定义:其任意多次执行所产生的影响均与一次执行的影响相同。比如f(f(x)) = f(x).
  2. HTTP协议中的定义:在HTTP/1.1规范中幂等性的定义是:HTTP方法的幂等性是指一次和多次请求某一个资源应该具有同样的副作用。其中GET,PUT, DELETE

方法是符合幂等性的,因为获取资源和删除资源无论执行多少次,产生的效果是一样的。Post方法不符合幂等性。

那么幂等性为什么在金融类的支付,扣款,提现中如此重要呢。一句话是保证资金的安全性,提现不能让用户成功提现两笔,支付也同样不能。

适用场景:

1.前端重复提交选中的数据,应该后台只产生对应这个数据的一个反应结果。

2.我们发起一笔付款请求,应该只扣用户账户一次钱,当遇到网络重发或系统bug重发,也应该只扣一次钱;

3.创建业务订单,一次业务请求只能创建一个,创建多个就会出大问题。

4.客户对一笔合同还款,一次业务请求只能成功一次,成功两次公司会穷死的(囧)

比如假设有一个从账户取钱的远程API(可以是HTTP的,也可以不是),我们暂时用类函数的方式记为:

如何服务端返回取现成功的OK请求丢失了,客户端再发一次请求,如果服务端没有做幂等性设计,那不是被取现成功两次 amount金额被减了两次。

  1. 如何测试幂等性

幂等性如此重要,那我们在具体的测试执行中该如何设计用例场景呢。主要有以下几种方法(有其他方法手段,欢迎补充)

  1. 前端重复快速点击(一般前端会做提交)
  2. 网络重发,比如在扫码支付时,商户在扫码时,先断网扫码一次再重连扫码
  3. 对同一笔订单,不同商户同时扫码
  4. 对同一笔业务并发请求,比如并发提现
  5. Nginx重发情况(这种情况还没试过,要对nginx比较熟悉才行)
  1. 开发如何保证幂等性(欢迎开发大神提供更多解决方案)
  1. token机制,防止页面重复提交
  2. 悲观锁

    获取数据的时候加锁获取

    select * from table_xxx where id=‘xxx‘ for update;

    注意:id字段一定是主键或者唯一索引,不然是锁表

  3. 乐观锁 

乐观锁只是在更新数据那一刻锁表,其他时间不锁表,所以相对于悲观锁,效率更高。

  1. 分布式锁
  2. 状态机幂等 

更多参考资料:

1. 高并发的核心技术-幂等的实现方案

https://mp.weixin.qq.com/s?__biz=MzI4OTA3NDQ0Nw==&mid=2455545024&idx=1&sn=9ffb45c333161a8c22cba9b4b9f32894&chksm=fb9cb8a0cceb31b627a34e8d87ed0465f8cd93e7df600490907358f0c7465c033e1d12b5e670&mpshare=1&scene=1&srcid=0711SymAUD944wje07DO6xIz#rd

2. RocketMQ支持事务消息机制

https://www.jianshu.com/p/cc5c10221aa1

谢谢~~~~~

工作中测试同事分享文章

原文地址:https://www.cnblogs.com/haoliyou/p/10000563.html

时间: 2024-09-30 15:05:08

支付类幂等性测试分享的相关文章

Unity多线程(Thread)和主线程(MainThread)交互使用类——Loom工具分享

Unity多线程(Thread)和主线程(MainThread)交互使用类——Loom工具分享 By D.S.Qiu 尊重他人的劳动,支持原创,转载请注明出处:http.dsqiu.iteye.com           熟悉Unity的developer都知道在Unity中的线程不能使用Unity的对象,但可以使用Unity的值类型变量,如Vector3等.这样就使得线程在Unity中显的很鸡肋和蹩脚,因为很多函数很都是UnityEngine类或函数的调用的,对于哪些是可以在多线程使用,风雨冲

移动支付类App漏洞隐患重重,如何进行AndroidApk加密保护 !

没有一种支付是100%安全的,互联网及移动支付规模的增长,其交易的安全性需要银行.支付公司.App开发者.用户等参与各方更加重视.当下手机支付似乎变成了一种时尚,用户们"刷手机"乘地铁,"刷手机"购物,"刷手机"喝咖啡,"刷手机"看电影,甚至"刷手机"定机 票--种种迹象表明手机支付已经迎来了一个高速发展期.但伴随着移动支付业务金额的疯狂涨势,移动支付背后的隐患也让人忧心忡忡,引起广泛关注.为保护用户支付安

Java基础-继承-编写一个Java应用程序,设计一个汽车类Vehicle,包含的属性有车轮个数 wheels和车重weight。小车类Car是Vehicle的子类,其中包含的属性有载人数 loader。卡车类Truck是Car类的子类,其中包含的属性有载重量payload。每个 类都有构造方法和输出相关数据的方法。最后,写一个测试类来测试这些类的功 能。

#29.编写一个Java应用程序,设计一个汽车类Vehicle,包含的属性有车轮个数 wheels和车重weight.小车类Car是Vehicle的子类,其中包含的属性有载人数 loader.卡车类Truck是Car类的子类,其中包含的属性有载重量payload.每个 类都有构造方法和输出相关数据的方法.最后,写一个测试类来测试这些类的功 能. package hanqi; public class Vehicle { private int wheels; private int weight

IO流,File类的测试........课堂加总结

package liu0926; import java.io.File; import java.io.IOException; public class Text01 { public static void main(String[] args) { //IO流,File类的测试 //实例化某个文件的file对象 File file =new File("d:/text.txt"); //判断目标是否存在 if(file.exists()) { System.out.printl

Unity协程(Coroutine)管理类——TaskManager工具分享

Unity协程(Coroutine)管理类--TaskManager工具分享 By D.S.Qiu 尊重他人的劳动,支持原创,转载请注明出处:http.dsqiu.iteye.com 在分享vp_Timer 中提到,没有继承的MonoBehaviour,没有Update,InVoke 和StartCoroutine的机制,vp_Timer就是提供了InVoke的机制,而且还可以统一管理.本篇D.S.Qiu要分享的TaskManager就是一个协程 管理类. TaskManager -- Unit

互联网产品接入支付功能如何测试?

互联网产品接入支付功能如何测试? 现在有不少测试朋友做的项目中,可能也会涉及到支付相关的功能.比如:做商城的,做游戏的以及其他在线交易的网站.APP等.如果支付出了问题,或者用户拿少的钱通过篡改请求数据购买大金额的商品,如果是实物的话,发货前还有可能被发现.如果是虚拟商品话费.游戏币等就有可能造成损失. 所以,不管是实物也好,虚拟商品也好,涉及到支付功能时,大家在测试的过程中一定要重视,否则,会造成很大损失.之前可能大家也都看到过或者听过一个bug损失4.6亿美金的惨痛教训或者身边也有发生过其他

Google测试分享-测试经理

首先大家可以思考下,google的测试经理角色必须具备什么样的能力.据不完全统计,google的测试经理,超过一半之前都做过TE的角色(大家可以想想为啥):对于与被测产品相关的任何使用问题,测试经理都应该是专家.所以google对测试经理的期望:相关项目中最强的产品专家.这个时候,大家是否感觉奇怪了,测试人员对业务的了解大家都是认可的,为啥测试经理也是要对业务非常了解呢,测试经理不是安排下测试任务就OK了吗. google认为优秀的测试经理能做到如下几点: (1)了解产品 (2)知人善用 (3)

转:google测试分享-GTA

原文: http://blog.sina.com.cn/s/blog_6cf812be0102viuh.html 上一次分享了google测试分享-分层测试,有很多自动化测试的策略和实施都要有一个重点和计划,那这次会把google是如何来对SUT制定测试计划的分享下. 为了让这些blog分享更有逻辑性,我打算分几个专题来分享google测试相关的测试理念. google测试分享-SET和TE google测试分享-分层测试 google测试分享-GTA google测试分享-测试经理 googl

转:google测试分享-测试经理

原文: http://blog.sina.com.cn/s/blog_6cf812be0102vode.html 前言:这个系列分享的内容大部分都是出自于<google是如何测试的>的书,不是我YY的,我只是大自然的搬用工,希望对大家有那么一点点的用处,当然后面也会有个人的一些想法. 上一次分享了google测试分享-GTA,大概说了下google是如何使用GTA来管理整个测试阶段,特别是测试计划的安排,那这次会聊一聊google测试经理是如何进行团队管理的. 为了让这些blog分享更有逻辑性