动态值
在 Apifox 中调试接口时,如果经常需要在请求参数、请求体中构造值、名称、地址或其他数据,这时“动态值”功能就派上用场了。
动态值允许你在每次发送请求时,根据预定义的规则生成一个新值。这有助于简化调试过程,并确保每个请求包含唯一的数据。
应用场景
动态值在 API 测试中有广泛的应用。以下是一些典型示例:
- 模拟真实数据: 你需要测试你的 API 如何处理不同类型的数据,例如各种格式的用户名、地址或电子邮件地址。使用动态值,你可以轻松生成大量类似于真实场景的测试数据,从而提高测试覆盖率。
- 生成唯一值: 在某些测试场景中,你需要确保数据的唯一性,例如生成订单号、用户 ID 或交易 ID。动态值可以根据时间戳或随机数生成唯一值,防止数据冲突并确保测试结果准确。
- 简化数据处理: 不需要为每次测试运行手动修改数据,使用动态值自动生成所需的数据。这可以节省你大量的时间和精力,提高测试效率。
使用入门
Apifox 版本号需
>=2.6.15
在接口中,切换到“运行”选项卡。
对于要动态化的参数,可以先删除原始值,然后单击值右侧的 魔棒 图标。
单击“数据生成器”,然后选择所需的动态值类型,例如
名字
。单击“插入”将动态值表达式插入到参数中。
单击“发送”,你可以在“实际请求”中看到发送的实际名称。
再次发送请求,将动态生成一个新的名字。
旧版的动态值表达式是形如{% mock 'name' %}
的形式,这种使用方式后续将会废弃。建议你将 Apifox 升级到最新版本,并开始使用新版的动态值表达式。
在 JSON 请求体中使用动态值
如果需要发送 JSON 请求体,并且 JSON 中的某些值需要动态生成,你也可以使用动态值。
找到一个带有 JSON 请求体的 POST 接口,并切换到运行选项卡。
在 JSON 请求体中,单击“自动生成 - 仅生成字段名”,你将获得在 API 文档中定义的属性名称。
将光标定位在正确的位置,单击“动态值”,然后选择“数据生成器”。
选择适当的数据类型,然后单击“插入”。
为所有字段添加值。
单击“发送”。你可以在“实际请求”部分中看到实际发送的 JSON 请求体。
如果再次发送请求,动态值将生成新的 JSON 请求体。
在自定义表达式中使用动态值
如果需要自定义一串信息,并且信息中有一些值需要动态生成,你还可以单击“自定义表达式”并输入动态值表达式。自定义表达式是遵循 Nunjucks 模板引擎语法的,你可以查阅他们的文档。
单击“动态值”图标,然后选择“自定义表达式”以打开输入框。
通过拼接等方法输入“动态值表达式”来生成预期内容,你可以在下方实时预览生成的信息。
单击“插入”,你可以在参数值部分看到自定义表达式。
除此之外,你还可以使用 Nunjucks 模板引擎语法来辅助生成。 例如:
{% for i in range(0, 20) %}
{
"id": {{i}},
"firstname": "{{$person.firstName}}",
"lastname": "{{$person.lastName}}"
}{% if i!=19 %},{% endif %}
{% endfor %}这将生成 20 个随机用户数据,其中包含随机的名字和姓氏。
以下是常见的自定义表达式举例,你还可以点击“动态值表达式”模块查看更多详情。
期望的自定义内容 | 自定义表达式 | 示例返回内容 | 方法拼接方式及含义 |
---|---|---|---|
随机带时间戳的用户名 | {{$internet.userName}}_{{$date.now}} | Bennie_Von82_2024-09-05T01:01:13.872Z | 使用 {{$internet.userName}} 生成随机用户名,使用 {{$date.now}} 获取当前时间,并使用模板字符串拼接。 |
随机带公司域名的邮箱地址 | {{$person.firstName}}.{{$person.lastName}}@{{$company.name | lower}}.com | 晟睿蹇@福建省俊驰电力股份有限公司.com | 使用 {{$person.firstName}} , {{$person.lastName}} 生成随机姓名, 使用 {{$company.name | lower}} 生成公司名,并转换为小写后拼接成邮箱地址。 |
随机带街道号和房间号的地址 | {{$location.buildingNumber}} {{$location.street}}, Apt. {{$number.int(min=1,max=1000)}}, {{$location.city}}, {{$location.state(abbreviated=true)}} {{$location.zipCode}} | 23161 道路, Apt. 748, 上乡县, 广东 419632 | 使用多个方法生成详细地址,包括街道号、街道名、房间号、城市、州和邮编。 |
随机带行业和公司类型的公司名 | {{$company.buzzAdjective}} {{$company.buzzNoun}} {{$company.name}} | 行业领先的 模式 广西壮族自治区致远矿业有限公司 | 使用 company 方法生成带行业描述和公司类型的公司名。 |
随机过去一年内的日期 | {{$date.past(years=1)}} | 2023-11-16 03:05:24 | 使用 {{$date.past(years=1)}} 方法生成过去一年的随机日期 |
随机带货币符号的价格 | {{$finance.currencySymbol}}{{$commerce.price}} | $938.50 | 使用 {{$finance.currencySymbol}} 生成随机货币符号,使用 {{$commerce.price} 生成随机价格,并拼接。 |
随机产品描述 | {{$commerce.productAdjective}} {{$commerce.productMaterial}} {{$commerce.product}} - {{$lorem.sentences(min=2,max=4)}} | "Small Wooden Pizza - Thema copiose dens adinventitias a. Causa uxor terreo defleo vitiosus animi. Ademptio possimus decet considero absorbeo sursum rem circumvenio antiquus curatio. Adipisci addo tredecim carbo." | 使用 {{$commerce.productAdjective}} 和 {{$lorem.sentences(min=2,max=4)}} 方法生成包含产品特征和描述的文本。 |
随机带标签的句子 | #{{$lorem.slug(min=1,max=3)}} {{$lorem.sentence(min=1,max=3)}} | #tyrannus-tergeo 将离。 | 使用 {{$lorem.slug(min=1,max=3)}} 生成随机标签,并拼接在句子前面。 |
随机带端口号的 IP 地址 | {{$internet.ipv4}}::{{$number.int(min=1024,max=65535)}} | 121.216.167.236::8046 | 使用 {{$internet.ipv4}} 生成随机 IP 地址,使用 {{$number.int(min=1024,max=65535)}} 生成端口号,并拼接。 |
随机带查询参数的 URL | {{$internet.url}}?{{$lorem.slug}}={{$lorem.word}} | https://whopping-tenant.net?capillus-eaque-venia=管 | 使用 {{$internet.url}} , {{$lorem.slug}} 和 {{$lorem.word}} 生成带随机查询参数的 URL。 |
随机文件路径 | /path/to/{{$lorem.slug}}/{{$system.fileName}} | /path/to/crepusculum-attonbitus-tantillus/__.jar | 使用 {{$lorem.slug}} , {{$system.fileName}} 和字符串拼接生成随机文件路径。 |
随机数据库表名 | table_{{$string.alphanumeric(length=5)|lower}} | table_ha7it | 使用 {{$string.alphanumeric(length=5) | lower}} 生成随机字符串,拼接成数据库表名。 |
随机 HTML 代码片段 | <p>{{$lorem.sentence}} <a href="{{$internet.url}}">{{$lorem.word}}</a></p> | <p>区就高龙元达。 <a href="https://faraway-teriyaki.com">世</a></p> | 使用 {{$lorem.sentence}} 和 {{$internet.url}} 生成包含链接的随机 HTML 代码片段。 |
随机 HTTP 请求头 | { "User-Agent": {{$internet.userAgent}}, "Referer": {{$internet.url}} } | { "User-Agent": Opera/14.80 (Macintosh; Intel Mac OS X 10.9.9 U; ET Presto/2.9.182 Version/12.00), "Referer": https://twin-plumber.org } | 使用 {{$internet.userAgent}} 和 {{$internet.url}} 生成包含 User-Agent 和 Referer 的随机 HTTP 请求头。 |
手动插入动态值
在需要插入动态值的输入字段中,你可以输入 {{$
来触发动态值列表。
你可以使用以下方法快速定位所需的变量:
- 完整输入: 准确输入完整的动态值名称,例如
$timestamp
。 - 模糊匹配: 输入部分关键词,例如
time
,系统会自动过滤并显示匹配的动态值。
选择目标动态值将其插入到输入字段中。
数据生成器
使用数据生成器,你可以根据需要生成任何自定义数据。
将鼠标悬停在参数输入字段上,单击出现的魔棒图标以打开“数据生成器”面板。
你可以在面板中使用两种方法找到所需的动态值:
按变量类型搜索: 通过选择动态值类型(例如日期、字符串、数字等)快速定位所需的变量范围,提高搜索效率。
按关键词搜索: 在顶部的“类型”输入框中输入关键词(例如时间、字符串等),系统会自动过滤并显示匹配的动态值,方便你快速定位。
选择所需的动态值后,你可以通过以下操作对其进行进一步的细化,以满足更精细的数据生成需求:
添加方法: 一些动态值支持附加方法,例如
{{$date.now}}
可以使用addDays
方法添加天数以生成特定日期的数据。添加处理函数: 所有动态值结果都可以使用函数进行处理,例如,使用
md5
函数对字符串进行加密以生成满足安全要求的测试数据。
“表达式”区域清楚地显示你当前选择的动态值类型、方法和函数,方便你进行检查和修改。
“预览”区域实时显示动态值生成的示例数据。单击“预览”区域末尾的“刷新”按钮可以生成新的示例数据,方便你查看数据生成的效果。
单击“预览”区域中的示例数据可以自动复制内容,方便你将其粘贴到需要的位置。
设置数据语言/国家
Apifox 的动态值支持生成不同语言的示例数据,以满足你在多语言环境中的测试需求。操作方法如下:
打开“数据生成器”面板。
对于“日期”和“时间”以外的动态值类型,单击动态值类型右上角的切换组件,然后选择相应的目标语言即可。
对于“日期”和“时间”的动态值类型,你可以使用
format
和locale
方法指定语言和格式。
强大的日期操作和格式化
Apifox 不仅仅提供丰富的日期和时间动态值,它还致力于简化你的开发过程。以下是你可以轻松实现的一些功能:
灵活的时间调整: 使用
add
方法,你可以轻松地根据当前时间添加或减去时间单位。例如,{{$date.now|addHours(-3)}}
将返回比当前时间早 3 小时的日期。
多样化的日期格式化: 使用
format
方法,你可以根据需要将日期格式化为不同的格式。例如,{{$date.now|formatISO}}
将根据 ISO 8601 标准格式化日期。精确的时区控制: 通过设置
timezone
参数,你可以轻松控制日期的时区。例如,{{$date.now|format('yyyy-MM-dd HH:mm:ss',timezone='America/Port-au-Prince')}}
将返回UTC+8:00
时区中当前时间对应的日期。
常见动态值
为了帮助你更好地使用 Apifox 动态值,我们整理了完整的动态值清单和示例说明。你可以点击“动态值表达式”模块查阅,快速找到你需要的动态值及其使用方法。
你也可以在 Apifox 内,将鼠标悬停在动态值表达式上,查看该动态值的简要说明和示例。