当前位置:网站首页>如何模拟后台API调用场景,很细!
如何模拟后台API调用场景,很细!
2022-08-04 16:58:00 【InfoQ】
简介
- 若干 API 的调用顺序是有要求的
- 若干 API 的输入和输出是相互关联的
- 若干 API 需要重复调用达到不同的效果
- 如何从 Postman 迁移至 ApiFox
- 如何使用 ApiFox 实现展示后台 API 的调用场景
Postman 迁移至 ApiFox
结构对比


变量控制
- 支持全局变量
- 支持环境变量及切换


ApiFox 导入 Postman




关于 Script 的导入



ApiFox 展示 API 调用场景
- 无限级别目录
- 动态更新环境变量
- 每个请求支持 pre-processer 和 post-processer 来处理返回数据,理论上支持任何操作
- 测试用例支持添加某个目录来执行
请求的后置脚本
- Game_init: 初始化用户数据
- Game_round: 游戏的玩法很简单,玩家只需要点击一个按钮来进行抽奖,抽奖的结果是随机的,并且可能触发特殊游戏: 比如更换更高级的奖品. API 本身支持调试,就是通过输入参数来返回特定的抽奖结果.
- 调用 Game_init 一次
- 调用 Game_round 多次,直到游戏结束

Game_init
{
"gameId": "{{fe}}",
"player": {
"isDummy": true
}
}
{
"player": {
"playerId": "Demo",
"name": "Demo",
"balance": "1000000",
"balanceRate": "100",
"currency": "FUN",
"isDummy": true
}
}
Game_init
pm.test("Get Response",function () {
var jsonData = pm.response.json();
console.log(jsonData)
// we update playerData in the environment
pm.environment.set('playerData',JSON.stringify(jsonData.player))
});
- 将 API 的返回结果解析为 JSON 数据:
pm.response.json()
- 将 JSON 数据中的
player
信息出处到环境变量中,并且命名为 playerData
: pm.environment.set('playerData',JSON.stringify(jsonData.player))
playerData

Game_round
{
"gameId": "{{fe}}",
"cheat": {
"cheatId": 1
},
"player": {{playerData}},
"betContext": {{betContextData}}
}
{
"player": {
"playerId": "Demo",
"name": "Demo",
"balance": "1015000",
"balanceRate": "100",
"currency": "FUN",
"isDummy": true
},
"betContext": {
"roundsAwarded": 1,
"currentBetMode": "A",
"nextBetMode": "B"
},
"gameRoundResult": {}
}
playerData
betContextData
playerData
betContextData
pm.test("Get Response",function () {
var jsonData = pm.response.json();
console.log(jsonData)
// we update playerData and game context in the environment
pm.environment.set('playerData',JSON.stringify(jsonData.player))
pm.environment.set('betContextData',JSON.stringify(jsonData.betContext))
});
- GameInit游戏初始化
- Round1进入特殊游戏
- Round2特殊游戏奖励
增加断言验证 API
"cheat": {
"cheatId": 1
}
nextBetMode
SpeicalMode
"betContext": {
"roundsAwarded": 1,
"currentBetMode": "A",
"nextBetMode": "SpeicalMode"
}
$.betContext.nextBetMode equl SpeicalMode

pm.expect(pm.response.json()).to.deep.include("xx");
使用测试执行场景 API 序列





newman

apifox run https://api.apifox.cn/api/v1/api-test/ci-config/349571/detail?token=xxxx -r html,cli
总结
作者:孟新
边栏推荐
- 容器化 | 在 NFS 备份恢复 RadonDB MySQL 集群数据
- 并发编程原理学习-reentrantlock源码分析
- Unity Apple登录接入
- 美容院管理系统有哪些促销方式?
- Heilongjiang Mobile New Magic Hundred Box M411A_2+8_S905L3A_wire brush firmware package
- nyist 301 递推求值(矩阵快速幂)
- 移动中兴ZXV10 B860AV2.1-A_S905L2_MT7668_线刷固件包
- 消灭异步回调,还得是async-await
- 力拓信创生态,博睿数据多款产品获得东方通与达梦数据库产品兼容互认证明
- Compose 类型稳定性注解:@Stable & @Immutable
猜你喜欢
【LeetCode每日一题】——374.猜数字大小
智慧场馆的无人值守怎么做?
redis
华为云数据治理生产线DataArts,让“数据‘慧’说话”
Mobile magic box CM201-1_CW_S905L2_MT7668_wire brush firmware package
"Distributed cloud best practices" BBS, on August 11, shenzhen
15天升级打怪,成为虚拟时尚创作者
Minecraft HMCL 使用认证服务器LittleSkin进行登录
并发编程原理学习-reentrantlock源码分析
博云入选Gartner中国云原生领域代表性厂商
随机推荐
Minecraft HMCL 第三方启动器使用教程
水能自发变成“消毒水”,83岁斯坦福教授:揭示冬天容易得流感的部分原因...
WEB 渗透之越权
容器化 | 在 NFS 备份恢复 RadonDB MySQL 集群数据
代码重构:面向单元测试
从-99打造Sentinel高可用集群限流中间件
广东移动魔百盒M411A _905L3_线刷固件包
罗振宇折戟创业板/ B站回应HR称用户是Loser/ 腾讯罗技年内合推云游戏掌机...今日更多新鲜事在此...
浙江数码代工M301H 免拆通刷_卡刷固件包(语音OK)
葫芦娃解析
越来越火的图数据库到底能做什么?
Minecraft 服务器安装Forge 并添加Mod
为什么买域名必须实名认证?这样做什么原因?
机器学习(十四):K均值聚类(kmeans)
SAP ABAP SteammPunk 蒸汽朋克的最新进展 - 嵌入式蒸汽朋克
pygame的freetype模块
码蹄集 - MT2165 - 小码哥的抽卡之旅1
SAP 电商云 Spartacus UI 页面布局的设计原理
接口测试项目(非常值得练手)
ES中同时使用should和must导致只有must生效解决方案