Jmeter 测试API接口 查看接口的幂等问题

本文探讨了在高并发环境下,注册接口如何处理手机号码重复问题,并深入讨论了接口幂等性的重要性及其对数据库的影响。文章还介绍了几种解决并发注册问题的方法。

背景介绍:

比如一个注册接口,要求填入的手机号与DB中已有的不能重复,

如果手机号码重复,则此次注册失败,不会新增会员数据;

如果不重复,则注册成功(忽略其他因素)。

 

但是用20个并发,同样的请求,请求body中手机号码完全一样,一起进行注册,接口会怎样?

 

幂等性:就是用户对于同一操作发起的一次请求或者多次请求的结果是一致的,不会因为多次点击而产生了副作用。

举个最简单的例子,那就是支付,用户购买商品使用约支付,支付扣款成功,但是返回结果的时候网络异常,此时钱已经扣了,用户再次点击按钮,此时会进行第二次扣款,返回结果成功,用户查询余额返发现多扣钱了,流水记录也变成了两条...

 

如果接口没有考虑幂等性,会导致上述的20个请求,处理结果是大于1条的数据成功插入DB中,且发现手机号码再DB中重复了;

我们做接口功能测试的时候,比如注册接口,异常请求是,请求注册的手机号存在DB中,验证返回xxx且注册不成功。功能测试的时候,单个这个的请求,代码的确能处理,遇到多并发的时候,可能就处理不好了。

说白了,就是有bug。

 

首先思考一下接口的幂等性对接口的影响?

如果是查询接口,select语句,那不会影响DB中的数据;

如果是新增接口,insert语句,必然影响;

如果是更新接口,update语句,将某个字段更新的时候。。。。。。

 

请问要怎么解决?

请不要回答加思考时间等,此问题是问架构或者注册数据要怎么存入DB

 

https://www.cnblogs.com/qianjinyan/p/9051862.html

我之前遇到的case,20个请求同时成功,DB中新增了20个手机号码为一样数据的人。

查询的时候DB中还没有此手机号,但是注册的时候,在同时的时间,

一致性的问题怎么解决?

 

不要告诉我,mobile字段用bigint数据类型,还不能重复的限制deal with在了DB中~~

 

 

我们生产上的系统遇到过这个问题,会员通过微信小程序注册,注册成功了,后来立即收到两条短信,短信里面含有注册卡号;

我作为测试,重现了场景,对PM说,我们接口没有做成幂等性的接口;

PM看我的眼神?,“说什么,瞎逼逼呢”,然后。。。。 就没有然后了,让前端UI们检查注册的提交按钮是否能被重新提交,或是失败有无重新调用接口情况。

UI部门忙了一阵,也没有声音了,最终做了,还是没做,我不清楚,我测后端接口,我知道接口没动。

 

后来我自己看了其他项目的处理方式,

有通过存储过程的方式,

就是调用接口的时候,调用存储过程,存储过程中加个锁,下次把代码贴上来。

转载于:https://www.cnblogs.com/qianjinyan/p/9123168.html

### 如何测试API接口幂等性 #### 幂等性的定义 幂等性是指同一个操作多次执行所产生的影响相当于一次执行。对于HTTP请求来说,GET、PUT和DELETE方法应当具有幂等性,即无论调用多少次,资源的状态不会发生改变[^1]。 #### 测试幂等性的最佳实践 为了验证API接口是否满足幂等性,在设计测试案例时应考虑以下几点: - **选择合适的HTTP动词**:确保所使用的HTTP方法符合RESTful原则中的幂等性要求。例如,POST通常用于创建新资源,不是等的操作;而PUT则用来更新现有资源,应该是等的。 - **构建重复请求场景**:构造一系列相同的请求来模拟客户端可能会发送的情况。这可以通过编写自动化脚本完成,也可以借助专门的压力测试工具实现。 - **检查响应的一致性**:每次发出相同类型的请求之后,服务器返回的结果应该保持一致(除非涉及到时间戳或其他动态变化的数据)。如果连续两次以上的同样请求得到了不同结果,则说明该接口不具备良好的等特性。 - **观察副作用的存在与否**:除了直接查看API本身的输出外,还需要关注是否有其他未预期的变化发生在系统内部或外部依赖的服务上。比如数据库记录数目的增减、消息队列长度的变化等都可能是非等因素的表现形式。 ```bash curl -X PUT https://api.example.com/resource/1 \ -H "Content-Type: application/json" \ -d '{"key":"value"}' ``` 上述命令展示了如何向指定URL发起一个带有JSON负载的PUT请求。要检验其幂等性质,可以在短时间内对该地址做多轮同样的修改尝试,并确认最终状态始终指向同一版本的内容。 #### 使用工具辅助测试 有许多现成的工具可以帮助开发者更轻松地进行幂等性测试工作,其中包括但不限于: - **Postman**:支持录制会话并自动生成代码片段的功能,允许用户快速设置复杂的请求序列来进行批量处理。 - **JMeter**:Apache JMeter是一个开源性能测试框架,能够配置并发线程组以模拟大量用户的活动模式,非常适合于评估高负荷条件下系统的稳定性以及检测潜在的安全漏洞。 - **RestAssured (Java)**:这是一个专门为Java项目准备的库,旨在简化Web服务端点交互过程的同时也提供了丰富的断言机制以便更好地控制质量保证流程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值