2016-08-12 8 views
3

dreddapi blueprint을 사용하여 여러 개의 API 호출을 실행하여 사이트를 테스트하려고합니다. 같은 장소에서 실행되는 Selenium 테스트가 있으므로 circleCI에서 테스트를 실행하고 싶습니다. 각 트랜잭션에는 머리글에 쿠키로 설정된 두 개의 토큰이 있어야합니다. 이상적으로, 이들은 dredd.yml 파일에서 설정됩니다. 로컬 컴퓨터에서 실행할 때 ACCESS_TOKENREFRESH_TOKEN을 실제 값으로 바꾸면 테스트가 예상대로 실행됩니다.dredd.yml 파일에서 dredd 테스트를위한 환경 변수를 어떻게 설정할 수 있습니까?

circle.yml :

test: 
    override: 
      - dredd 

dredd.yml 헤더 access_token이와 refresh_token도가 circleCI의 환경 변수에 설정된 실제 값으로 대체 얻을

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

. 나는 또한 시도했다 : access_token=$[ACCESS_TOKEN], access_token=$["ACCESS_TOKEN"]access_token=$ACCESS_TOKEN. 이들 중 어느 것도 첫 번째 API 호출의 헤더에서 대체되지 않습니다. 내가 파일을 YAML에 새로운 오전, 그래서 아마 기본 뭔가를 누락 {"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"}

,하지만 난 잠시 동안 검색 한 : 같은

헤더 보인다. 후크 파일은 node.js로 작성되었으므로 여기서는 루비/레일 도움말이 유용하지 않을 것이라고 생각합니다. 질문에 빠진 것이 있으면 주저하지 말고 알려주세요.

답변

3

YAML은 템플릿 언어 (템플릿 프로세서)가 아닌 데이터 표현 언어입니다. 개별 프로그램이 환경 변수 또는 구성에서 명명 된 추가 매개 변수를로드하는 것을 지원할 수 있지만 YAML 파서 (아마도 사용자 정의 모듈이 아닌 경우)는이를 주입하는 것이 아닙니다. dredd 문서를 생략하는 동안 환경 변수 나 매개 변수에 대한 참조를 볼 수 없으므로 프로젝트에서 문제를 만들고 개발자와 토론을 시작하여 이것이 지원되는지 확인할 가치가 있습니다.

나는 당신의 특정한 문제를 해결하는 많은 방법들을 생각할 수 있지만, 그것들은 모두 당신의 변수들이 주입 된 YAML을 렌더링하기위한 추가적인 도구들을 필요로합니다. 아마도 가장 쉬운 해결책은 CircleCI web configuration (버전 제어 된 circle.yml이 아님) 환경 변수를 설정하는 것입니다. 그런 다음 YAML 구성이 생성되는 사전 빌드 단계를 설정하십시오. 이를 수행하려면 BASH 스크립트에서 YAML을 랩핑하고 YAML 문서를 here-doc으로 포함 시키십시오.

#!/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 

는 아마도 구성 파일을 삭제하거나 어떤 유물이 자격 증명의 누설을 방지하기 위해 만들어지기 전에 버전 제어에서 복원 일반적으로 작업의 나머지 부분을 실행합니다.

0

헤더를 사용하는 더 좋은 방법은 Hook files 헤더를 설정하는 것입니다. before each입니다. Node.js을 사용할 때 노드 환경 변수를 설정하십시오.

var hooks = require('hooks'); 

hooks.beforeEach(function(transaction) { 

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

}