Как выполнить один запрос от другого, используя предварительный запрос Script в Postman
Я пытаюсь отправить аутентифицированный запрос одним щелчком мыши в почтальоне.
Итак, у меня есть запрос с именем "Oauth", и я использую тесты для хранения токена в локальной переменной.
var jsonData = JSON.parse(responseBody);
postman.setEnvironmentVariable("token", jsonData.access_token);
Сейчас я пытаюсь автоматически запустить запрос Oauth (из сценария предварительного запроса) для любых других запросов, для которых требуется токен на предъявителя.
Есть ли способ получить токен доступа и отправить аутентифицированный запрос одним нажатием кнопки почтальон?
Ответы
Ответ 1
ПРИМЕЧАНИЕ. Теперь есть способ сделать это в сценарии предварительного запроса, см. Другие ответы. Я оставлю этот ответ для потомков, но все знают об этом :)
Я не думаю, что есть способ сделать это в скрипте предварительного запроса, но вы можете получить его всего за несколько кликов, если вы используете переменную и вкладку Тесты. В блоге Почтальона есть более полные инструкции, но суть этого такова:
- Настройте запрос аутентификации как обычно.
-
В разделе "Тесты" этого запроса сохраните результат этого запроса в переменной, возможно, что-то вроде следующего:
var data = JSON.parse(responseBody);
postman.setEnvironmentVariable("token", data.token);
-
Запустите запрос на аутентификацию - вы должны увидеть, что token
установлен для этой среды (щелкните значок в форме глаза в правом верхнем углу).
- Настройте запрос данных на использование
{{token}}
там, где вы ранее вставляли токен на предъявителя. - Запустите запрос данных - теперь он должен быть правильно аутентифицирован.
Чтобы обновить токен, все, что вам нужно сделать, это повторно запустить запрос аутентификации.
Ответ 2
Немного поздно, но для других, кто сталкивался с этим сообщением, теперь можно отправить еще один запрос из раздела " Pre-request Script
". Несколько примеров можно найти здесь: https://gist.github.com/madebysid/b57985b0649d3407a7aa9de1bd327990
Ответ 3
Как упомянуто KBusc и вдохновлено этими примерами, вы можете достичь своей цели, установив скрипт предварительного запроса, как показано ниже:
pm.sendRequest({
url: pm.environment.get("token_url"),
method: 'GET',
header: {
'Authorization': 'Basic xxxxxxxxxx==',
}
}, function (err, res) {
pm.environment.set("access_token", res.json().token);
});
Затем вы просто ссылаетесь на {{access_token}}
как любую другую переменную окружения.
Ответ 4
Вы не можете отправить другой запрос из раздела Pre-request Script
, но на самом деле его можно запрограммировать и запустить один за другим.
Вы собираете свой запрос в коллекцию и запустите его с помощью Collection Runner
.
Чтобы просмотреть результаты запроса, вы можете следовать другому ответу.
Ответ 5
Вы можете добавить в коллекцию скрипт предварительного запроса, который будет выполняться перед каждым запросом почтальона. Например, я использую следующее, чтобы вернуть токен доступа от Apigee
const echoPostRequest = {
url: client_credentials_url,
method: 'POST',
header:
'Authorization: Basic *Basic Authentication string*'
};
var getToken = true;
if (!pm.environment.get('token'))
{
console.log('Token missing')
}
else
{
console.log('Token all good');
}
if (getToken === true) {
pm.sendRequest(echoPostRequest, function (err, res) {
console.log(err ? err : res.json());
if (err === null) {
console.log('Saving the token');
console.log(res);
var responseJson = res.json();
console.log(responseJson.access_token);
pm.environment.set('token', responseJson.access_token)
}
});
}
Ответ 6
Я пробовал несколько решений, приведенное ниже решение связано с тем, что вы анализируете ответ на запрос 1 и передаете любую переменную во второй параметр запроса. (В этом примере переменная - Фамилия.)
Примечание: - данные и пользователь являются объектами JSON. ''
postman.clearGlobalVariable("variable_key");
postman.clearEnvironmentVariable("variable_key");
tests["Body matches string"] = responseBody.has("enter the match string ");
var jsonData = JSON.parse(responseBody);
var result = jsonData.data;
var lastName = result.user.lastName;
tests["Body matches lastName "] = responseBody.has(lastName);
tests["print matches lastName " + lastName ] = lastName;