在我的 Postman Mock Server 中,我设置了一个返回 JSON 的 GET 请求,其中返回以下内容
“due_date":"2021-10-10"
我想要的是调整响应,以便返回的日期是过去两天。所以如果今天是“2021-10-10”,我希望回复包含
“due_date":"2021-10-08”
如果今天是“2022-01-01”,我希望回复包含
“due_date":"2021-12-30”
等等。如何设置我的 Postman 模拟服务器请求以返回此类数据?
在我的 Postman Mock Server 中,我设置了一个返回 JSON 的 GET 请求,其中返回以下内容
“due_date":"2021-10-10"
我想要的是调整响应,以便返回的日期是过去两天。所以如果今天是“2021-10-10”,我希望回复包含
“due_date":"2021-10-08”
如果今天是“2022-01-01”,我希望回复包含
“due_date":"2021-12-30”
等等。如何设置我的 Postman 模拟服务器请求以返回此类数据?
我认为这是一个很好的问题,除了我很好奇,所以我做了一些研究并找到了解决方法。这有点复杂。我不确定是否值得。
首先,Postman Mock Server(简称 Mock Server)无法执行任何测试和预脚本,因此它无法计算事物。你需要在这里计算,你要怎么做?好吧,您可以定义一个environmentfor Mock Server,它使您能够在模拟响应中使用动态值。
我将继续一步一步地展示这个过程。
1 - 打开一个带有环境的模拟服务器:
1.1 - 为新的 Mock Server 创建一个集合:
您的模拟响应将如下所示:
{"due_date": "{{date}}"}
1.2 - 创建环境:
1.3 - 完成创建:
1.4 - 完成后,Postman 会创建一个如下所示的集合:
1.5 - 你可以从这个集合中测试你的模拟服务器:
如您所见,Mock Server 在其响应中使用环境变量。
现在,我们必须弄清楚如何更新环境变量。
您必须使用外部服务来更新您的环境变量。您可以将 Postman Monitor 用于此作业,因为它可以执行测试(意味着任何代码)并且像 CRON 作业一样工作,这意味着您可以将 Postman Monitor 设置为每 24 小时更新一次特定的环境变量。
2 - 打开 Postman Monitor 以更新您的环境:
2.1 - 这一步非常简单,创建一个 Postman Monitor 如下配置:
2.2 - 编写测试以更新环境:
测试将如下所示:
// 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);
});
});
pm.environment使用 Postman Monitor 时无法更改环境变量。您应该在测试中使用 Postman API pm.sendRequest。
您需要获取 Postman API 密钥并且需要了解您的环境 ID。您可以从 Postman API 中了解环境 id。
要了解您的环境 ID,请使用此端点:https ://www.postman.com/postman/workspace/postman-public-workspace/request/12959542-b7ace502-4a5a-4f1c-8164-158811bbf236
要了解如何获取 Postman API 密钥:https ://learning.postman.com/docs/developer/intro-api/#generating-a-postman-api-key
2.3 - 手动运行 Postman Monitor 以确保测试正常工作:
2.4 - 如您所见,Postman Monitor 执行脚本:
2.5 - 当我检查环境时,我可以看到结果:
您可以从浏览器测试以查看结果:
我之前已经回答了这个问题,但我有另一个解决方案。
您可以部署服务器以更新模拟环境中的变量。如果您想免费使用,只需使用Heroku即可。
我用 Python 编写了一个 Flask 应用程序并将其部署到 Heroku,检查以下代码:
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每天 1 次 ping 您的 Heroku 应用程序。在每次 ping 时,您的环境变量都会更新。不要过度使用它,因为 Heroku 有免费计划的使用配额。
要使用此代码,您需要学习如何在 Heroku 上部署 Flask 应用程序。顺便说一句,Flask 在这里只是一个选项,您可以使用 NodeJS 代替 Python,逻辑将保持不变。