首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何配置我的Postman模拟服务器响应,使其始终返回两天前的日期?

如何配置我的Postman模拟服务器响应,使其始终返回两天前的日期?
EN

Stack Overflow用户
提问于 2021-10-12 21:12:55
回答 2查看 346关注 0票数 4

在我的Postman模拟服务器中,我设置了一个返回JSON的GET请求,其中返回了以下内容

代码语言:javascript
复制
“due_date":"2021-10-10"

我想要的是调整响应,以便返回的日期是过去的两天。因此,如果今天是“2021-10-10”,我希望响应包含

代码语言:javascript
复制
“due_date":"2021-10-08”

如果今天是“2022-01-01”,我希望响应包含

代码语言:javascript
复制
“due_date":"2021-12-30”

诸若此类。如何设置Postman模拟服务器请求以返回此类数据?

EN

回答 2

Stack Overflow用户

发布于 2021-10-13 08:11:45

我认为这是一个很好的问题,而且我很好奇,所以我做了一些研究,并找到了一个解决这个问题的。这有点复杂。我不确定这样做是否值得。

首先,Postman Mock Server (简称Mock Server)不能执行任何测试和前置脚本,因此它无法计算东西。这里你需要一个计算,那么你打算怎么做?那么,您可以为Mock Server定义一个environment,它使您能够在模拟响应中使用动态值。

我将继续一步一步地展示这个过程。

1 -使用以下环境打开模拟服务器:

1.1 -为新的模拟服务器创建一个集合:

您的模拟响应将如下所示:

代码语言:javascript
复制
{"due_date": "{{date}}"}

1.2 -创建环境:

1.3 -完成创建:

Postman 1.4-完成后,创建如下所示的集合:

Mock 1.5 -你可以从这个集合中测试你的模拟服务器:

如您所见,Mock Server在其响应中使用环境变量。

现在,我们必须弄清楚如何更新环境变量。

您必须使用外部服务来更新您的环境变量。您可以将Postman Monitor用于此作业,因为它可以执行测试(意味着任何代码),并且其工作方式类似于CRON作业,这意味着您可以将Postman Monitor设置为每24小时更新一次特定的环境变量。

2 -打开邮递员监视器更新您的环境:

Postman 2.1-这一步非常简单,创建一个类似以下配置的监视器:

2.2 -编写测试以更新环境:

测试将如下所示:

代码语言:javascript
复制
// you have to use pm.test() otherwise Postman Monitor not execute the test
const moment = require("moment");

pm.test("update date", () => {
  // set date 2 days past
  let startdate = moment();
  const dayCount = 2;
  startdate = startdate.subtract(dayCount, "days");
  startdate = startdate.format("YYYY-MM-DD");

  // this is not work on Postman Monitor, use Postman API like below
  //pm.environment.set('date', startdate);

  const data = JSON.stringify({
    environment: {
      values: [
        {
          key: "date",
          value: startdate,
        },
      ],
    },
  });

  const environmentID = "<your-environment-id>";

  // Set environment variable with Postman API
  const postRequest = {
    url: `https://api.getpostman.com/environments/${environmentID}`,
    method: "PUT",
    header: {
      "Content-Type": "application/json",
      "X-API-Key":
        "<your-postman-api-key>",
    },
    body: {
      mode: "raw",
      raw: data,
    },
  };

  pm.sendRequest(postRequest, (error, response) => {
    console.log(error ? error : response.json());

    // force to fail test if any error occours
    if (error) pm.expect(true).to.equal(false);
  });
});

使用Postman Monitor时,不能使用pm.environment更改环境变量。您应该在测试中使用带有pm.sendRequest的Postman API。

您需要获取一个Postman API密钥,并且需要了解您的环境id。您可以通过Postman API了解环境id。

要了解您的环境ID,请使用以下端点:https://www.postman.com/postman/workspace/postman-public-workspace/request/12959542-b7ace502-4a5a-4f1c-8164-158811bbf236

要了解如何获取邮递员API密钥:https://learning.postman.com/docs/developer/intro-api/#generating-a-postman-api-key

2.3 -手动运行邮递员监视器以确保测试正常工作:

2.4 -正如您所看到的,Postman Monitor执行脚本:

2.5 -当我检查环境时,我可以看到结果:

您可以从浏览器中进行测试以查看结果:

票数 0
EN

Stack Overflow用户

发布于 2021-10-21 21:25:53

I have answered this question earlier,但我有另一个解决方案。

您可以部署一个服务器来更新模拟环境中的变量。如果你想免费做这件事,那就使用Heroku

我用Python编写了一个Flask应用程序,并将其部署到Heroku,请检查以下代码:

代码语言:javascript
复制
from flask import Flask
import os
import json
import requests
from datetime import datetime, timedelta

app = Flask(__name__)

# the port randomly assigned and then mapped to port 80 by the Heroku
port = int(os.environ.get("PORT", 5000))

# debug mode
debug = False


@app.route('/')
def hello_world():
    N_DAYS_AGO = 2

    # calculate date
    today = datetime.now()
    n_days_ago = today - timedelta(days=N_DAYS_AGO)
    n_days_ago_formatted = n_days_ago.strftime("%Y-%m-%d")

    # set environment
    payload = json.dumps({
        "environment": {
            "values": [
                {
                    "key": "occupation",
                    "value": n_days_ago_formatted
                }
            ]
        }
    })

    postman_api_key = "<your-postman-api-key>"

    headers = {
        'Content-Type': 'application/json',
        'X-API-Key': postman_api_key
    }

    environment_id = "<your-environment-id>"
    url = "https://api.getpostman.com/environments/" + environment_id

    r = requests.put(url, data=payload, headers=headers)

    # return postman response
    return r.content


if __name__ == '__main__':
    app.run(debug=debug, host='0.0.0.0', port=port)

代码计算新日期并将其发送到模拟环境。它起作用了,在回答这个问题之前,我在Heroku中测试了它。

当你转到你的Heroku应用程序的页面时,代码将被触发,date环境将自动更新,请使用模拟服务器中的环境变量来解决问题。

您需要自动执行此代码,因此我建议您使用UptimeRobot每天ping您的Heroku应用程序一次。在每次ping时,您的环境变量都会更新。不要过度使用它,因为Heroku对免费套餐有使用配额。

要使用此代码,您需要了解如何在Heroku上部署Flask应用程序。顺便说一句,Flask在这里只是一个选项,你可以使用NodeJS代替Python,逻辑将保持不变。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69547094

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档