如何在 dredd.yml 文件中为 dredd 测试设置环境变量?

How can I set environment variables for dredd testing in a dredd.yml file?

我正在尝试 运行 使用 dredd and api blueprint 进行多次 api 调用来测试站点。我想 运行 circleCI 上的测试,因为在同一个地方有 Selenium 测试 运行ning。每笔交易都需要附带两个令牌,在 header 中设置为 cookie。理想情况下,这些将在 dredd.yml 文件中设置。当 运行ning 在本地机器上时,如果我用实际值替换 ACCESS_TOKENREFRESH_TOKEN,测试 运行s 会如预期的那样。

circle.yml:

test:
    override:
            - dredd

dredd.ymlheaders

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。其中 None 个在第一个 api 调用的 header 中被替换。

header 看起来像:{"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 文件的新手,所以我可能遗漏了一些基本的东西,但我确实搜索了一段时间。 hooks 文件是用 node.js 编写的,所以我认为 ruby/rails 帮助在这里不会有用。如果我遗漏了问题中的任何内容,请随时告诉我。

YAML 是一种数据表示语言,而不是模板语言(或模板处理器)。虽然单个程序可能支持加载环境变量或配置中命名的其他参数,但 YAML 解析器(可能,除非它是自定义模块)并不是注入它们的原因。在浏览 dredd 文档时,我没有看到任何对环境变量或参数的引用,可能值得在项目上创建一个问题并开始与开发人员讨论以查看是否支持。

我可以想出多种方法来解决您的具体问题,但它们都涉及额外的工具来呈现注入变量的 YAML。也许最简单的解决方案是在 CircleCI web configuration (NOT version-controled circle.yml). Then, set up a pre-build step, where the YAML configuration is generated. To do this, wrap the YAML in a BASH script, with the YAML document contained inside of it as a 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

然后 运行 正常完成您的其余工作,可能在创建任何工件之前删除配置文件或从版本控制中恢复它以避免您的凭据泄漏。

使用 headers 的更好方法是 Hook files setting headers before each request. As you are using Node.js,尝试设置 Node 环境变量:

var hooks = require('hooks');

hooks.beforeEach(function(transaction) {

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

}