Как установить переменные среды для тестирования dredd в файле dredd.yml?

Я пытаюсь выполнить несколько вызовов API, используя dredd и api blueprint для тестирования сайта. Я хотел бы запустить тесты на circleCI, так как там же проводятся тесты Selenium. Каждая транзакция должна сопровождаться двумя токенами, которые устанавливаются в виде файлов cookie в заголовках. В идеале они должны быть установлены в файле dredd.yml. При работе на локальной машине, если я заменю ACCESS_TOKEN а также REFRESH_TOKEN с фактическими значениями тест выполняется как ожидалось.

circle.yml:

test:
    override:
            - dredd

заголовки dredd.yml

header: ['Cookie: access_token=ACCESS_TOKEN; refresh_token=REFRESH_TOKEN']

Где ACCESS_TOKEN и REFRESH_TOKEN заменяются фактическими значениями, установленными в переменных окружения circleCI. Я также попробовал: access_token=$[ACCESS_TOKEN], access_token=$["ACCESS_TOKEN"] а также access_token=$ACCESS_TOKEN, Ни один из них не заменяется в заголовках для первого вызова API.

Заголовок выглядит так: {"Content-Type":"application/json; charset=utf-8","User-Agent":"Dredd/1.4.0 (Darwin 14.5.0; x64)","Cookie":" access_token=$ACCESS_TOKEN; refresh_token=$REFRESH_TOKEN"}

Я новичок в файлах yaml, поэтому, возможно, мне не хватает чего-то простого, но я некоторое время искал. Файл ловушек написан с помощью node.js, поэтому я не думаю, что справка по ruby ​​/rails будет полезна здесь. Если я что-то упустил в вопросе, не стесняйтесь, дайте мне знать.

2 ответа

Решение

YAML - это язык представления данных, а не язык шаблонов (или процессор шаблонов). В то время как отдельная программа может поддерживать загрузку переменных среды или дополнительных параметров, названных в конфигурации, синтаксический анализатор YAML (возможно, если это не пользовательский модуль) не является тем, что вводит их. Просматривая документы dredd, я не вижу ссылок на переменные или параметры среды, возможно, стоит создать проблему в проекте и начать обсуждение с разработчиками, чтобы выяснить, поддерживается ли это.

Я могу придумать несколько способов решить вашу конкретную проблему, но все они включают дополнительные инструменты для визуализации YAML с введенными переменными. Возможно, самое простое решение для вашего случая - установить переменные окружения в веб-конфигурации CircleCI (НЕ управляемый версией circle.yml). Затем настройте шаг предварительной сборки, на котором создается конфигурация YAML. Чтобы сделать это, оберните YAML в скрипт BASH, и документ YAML, содержащийся внутри него, представляет собой документ-документ.

#!/bin/bash

# ACCESS_TOKEN and REFRESH_TOKEN are injected by CircleCI

cat <<EOF > config.yml
---
header: ['Cookie: access_token=${ACCESS_TOKEN}; refresh_token=${REFRESH_TOKEN}']
EOF

Затем выполните обычную работу до конца, возможно, удалив файл конфигурации или восстановив его из-под контроля версий, прежде чем будут созданы какие-либо артефакты, чтобы избежать утечки ваших учетных данных.

Лучший способ работать с заголовками - это устанавливать файлы заголовков перед каждым запросом. Поскольку вы используете Node.js, попробуйте установить переменные среды Node:

var hooks = require('hooks');

hooks.beforeEach(function(transaction) {

  transaction.request.headers.Cookie = 
    'access_token=' + ACCESS_TOKEN + 
    '; refresh_token=' + REFRESH_TOKEN;

}
Другие вопросы по тегам