Как выполнить один запрос от другого, используя предварительный запрос Script в Postman

Я пытаюсь отправить аутентифицированный запрос одним щелчком мыши в почтальоне.

Итак, у меня есть запрос с именем "Oauth", и я использую тесты для хранения токена в локальной переменной.

var jsonData = JSON.parse(responseBody);
postman.setEnvironmentVariable("token", jsonData.access_token);

Сейчас я пытаюсь автоматически запустить запрос Oauth (из сценария предварительного запроса) для любых других запросов, для которых требуется токен на предъявителя.

Есть ли способ получить токен доступа и отправить аутентифицированный запрос одним нажатием кнопки почтальон?

Ответ 1

ПРИМЕЧАНИЕ. Теперь есть способ сделать это в сценарии предварительного запроса, см. Другие ответы. Я оставлю этот ответ для потомков, но все знают об этом :)

Я не думаю, что есть способ сделать это в скрипте предварительного запроса, но вы можете получить его всего за несколько кликов, если вы используете переменную и вкладку Тесты. В блоге Почтальона есть более полные инструкции, но суть этого такова:

  1. Настройте запрос аутентификации как обычно.
  2. В разделе "Тесты" этого запроса сохраните результат этого запроса в переменной, возможно, что-то вроде следующего:

    var data = JSON.parse(responseBody);
    postman.setEnvironmentVariable("token", data.token);
    
  3. Запустите запрос на аутентификацию - вы должны увидеть, что token установлен для этой среды (щелкните значок в форме глаза в правом верхнем углу).

  4. Настройте запрос данных на использование {{token}} там, где вы ранее вставляли токен на предъявителя.
  5. Запустите запрос данных - теперь он должен быть правильно аутентифицирован.

Чтобы обновить токен, все, что вам нужно сделать, это повторно запустить запрос аутентификации.

Ответ 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;