在我的Postman模拟服务器中,我设置了一个返回JSON的GET请求,其中返回了以下内容
“due_date":"2021-10-10"我想要的是调整响应,以便返回的日期是过去的两天。因此,如果今天是“2021-10-10”,我希望响应包含
“due_date":"2021-10-08”如果今天是“2022-01-01”,我希望响应包含
“due_date":"2021-12-30”诸若此类。如何设置Postman模拟服务器请求以返回此类数据?
发布于 2021-10-13 08:11:45
我认为这是一个很好的问题,而且我很好奇,所以我做了一些研究,并找到了一个解决这个问题的。这有点复杂。我不确定这样做是否值得。
首先,Postman Mock Server (简称Mock Server)不能执行任何测试和前置脚本,因此它无法计算东西。这里你需要一个计算,那么你打算怎么做?那么,您可以为Mock Server定义一个environment,它使您能够在模拟响应中使用动态值。
我将继续一步一步地展示这个过程。
1 -使用以下环境打开模拟服务器:
1.1 -为新的模拟服务器创建一个集合:

您的模拟响应将如下所示:
{"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 -编写测试以更新环境:

测试将如下所示:
// 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 -当我检查环境时,我可以看到结果:

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

发布于 2021-10-21 21:25:53
I have answered this question earlier,但我有另一个解决方案。
您可以部署一个服务器来更新模拟环境中的变量。如果你想免费做这件事,那就使用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每天ping您的Heroku应用程序一次。在每次ping时,您的环境变量都会更新。不要过度使用它,因为Heroku对免费套餐有使用配额。
要使用此代码,您需要了解如何在Heroku上部署Flask应用程序。顺便说一句,Flask在这里只是一个选项,你可以使用NodeJS代替Python,逻辑将保持不变。
https://stackoverflow.com/questions/69547094
复制相似问题