Вложенные переменные Postman не анализируются при получении переменной среды в сценарии предварительного запроса

Представьте себе следующие переменные среды:

  • Base-URL => https://my.website.com/api
  • Cars-URL => {{Base-URL}}/cars
  • Auth-URL => {{Base-URL}}/login

Если я использую GET {{Cars-URL}} в почтальоне, он работает нормально и вызывает https://mu.website.com/api/cars

То же самое касается POST {{Auth-URL}}, он отлично работает, и я получаю токен JWT.

Однако я хотел бы использовать сценарии предварительного запроса моей коллекции для автоматического получения токена JWT перед любым вызовом в коллекции. Поэтому я использую следующую настройку:

var authUrl = pm.environment.get("Auth-URL");

pm.sendRequest({
    url: authUrl,
    method: "POST",
    header: { ... },
    body: { ... },
    function (err, res) {
        pm.environment.set("JWT-token", res)
    }
});

Я получаю на своей консоли следующий вывод:

POST http://{{base-url}}/login
Error: getaddrinfo ENOTFOUND {{base-url}}
Ocp-Apim-Subscription-Key: xxxxxxxxxxxxxxx
User-Agent: PostmanRuntime/7.26.5
Accept: */*
Postman-Token: xxxxxxxxxxxxxxx
Host: {{base-url}}
Accept-Encoding: gzip, deflate, br

Кажется, что pm.environment.get не разбирает вложенную переменную.

Как решить эту проблему?


person hwcverwe    schedule 30.10.2020    source источник
comment
Откуда base-url? В вашем примере у вас есть Base-URL в качестве имени.   -  person Danny Dainton    schedule 30.10.2020


Ответы (1)


Используйте pm.variables.replaceIn (доступно, начиная с v7.6.0.)

Это поможет:

var authUrl = pm.variables.replaceIn(pm.environment.get("Auth-URL"));

pm.sendRequest({
   ....
})
person hwcverwe    schedule 30.10.2020
comment
Этот метод должен работать так, и он был реализован только для замены строковых значений и позволял вам использовать синтаксис {{..}} в скриптах. pm.variables.replaceIn("{{Auth-URL}}") - person Danny Dainton; 30.10.2020