Apifox「动态值」全新升级:灵活mock类型的数据

news2024/11/26 8:46:43

在使用 Apifox 进行接口测试时,你可能不希望将接口参数的值固定,也不想每次发送请求时手动修改数据,而是希望参数值能够自动变化,并且这个参数值能够符合真实场景中的数据需求。比如,你可能需要随机生成数字、字符串、时间戳、电话号码,甚至是一些边界条件的数据。

在这些需要动态生成数据的场景中,你就可以使用 Apifox 的「动态值」功能,它能够为接口参数动态生成多种类型的数据,如枚举值、偏移时间、地址、电话、***号等。通过简单的可视化操作,点击几下即可插入所需的数据类型,无需编写任何脚本。

本文将结合实际场景来详细介绍 Apifox 中「动态值」的使用方法。在开始之前,请确保将 Apifox 更新到了最新版

如何使用 动态值

在请求参数或请求体中,会有一个类似「魔棒」的图标,点击它,即可选择你需要的动态值。

图片

新版 动态值语法

Apifox 新版动态值基于 Faker.js,并且在语法上进行了调整。表达式的基本构成为:

{{$动态值类型}}

其中,{{$ 是动态值的起始标识符,后面跟随的是 Faker.js 中的具体生成函数,但省略了 faker 前缀。例如,生成人名的表达式写法:

  • Faker.js: faker.person.fullName()

  • Apifox: {{$person.fullName}}

你可以通过点击「魔棒」图标选择动态值,也可以手动输入 {{$ 以触发自动补全,选择相应的动态值。

图片

💡 需要注意,旧版动态值使用的是 {% mock 'name' %} 这样的格式,目前仍然兼容旧版语法格式,但后续将逐渐废弃。建议将 Apifox 升级到最新版本,使用新版的语法结构,相比原来的会更加清晰明了。

相较于旧版,新版 Apifox 动态值功能新增的数据类型主要包括:

  • 日期/时间:更强大的时间控制,支持多种日期和时间格式,包括时间偏移、时区处理等复杂时间操作。

  • 辅助函数:提供多种用于数据生成的处理函数,包括正则、自增、枚举等

  • 航空公司:新增用于生成航空公司名称和代码的数据。

  • 动物:新增生成动物名称、品种的 Mock 数据。

  • 商业:新增商业相关数据,如产品品类、材质、价格等。

  • 公司:提供公司名称和标语相关数据。

  • 数据库:新增数据库表名、字段名等数据生成。

  • 金融:新增生成银行信息、金额等财务相关数据。

  • Git:新增与 Git 相关的数据,如分支名称、提交信息等。

  • 音乐:新增生成音乐相关数据,如歌曲名、艺术家名等。

  • 科学:新增与科学相关的数据,如化学元素、单位符号等。

  • 系统:提供系统文件路径、文件名等相关信息的生成。

  • 车辆:新增车辆品牌、制造商等信息的生成。

  • ……

常见的动态值

了解了「动态值」的语法结构之后,下面就来详细介绍一些常用的动态值类型,并提供实际请求示例及生成的结果,帮助你更好地理解和应用动态值。

1  ID 值

在创建用户、订单等资源时,通常需要一个唯一的标识符,如 UUID 或其他类型的 ID 值,确保每次请求都有唯一性。

请求示例:

{  "userId": "{{$string.uuid}}"}

图片

示例生成结果:

{  "userId": "d0491595-e105-4651-9eb9-604b210f8245"}

每次请求都会生成一个唯一的 UUID 作为用户 ID,确保数据不会重复或冲突。

2  枚举值

枚举值用于在一组预定义的选项中随机选取一个值,适合用于测试接口是否能正确处理不同状态或选项。

请求示例:

{  "status": "{{$helpers.arrayElement(['available','pending','sold'])}}"}

图片

示例生成结果:

{  "status": "sold"}

每次请求会从 ['available','pending','sold'] 这三个选项中随机选取一个值。

3  布尔值

在需要测试布尔类型数据的场景下,动态生成 true 或 false 值,例如用户权限验证。

请求示例:

{  "isAdmin": {{$datatype.boolean}}}

图片

示例生成结果:​​​​​​​

{  "isAdmin": false}

随机生成 true 或 false,通常用于测试不同权限的逻辑。

4  当前时间

你可以在接口请求中生成当前的时间或者时间戳,适用于创建时间、事件记录等与当前时间相关的场景。

请求示例 1:生成当前时间​​​​​​​

{  "createdTime": "{{$date.now}}"}

示例生成结果:​​​​​​​

{  "createdTime": "2024-10-08 13:59:43"}

请求示例 2:生成当前时间戳​​​​​​​

{  "createdTime": "{{$date.timestamp}}"}

示例生成结果:​​​​​​​

{  "createdTime": "1728367292"}

该字段会生成当前的 Unix 时间戳,每次请求都会根据当下时间动态变化。

在使用时间类型的动态值时,支持选择时区。

图片

默认时区为「(UTC+08:00)北京时间」,你可以在「项目设置 -> Mock 设置 -> 时间设置」中更改默认时区。

图片

5  偏移时间

除了生成当前时间,你还可以根据需求生成基于当前时间的偏移时间(如未来几小时或过去几天),适合模拟预约时间、订单到期时间等场景。

请求示例 1:生成未来 1 小时的时间​​​​​​​

{  "deliveryTime": "{{$date.now|addHours(1)}}"}

图片

示例生成结果:​​​​​​​

{  "deliveryTime": "2024-10-09 11:31:42"}

请求示例 2:生成下周一的日期​​​​​​​

{  "nextMonday": "{{$date.now|nextMonday}}"}

示例生成结果:​​​​​​​

{  "nextMonday": "2024-10-14 10:41:42"}

请求示例 3:生成上个月最后一天的日期​​​​​​​

{  "lastDayOfLastMonth": "{{$date.now|subMonths(1)|endOfMonth}}"}
  • now:表示当前日期时间。

  • subMonths(1):从当前时间回退一个月。

  • endOfMonth:获取该月最后一天的时间。

图片

示例生成结果:​​​​​​​

{  "lastDayOfLastMonth": "2024-09-30 23:59:59"}

请求示例 4:生成下个月的第一天​​​​​​​

{  "firstDayNextMonth": "{{$date.now|addMonths(1)|startOfMonth}}"}
  • now:表示当前日期时间。

  • addMonths(1):从当前时间向前推一个月。

  • startOfMonth:获取该月份的第一天。

图片

示例生成结果:​​​​​​​

{  "firstDayNextMonth": "2024-11-01 00:00:00"}

6  格式化时间

支持通过动态值生成自定义格式的时间。你可以指定格式来获取符合要求的时间字符串。常用的时间格式包括年、月、日、小时、分钟、秒等,支持使用以下格式符:

  • yyyy:四位数年份

  • MM:两位数月份

  • dd:两位数日期

  • HH:两位数小时

  • mm:两位数分钟

  • ss:两位数秒

请求示例 1:生成格式化的当前时间​​​​​​​

{  "formattedTime": "{{$date.now|format('yyyy-MM-dd HH:mm:ss')}}"}

示例生成结果:​​​​​​​

{  "formattedTime": "2024-10-09 12:08:42"}

请求示例 2:生成当前日期(年-月-日)​​​​​​​

{  "currentDate": "{{$date.now|format('yyyy-MM-dd')}}"}

示例生成结果:​​​​​​​

{  "currentDate": "2024-10-09"}

请求示例 3:生成自定义格式的时间​​​​​​​

{  "customFormatTime": "{{$date.now|format('yyyy/MM/dd HH:mm')}}"}

示例生成结果:​​​​​​​

{  "customFormatTime": "2024/10/09 12:16"}

7  更多日期/时间设置

除了上面列出的一些生成时间的动态值表达式,Apifox 中还内置了其他非常多的日期函数,你可以用这些函数来生成任一时间点的日期,可满足各种复杂场景需求。如下图所示,你可以上下滑动查看:

8 地址

支持生成随机地址数据,帮助模拟用户输入的实际地址。

请求示例:生成城市​​​​​​​

{  "city": "{{$location.city}}"}

图片

示例生成结果:​​​​​​​

{  "city": "长沙市"}

如果要生成「省市区/县街道门牌号」的格式地址,可以通过拼接多个「动态值表达式」来实现。不过,拼接的地址各部分是随机生成的,无法实现二级联动,也就是说,无法根据某一部分的地址信息自动匹配相关的下一级信息。示例:​​​​​​​

{  "shippingAddress": "{{$location.state}}{{$location.city}}{{$location.county}}{{$location.streetAddress}}{{$location.secondaryAddress}}"}

9  图片

在文件上传或处理图片的接口中,可以生成随机图片 URL 来模拟测试。

请求示例:随机生成一张图片的 URL,并要求图片宽高为 300x300​​​​​​​

{  "profileImage": "{{$image.url(width=300,height=300)}}"}

图片

示例生成结果:​​​​​​​

{  "profileImage": "https://loremflickr.com/300/300?lock=8851134520359029"}

10  电话号码

生成随机电话号码用于测试用户注册、联系信息等场景。

请求示例:生成手机号​​​​​​​

{  "phoneNumber": "{{$phone.mobile}}"}

图片

示例生成结果:​​​​​​​

{  "phoneNumber": "18324839879"}

11  身份信息

支持生成随机的身份信息,可设置出生日期的最小年龄和最大年龄。

请求示例:设置年龄最小为 21 最大为 35​​​​​​​

{  "idCard": "{{$person.idCard(minAge=21,maxAge=35)}}"}

图片

示例生成结果:​​​​​​​

{  "idCard": "610102200007309835"}

12  **卡号

生成随机的**卡号,支持设置长度,常用于支付系统或其他涉及金融交易的场景测试。

请求示例:生成 19 位数字的***号​​​​​​​

{  "bankCard": "{{$finance.accountNumber(length=19)}}"}

示例生成结果:​​​​​​​

{  "bankCard": "6962717965512801819"}

13  正则表达式

在动态值中,还可以通过正则表达式生成符合特定规则的数据。比如,生成一个符合某种格式的自定义编码或标识符。

请求示例:​​​​​​​

{  "customCode": "{{$helpers.fromRegExp('/[A-Z]{2}[0-9]{4}[a-z]{2}/')}}"}

图片

示例生成结果:​​​​​​​

{  "customCode": "WA7898ds"}

正则表达式 /[A-Z]{2}[0-9]{4}[a-z]{2}/ 生成了一个符合格式的编码,其中包括两个大写字母、四个数字和两个小写字母。

14  其他边界条件

除了上述常见数据类型外,「动态值」功能还支持生成其他边界条件数据,适合在输入数据需要测试极端情况时使用。

请求示例:​​​​​​​

{  "boundaryValue": {{$helpers.rangeToNumber(min=1,max=100)}}}

图片

示例生成结果:​​​​​​​

{  "boundaryValue": 72}

这里生成了一个 1 到 100 之间的随机整数,适合在数量、范围等参数的边界测试中使用。

以上就是 Apifox 动态值的介绍及用法,你可在各种测试场景下使用,通过简单的可视化操作或使用特定语法插入所需的数据类型即可,更多的使用方法可参考帮助文档的「动态值」模块或「动态值表达式」模块。

更详细的内容可以参考 Apifox 的帮助文档,如果使用中有任何问题或建议,欢迎随时在用户群反馈给我们,我们会持续更新升级,致力于为大家提供更好的使用体验。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2207411.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

90、Python之鸭子类型:for循环的本质,进一步解析迭代协议

引言 在前面的文章中,我们简单介绍了Python中的可迭代对象、迭代器、以及迭代协议的概念。今天就for这个用得特别多,觉得很熟悉很简单的语法结构,稍微展开一下,从而更好地加深对迭代协议的理解。 本文的主要内容有: …

<<迷雾>> 第11章 全自动加法计算机(1)--比特单元 示例电路

具有唯一输入/输出线的存储器 info::操作说明 读取时, 将 读R 开关闭合即可, Q 的输出将通过传输门 G 到达输出 DB 处 写入时, 首先将 写W 开关闭合, 再将上方为测试引入的开关闭合, 此时此高电平将写入 Q 之后断开 写W 的开关, 写入状态结束, 之后可将上方为测试引入的开关断开…

使用MySQL API 进行多线程数据库增删改查操作

使用MySQL API 进行多线程数据库增删改查操作 准备工作安装MySQL Connector/C包含必要的头文件初始化MySQL连接增删改查处理插入数据删除数据更新数据查询数据主函数注意事项在现代的应用程序中,数据库操作往往是性能的关键瓶颈之一。为了提高数据库操作的效率,多线程技术被广…

LeCun数十年经验之谈:视觉是建立AGI的核心,视频理解难点在哪?语言模型技术为何难以复用于视觉?

文字来源 | 夕小瑶科技说 AI寒武纪 大语言模型(LLM)已经接近人类水平,但视觉理解在世界范围似乎尚未突破,那么为何不能直接将LLM技术用于视觉?让AI看视频的难点在哪?如果语言是AGI必要的能力,为…

Flink 批作业如何在 Master 节点出错重启后恢复执行进度?

摘要:本文撰写自阿里云研发工程师李俊睿(昕程),主要介绍 Flink 1.20 版本中引入了批作业在 JM failover 后的进度恢复功能。主要分为以下四个内容: 背景解决思路使用效果如何启用 Tips:点击「阅读原文」跳转…

数据结构实验:用栈求解迷宫问题的所有路径及最短路径

用栈求解迷宫问题的所有路径及最短路径 题目描述 编写一个程序exp3-5.cpp,改进《教程》3.1.4节中的求解迷宫问题程序,要求输 如图3.9所示的迷宫的所有路径,并求第一条最短路径及其长度。 在本实验中用mg作为迷宫数组,用St数组作为顺序栈,Path数组保存一条迷宫径,将它们都设置为…

47 C 语言实战项目——家庭收支记账软件

目录 1 需求说明 1.1 菜单显示 1.2 登记收入 1.3 登记支出 1.4 显示收支明细 1.5 退出 2 流程分析 2.1 总流程图 2.2 登记收入流程图 2.3 登记支出流程图 2.4 收支明细流程图 2.5 退出流程图 3 代码实现 3.1 框架搭建 3.2 收支明细功能 3.3 登记收入功能 3.4 …

解决UOS操作系统vim内容鼠标选中后进入可视模式,无法复制问题

现象: 在 vim 插入模式中右键单击出现可视模式,如下图 解决方法: 1. 编辑文件 rootkylin-PC:~# vi /usr/share/vim/vim81/defaults.vim 改为

ANSYS Workbench多边形骨料及界面过渡区混凝土细观模型

混凝土细观模型是一种用来研究混凝土材料内部结构和性能的分析方法。它主要关注于混凝土中不同组分(如骨料、水泥浆体等)之间的相互作用以及这些相互作用如何影响整体材料的行为。在建立这样的模型时,考虑到多边形骨料及其与周围基质之间形成…

【含文档】基于Springboot+Android的环境保护生活App(含源码+数据库+lw)

1.开发环境 开发系统:Windows10/11 架构模式:MVC/前后端分离 JDK版本: Java JDK1.8 开发工具:IDEA 数据库版本: mysql5.7或8.0 数据库可视化工具: navicat 服务器: SpringBoot自带 apache tomcat 主要技术: Java,Springboot,mybatis,mysql,vue 2.视频演示地址 3.功能 系统定…

Jenkins入门:流水线方式部署多模块Springboot项目

目录 一、环境准备 1. 搭建配置Jenkins (在上一篇基础上进行) 2. 安装mysql 3. 安装redis 4. 配置docker-componse 5. 启动docker-componse 二、脚本准备 1. Jenkinsfile 2. deploy.sh 3. Dockerfile 三、Jenkins流水线配置 新增版本号参数 流水线选择代码里面的Je…

ffmpeg面向对象——rtsp拉流探索(1)

目录 1.tcp创建及链接的流程图及对象图2.解析 标准rtsp协议的基石是tcp,本节探索下ffmpeg的rtsp拉流协议tcp的socket创建及链接。 1.tcp创建及链接的流程图及对象图 tcp创建及链接的流程图,如下: tcp创建及链接的对象图,如下&…

QD1-P15 HTML 文本标签(textarea、label)

本节学习 HTML 常用标签:textarea和label ‍ 本节视频 www.bilibili.com/video/BV1n64y1U7oj?p15 ‍ 知识点1:textarea标签的用途 可输入多行文本的控件 cols属性: 文本的可见宽度 rows属性: 文本的可见行数 HTML示例 &l…

Map父接口

通过API可以详细查看Map接口包含的具体方法。重点的方法包括: 案例一:Map接口的基本使用 package com.map;import java.util.HashMap; import java.util.Map; import java.util.Set;/*** Map接口的使用* 特点:存储键值对;键不能重…

【数据结构】零碎知识点(易忘 / 易错)总结回顾

一、数据结构的概念 数据结构(Data Structure)是计算机存储、组织数据的方式,指相互之间存在一种或多种特定关系的数据元素的集合。 二、算法 算法(Algorithm)就是定义良好的计算过程,它取一个或一组的值为…

Python、R语言Lasso、Ridge岭回归、XGBoost分析Airbnb房屋数据:旅游市场差异、价格预测|数据分享...

全文链接:https://tecdat.cn/?p37839 分析师:Kefan Yu 在大众旅游蓬勃发展的背景下,乡村旅游已成为推动乡村经济、社会和文化发展的关键力量。当前,乡村旅游接待设施主要以招待所、小宾馆和农家乐等形式存在。然而,一…

二叉树改良版——AVL树

为什么说是“改良”,其实标题的二叉树指的是搜索二叉树,它虽然可以缩短查找的效率,但如果数据已经有序或接近有序的话二叉树就会退化成单支树,这样查找元素的话反而会效率低下。因此,为了解决这个问题,AVL树…

zynq 添加lwip库

在自己的项目属性中. 就是在上一行的下面加了一行配置. 多了个 -llwip4 -Wl,--start-group,-lxil,-llwip4,-lgcc,-lc,--end-group

第十四届单片机嵌入式蓝桥杯

一、CubeMx配置 (1)LED配置 (1)LED灯里面用到了SN74HC573ADWR锁存器,这个锁存器有一个LE引脚,这个是我们芯片的锁存引脚(使能引脚),由PD2这个端口来控制的 (2&#xff…

Qt初识_通过代码创建hello world

个人主页:C忠实粉丝 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 C忠实粉丝 原创 Qt初识_通过代码创建hello world 收录于专栏【Qt开发】 本专栏旨在分享学习Qt的一点学习笔记,欢迎大家在评论区交流讨论💌 目录 1.通过按…