创建动态模拟响应(Mock Responses)
你可以使用 集合示例来定义 模拟服务器 返回的静态响应。但是,在某些情况下,你可能希望模拟服务器返回包含变量或随机数据的动态响应。你可能还希望模拟服务器返回对你的请求的上下文响应。使用动态模拟响应,你可以模拟各种场景,而无需为每个场景创建示例。
在模拟服务器中使用变量
变量 使你能够存储值并在你的请求和集合示例中使用它们。如果更改变量的值,则在变量出现的任何地方都使用新值。
Postman 模拟服务器支持 环境变量 和 集合变量 。(模拟服务器不支持使用全局变量。)
- 要使用环境变量,请在模拟服务器的配置 中选择环境。
- 要使用集合变量,请在 你正在模拟的 集合的“变量”选项卡上定义它们。
当你在示例中使用环境变量或集合变量时,模拟服务器会解析变量并将其替换为变量的初始值。如果环境变量和集合变量同名,Postman 将使用环境变量。 了解有关变量范围 的更多信息。
如果将模拟服务器的 URL 保存到 变量 中,则可以跨请求引用它。例如,如果你有一个生产服务器和一个模拟服务器,你可以为每个服务器创建一个 环境。 在每个环境中,为模拟 URL 创建一个同名的变量。通过在请求中使用变量,你可以在两个环境之间切换以调用生产服务器或模拟服务器。
使用动态变量生成随机数据
要让模拟服务器返回随机数据,请在示例的响应主体中使用 动态变量。 动态变量作为模拟服务器响应的一部分进行解析,并替换为随机数据。动态变量对于在模拟 API 时生成随机数据很有用。使用它们进行探索性测试和编写丰富的数据驱动测试。
例如,你的示例的响应正文可能包含如下动态变量:
{
"name": "{{$randomFullName}}",
"userName": "{{$randomUserName}}",
"location": "{{$randomCity}}",
"company": "{{$randomCompanyName}}",
"jobTitle": "{{$randomJobTitle}}",
"updatedAt": "{{$timestamp}}"
}
当你调用模拟服务器端点时,响应数据将更改为如下内容:
{
"name": "Cielo McClure",
"userName": "Aurelie.Lockman",
"location": "Kubhaven",
"company": "Runolfsdottir, Bernhard and Hodkiewicz",
"jobTitle": "Direct Branding Liaison",
"updatedAt": "1565088856"
}
有关用于生成随机数据的动态变量的完整列表,请参阅 动态变量。
生成上下文模拟响应
借助模板支持,Postman 模拟服务器可以根据传入请求生成不同的响应。模板助手使你可以访问传入请求中的数据,例如正文、查询参数、路径段和 header。你可以将该数据包含在模拟服务器发送的响应中。
使用模板助手
要创建上下文响应,请将一个或多个模板助手添加到模拟集合中的示例。你可以在示例中使用以下模板助手:
$body
- 访问传入请求的主体$queryParams
- 访问传入请求的查询参数$pathSegments
- 访问传入请求的路径段(例如/product/id/details
)$headers
- 访问传入请求的 header
使用 对象路径 语法访问助手中的特定值。你还可以为助手定义一个默认值,以防模拟服务器无法解析该变量。下表显示了你可以在示例中使用助手的一些方法。
模板助手 | 数据返回 |
---|---|
{{$body}} | 返回完整的请求体 |
{{$body 'path.to.property'}} | 从请求正文中返回特定属性的值 |
{{$headers 'header-key'}} | 返回特定请求头的值 |
{{$queryParams 'parameter-key'}} | 返回特定查询参数的值 |
{{$pathSegments '1'}} | 返回请求路径的第二段(例如,如果请求路径为/product/12345/details return 12345 ) |
{{$body 'property' 'default value'}} | 定义属性的默认值 |
{{$body 'a\.a'}} | 返回键名中a.a 带点 ( )的属性的值. |
上下文响应示例
此示例展示了如何使用模板助手从传入请求的主体访问数据并在来自模拟服务器的响应中返回该数据。
在模拟集合中,使用以下正文数据 创建一个新请求:
{
"username": "postman",
"password": "12345"
}在请求中 添加示例。 然后将以下正文数据添加到示例中。模板
{{$body}}
助手用于访问username
值:{
"username": {{$body 'username' 'postman'}},
"id": {{$randomUUID}}
}username
在请求正文中使用不同的值 将请求发送到模拟服务器。例如,如果你发送以下请求正文:
{
"username": "s-morgenstern",
"password": "12345"
}然后模拟服务器将返回一个响应,其中包含
username
来自传入请求的值:{
"username": s-morgenstern,
"id": c90df098-1dd7-4160-afe3-f053bf7aa43f
}