Как установить переменные среды для тестирования 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;
}