2016-08-12 47 views
3

サイトをテストするために、dreddapi blueprintを使用していくつかのAPIコールを実行しようとしています。私は同じ場所で実行されているセレンテストがあるので、circleCIでテストを実行したいと思います。各取引には、ヘッダーにクッキーとして設定されている2つのトークンが付随する必要があります。理想的には、これらは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呼び出しのヘッダーに置き換えられていません。

ヘッダは次のようになります。{"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で書かれているので、私はここでルビー/レールヘルプが役に立つとは思わない。質問に何か不足している場合は、私に知らせることをためらってください。

答えて

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; 

} 
関連する問題