# 从发货接口说接口幂等性
## 先说下发货接口的功能
![待发货](screenshot/2020-03-12-23-23-38.png)
可以看到这是一个待发货的订单。熟悉电商流程的都知道,我们在买了东西之后,商家会把货交到快递手中,然后商家将快递单号告知系统。系统进行订单状态的变更。所以下面的操作就顺理成章:
![发货](screenshot/2020-03-12-23-28-13.png)
发货的动作是对应着一个后端接口的。也就是咱们今天要说的接口:order/update/delivery。这是一个POST请求,传入的数据如下:
```json
[
{
"orderId": 13,
"orderSn": "201809150102000002",
"receiverName": "大梨",
"receiverPhone": "18033441849",
"receiverPostCode": "518000",
"address": "广东省深圳市福田区东晓街道",
"deliveryCompany": "顺丰快递",
"deliverySn": null
}
]
```
## 接口的幂等性
从上面的发货接口可以看出来,发货的本质上是对订单状态的更新,而这个更新是一次性的动作,不能每次调用都更新一次。所以幂等通俗的说就是多次调用系统的表现应该是一致的。所以网上很多的例子都是在说扣款。多次扫码只能扣费一次,而不能扣费多次。到这里其实也是一样的。
关于具体的技术文章大家可以参考下面的两篇:
[高并发下接口幂等性解决方案](https://www.cnblogs.com/linjiqin/p/9678022.html)
[再谈幂等机制](https://juejin.im/post/5b134000e51d4506b9429e4a)
## 幂等接口的测试
从上面的表述大家应该可以看出来了。要测试幂等也很容易,就是多调用几下,看看结果是否符合预期。
的确是这样,想到要进行幂等的测试方案,执行就很简单了。而验证也是简单的。
可以看到,我们用postman对接口运行4次,从第二次的结果看就返回500错误了。
![幂等接口的测试](screenshot/2020-03-12-23-38-20.png)
## mall的乐观锁解决方案
为什么会返回500呢?mall项目是如何保证状态的幂等的。我们可以通过源码看到,update order的sql语句中多加了一个where条件:status = 1。就是说当且仅当状态是1-未发货才可以更新为2-已发货,如果已经是2-已发货,或者是其他状态,是不会查询到这条记录的。这样就保证了状态只改变了一次。
## 其他的幂等性校验场景
查询和删除(物理删除)是天然的幂等,而创建和更新操作需要考虑幂等性校验。
## 小结
通过对发货接口的幂等性校验的说明,让大家了解了什么是幂等,怎么设计幂等性场景,以及乐观锁的解决方案。
没有合适的资源?快使用搜索试试~ 我知道了~
基于RestAssured框架的API测试工具.zip
共79个文件
png:56个
md:18个
xml:1个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 166 浏览量
2024-09-08
11:06:06
上传
评论
收藏 6.38MB ZIP 举报
温馨提示
基于RestAssured框架的API测试工具 项目简介 本项目是一个基于RestAssured框架的API测试工具,旨在提供一套完整的API测试解决方案。项目涵盖了从基础的接口测试到高级的性能测试,以及接口测试用例设计、框架搭建和持续集成等多个方面。 项目的主要特性和功能 1. 基础接口测试 使用RestAssured进行基础的GET请求测试。 支持JSON Schema验证,确保API响应结构符合预期。 提供动态查询用户测试,支持基于特定输入参数的条件断言。 2. 工具集成 支持Postman进行功能性测试,包括环境配置、用例集管理、断言和参数化测试。 支持Jmeter进行非功能性测试,如性能测试和负载测试。 3. 测试框架 提供自研接口测试框架,支持多种测试场景和需求。 4. 持续集成 支持接口测试的持续集成,确保测试流程的自动化和高效性。 安装使用步骤
资源推荐
资源详情
资源评论
收起资源包目录
基于RestAssured框架的API测试工具.zip (79个子文件)
performance
lesson12
screenshot
2020-03-11-21-12-24.png 85KB
2020-03-11-21-08-20.png 43KB
README.md 1KB
lesson10
screenshot
2020-03-07-23-11-52.png 101KB
2020-03-07-23-20-08.png 58KB
2020-03-07-23-21-57.png 47KB
2020-03-07-23-25-58.png 145KB
README.md 755B
install-env.md 2KB
lesson14
screenshot
2020-03-12-23-28-13.png 94KB
2020-03-12-23-38-20.png 169KB
2020-03-12-23-23-38.png 38KB
README.md 3KB
lesson11
screenshot
2020-03-08-22-58-33.png 152KB
2020-03-08-22-52-21.png 154KB
2020-03-08-22-56-18.png 249KB
2020-03-08-22-54-53.png 289KB
2020-03-08-22-51-09.png 205KB
2020-03-08-22-53-28.png 117KB
2020-03-08-23-00-18.png 66KB
2020-03-08-22-47-52.png 196KB
README.md 2KB
README.md 2KB
lesson13
screenshot
2020-03-11-22-04-50.png 182KB
2020-03-11-21-59-25.png 176KB
2020-03-11-22-06-21.png 147KB
2020-03-11-21-42-26.png 409KB
2020-03-11-21-43-20.png 45KB
README.md 1KB
basic
lesson1.md 120B
whats-api.md 2KB
tools-intro.md 2KB
LICENSE 1KB
interface-framework
pom.xml 3KB
src
test
resources
user-list-schema.json 2KB
java
com
vaga
api
restAssured
RestAssuredFunctionStudy.java 3KB
postman
lesson4
screenshot
2020-03-01-16-26-09.png 24KB
2020-03-01-16-50-10.png 73KB
2020-03-01-16-50-49.png 70KB
2020-03-01-16-25-12.png 72KB
2020-03-01-16-12-28.png 12KB
README.md 3KB
lesson6
screenshot
2020-03-02-15-37-43.png 87KB
2020-03-02-15-40-39.png 88KB
2020-03-02-15-38-48.png 148KB
2020-03-02-15-47-55.png 93KB
2020-03-02-15-48-53.png 27KB
2020-03-02-15-42-43.png 86KB
2020-03-02-15-47-11.png 51KB
README.md 2KB
lesson2
screenshot
2020-02-29-22-08-00.png 174KB
2020-02-29-22-19-32.png 78KB
2020-02-29-22-06-56.png 160KB
2020-02-29-22-06-21.png 936KB
2020-02-29-22-07-27.png 176KB
2020-02-29-22-08-19.png 248KB
README.md 2KB
lesson7
screenshot
2020-03-02-16-42-17.png 69KB
2020-03-02-17-20-56.png 82KB
2020-03-02-16-41-41.png 68KB
2020-03-02-17-22-06.png 134KB
2020-03-02-16-43-16.png 132KB
2020-03-02-16-41-11.png 91KB
user-data.csv 95B
README.md 2KB
lesson3
screenshot
2020-02-29-22-20-57.png 62KB
2020-02-29-22-17-02.png 203KB
2020-02-29-22-28-47.png 67KB
2020-02-29-22-20-03.png 63KB
README.md 2KB
lesson5
screenshot
2020-03-01-17-01-17.png 52KB
2020-03-01-16-54-27.png 136KB
2020-03-01-17-01-10.png 10KB
2020-03-01-17-00-33.png 112KB
2020-03-01-17-01-34.png 111KB
2020-03-01-16-53-45.png 95KB
README.md 1KB
README.md 2KB
README.md 2KB
共 79 条
- 1
资源评论
t0_54coder
- 粉丝: 2375
- 资源: 1629
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 基于Flask框架的JavaScript、HTML、CSS、Python整合的天气系统设计源码
- ad7606_drv.h
- 基于YOLOv5的工地安全帽识别及危险区域禁入系统设计源码
- 基于Alberto Abadie理论的Penalized Synthetic Control方法设计源码
- Reality安全下载.apk
- 基于Java语言的ape-club程序员社区交流平台设计源码
- 12864yejin.OBJ
- AirportItlwm-v2.3.0-stable-Sonoma14.0.kext.zip
- BOOT-00001前后端分离个人财务管理系统源码+数据库.rar
- Python自动化管理文件技术指南:读写操作、文件夹管理与压缩功能
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功