跳到主要内容

动态值

在 Apifox 中调试接口时,如果经常需要在请求参数、请求体中构造值、名称、地址或其他数据,这时“动态值”功能就派上用场了。


动态值允许你在每次发送请求时,根据预定义的规则生成一个新值。这有助于简化调试过程,并确保每个请求包含唯一的数据。

应用场景

动态值在 API 测试中有广泛的应用。以下是一些典型示例:

  • 模拟真实数据: 你需要测试你的 API 如何处理不同类型的数据,例如各种格式的用户名、地址或电子邮件地址。使用动态值,你可以轻松生成大量类似于真实场景的测试数据,从而提高测试覆盖率。
  • 生成唯一值: 在某些测试场景中,你需要确保数据的唯一性,例如生成订单号、用户 ID 或交易 ID。动态值可以根据时间戳或随机数生成唯一值,防止数据冲突并确保测试结果准确。
  • 简化数据处理: 不需要为每次测试运行手动修改数据,使用动态值自动生成所需的数据。这可以节省你大量的时间和精力,提高测试效率。

使用入门

Apifox 版本号需 >=2.6.15


  1. 在接口中,切换到“运行”选项卡。

  2. 对于要动态化的参数,可以先删除原始值,然后单击值右侧的 魔棒 图标。

    单击值右侧的魔棒图标

  3. 单击“数据生成器”,然后选择所需的动态值类型,例如名字

    选择数据生成器类型

  4. 单击“插入”将动态值表达式插入到参数中。

    插入动态值

  1. 单击“发送”,你可以在“实际请求”中看到发送的实际名称。

    发送请求

  2. 再次发送请求,将动态生成一个新的名字。

提示

旧版的动态值表达式是形如{% mock 'name' %}的形式,这种使用方式后续将会废弃。建议你将 Apifox 升级到最新版本,并开始使用新版的动态值表达式

在 JSON 请求体中使用动态值

如果需要发送 JSON 请求体,并且 JSON 中的某些值需要动态生成,你也可以使用动态值。


  1. 找到一个带有 JSON 请求体的 POST 接口,并切换到运行选项卡。

  2. 在 JSON 请求体中,单击“自动生成 - 仅生成字段名”,你将获得在 API 文档中定义的属性名称。

    生成字段名称

  3. 将光标定位在正确的位置,单击“动态值”,然后选择“数据生成器”。

    插入动态值

  4. 选择适当的数据类型,然后单击“插入”。

  5. 为所有字段添加值。

  6. 单击“发送”。你可以在“实际请求”部分中看到实际发送的 JSON 请求体。

    发送请求

  7. 如果再次发送请求,动态值将生成新的 JSON 请求体。

在自定义表达式中使用动态值

如果需要自定义一串信息,并且信息中有一些值需要动态生成,你还可以单击“自定义表达式”并输入动态值表达式。自定义表达式是遵循 Nunjucks 模板引擎语法的,你可以查阅他们的文档。

  1. 单击“动态值”图标,然后选择“自定义表达式”以打开输入框。

    自定义表达式

  2. 通过拼接等方法输入“动态值表达式”来生成预期内容,你可以在下方实时预览生成的信息。

    自定义表达式

  3. 单击“插入”,你可以在参数值部分看到自定义表达式。

    插入动态值

  4. 除此之外,你还可以使用 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 的动态值支持生成不同语言的示例数据,以满足你在多语言环境中的测试需求。操作方法如下:

  1. 打开“数据生成器”面板。

  2. 对于“日期”和“时间”以外的动态值类型,单击动态值类型右上角的切换组件,然后选择相应的目标语言即可。

    切换语言

  3. 对于“日期”和“时间”的动态值类型,你可以使用 formatlocale 方法指定语言和格式。

    指定语言和格式

强大的日期操作和格式化

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 内,将鼠标悬停在动态值表达式上,查看该动态值的简要说明和示例。