如何使用 Postman 模拟服务器

Posted

技术标签:

【中文标题】如何使用 Postman 模拟服务器【英文标题】:How to use a Postman Mock Server 【发布时间】:2017-11-14 21:03:32 【问题描述】:

我已关注the guide here to create a postman mock 进行邮递员收藏。模拟似乎创建成功,但我不知道如何使用模拟服务。

我已经获得了模拟的 url,但是如何指定我的请求之一?如果我向https://mockid.mock.pstmn.io 发出 GET 请求,我会收到以下响应:


    "error": 
        "name": "mockRequestNotFoundError",
        "message": "We were unable to find any matching requests for the mock path (i.e. undefined) in your collection."
    

根据same guide mentioned above 的以下网址“运行模拟”https://mockId.mock.pstmn.io/mockPath 但究竟是什么mockPath

在我的收藏中,我有很多文件夹,在其中一个文件夹中,我有一个带有示例响应的请求。如何通过模拟访问此示例响应?提前感谢所有帮助!

Here's the Postman Pro API,除了创建阅读模拟之外并没有提及更多内容。

【问题讨论】:

我也想知道,Postman Mock 服务器实际上是如何将请求 URL 映射到 mockPath 的?它是否假设所有请求 URL 具有相同的域并且只是将路径映射到 mockPath?如果我在给定集合中有不同的域,那我会使用什么mockPath @PetrusK。 - 当前模拟不区分集合中的域。如果多个示例命中相同的 http 动词、路径和 x-mock-response-code,它将确定性地按顺序返回第一个。 @PratikMandrekar 这是否意味着如果多个文件夹包含完全相同的请求(我的意思是请求 URL),它也会确定性地按顺序返回第一个?例如,我们在整个文件夹中使用相同的请求 url(但具有不同的正文数据)。 @JimAho - 是的,响应将是确定性的。如果它为一个 URL 返回一个响应,它将在下一次也为同一个集合返回相同的响应。 【参考方案1】:

mockPath 只是您请求的路径。您应该首先为您的任何请求添加一个示例。

例子:

请求:https://www.google.com/path/to/my/api

添加模拟服务器后,您可以访问您的示例:

https://mockId.mock.pstmn.io/path/to/my/api

【讨论】:

【参考方案2】:

如果您有多个相同查询的示例:

模拟请求接受另一个可选标头x-mock-response-code,它指定您返回的响应应该匹配哪个整数响应代码。例如,500 将仅返回 500 响应。如果未提供此标头,则将返回与任何响应代码最接近的匹配项。

诸如 x-mock-response-name 或 x-mock-response-id 之类的可选标头允许您分别通过名称或已保存示例的 uid 进一步指定所需的确切响应。

Here's 文档了解更多详情。

【讨论】:

【参考方案3】:

我遇到了同样的问题,看到一个不相关的错误,但最终我找到了解决方案。不幸的是,我在 Postman 网站上找不到参考资料。但这是我的解决方案:

当您创建一个 Mock 服务器时,您定义了您的第一个请求(如 GET api/v1/about)。因此将创建 Mock 服务器,但即使您获得 API 密钥并将其放入请求的标头(如 x-api-key)中,它仍然会返回错误。这没有意义,但事实证明定义请求是不够的。对我来说,它只是在我为请求添加示例时才开始返回响应。

所以我建议对于您创建的每个请求,也至少创建一个示例。您发送的请求将与您创建的示例匹配,并返回匹配的响应。 您可以定义示例响应的 bodyheaders 和 HTTP status 代码。

我没有 Pro Postman 订阅,使用我的免费订阅对我有用。

用于添加示例或选择其中一个进行编辑的菜单:

用于定义示例的 UI(参见正文、标题和状态):

如何返回请求页面:

这是根据我的示例得到的正确回复:

【讨论】:

如果应用程序代码进行 api 调用,有谁知道如何指定应该运行哪个示例?现在看起来第一个创建的会运行,但有什么办法可以改变它吗? 无法理解如何将标题添加到预设响应中【参考方案4】:

如果您在示例中的请求是 api.domain.com/api/foo 上的 GET,则 mockPath 是 /api/foo,而您的模拟端点是 GEThttps://mockid.mock.pstmn.io/api/foo 的调用。

HTTP request methods 和下图所示的路径名构成一个模拟。

为了便于使用,模拟服务器被设计为在集合之上使用。 examples 中的请求与附加的响应一起使用。文件夹或集合的名称不是路径名的一部分,并且在使用模拟时不会在任何地方考虑。模拟集合意味着模拟集合中的所有示例。一个例子是请求和响应的元组。

如果指定了可选的响应状态代码,您可以获取相同路径的适当响应。这可以使用 x-mock-response-code 标头指定。因此,将x-mock-response-code 传递为404 将返回与路径名匹配的示例,并且响应的状态码为404

目前,如果存在路径相同但域不同的示例,并且 mock 无法区分它们,它将确定性地返回第一个。

【讨论】:

我的收藏中有几个文件夹,每个文件夹都可以很好地包含与其他文件夹相同的请求。所以假设我有两个对api.domain.com/api/foo 的请求,模拟如何知道要选择哪个请求? @JimAho 两个文件夹之间的请求有什么区别?两个不同文件夹中的类似请求的行为有何不同? 没有什么能区分它们,我复制它们的原因是因为当我使用邮递员运行器功能并定位一个集合和文件夹时,我希望它包含所有必要的请求。它们的行为并没有什么不同,但其中只有一个可能保存了示例请求(据我所知,这是 Mock Server 使用的)。 是的,通过这种安排,使模拟按预期运行应该没有问题。

以上是关于如何使用 Postman 模拟服务器的主要内容,如果未能解决你的问题,请参考以下文章

如何使用Postman调试HMS Core推送接口?

如何查看进入我的 Postman 模拟服务器的请求?

工具使用Postman 模拟服务给请求返回响应数据

工具使用Postman 模拟服务给请求返回响应数据

如何在 Postman 中删除会话 cookie?

如何在 Postman 中使用 SendGrid 的 Inbound Parse Webhook 示例?