【问题标题】:How can I set environment variables for dredd testing in a dredd.yml file?如何在 dredd.yml 文件中为 dredd 测试设置环境变量?
【发布时间】:2016-08-12 17:31:17
【问题描述】:

我正在尝试使用 dreddapi blueprint 运行多个 api 调用来测试站点。我想在 circleCI 上运行测试,因为 Selenium 测试在同一个地方运行。每笔交易都需要附有两个令牌,这些令牌在标头中设置为 cookie。理想情况下,这些将在 dredd.yml 文件中设置。在本地机器上运行时,如果我将ACCESS_TOKENREFRESH_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 文件的新手,所以我可能缺少一些基本的东西,但我确实搜索了一段时间。 hooks 文件是用 node.js 编写的,所以我认为 ruby​​/rails 帮助在这里没有用。如果我在问题中遗漏了任何内容,请随时告诉我。

【问题讨论】:

    标签: node.js yaml circleci apiblueprint dredd


    【解决方案1】:

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

    我可以想到多种方法来解决您的特定问题,但它们都涉及额外的工具来渲染带有注入变量的 YAML。对于您的情况,最简单的解决方案可能是在 CircleCI web configuration (不是版本控制的 circle.yml)中设置环境变量。然后,设置生成 YAML 配置的预构建步骤。为此,请将 YAML 包装在 BASH 脚本中,其中包含的 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
    

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

    【讨论】:

      【解决方案2】:

      使用标头的更好方法是通过Hook files 设置标头before each 请求。当您使用Node.js 时,请尝试设置 Node 环境变量:

      var hooks = require('hooks');
      
      hooks.beforeEach(function(transaction) {
      
        transaction.request.headers.Cookie = 
          'access_token=' + ACCESS_TOKEN + 
          '; refresh_token=' + REFRESH_TOKEN;
      
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-08-11
        • 1970-01-01
        • 2021-08-10
        • 2015-09-20
        • 1970-01-01
        • 1970-01-01
        • 2023-03-06
        • 1970-01-01
        相关资源
        最近更新 更多