首页 > 解决方案 > 如何从命令行将环境变量传递给 Codeception YML 文件?

问题描述

我一直在 Codeception YML 文件中看到这种事情:

modules:
    enabled:
        - PhpBrowser:
            url: '%URL%'

如何从命令行将“URL”传递给 Codeception?或者任何其他方式!

标签: codeception

解决方案


它记录在https://codeception.com/docs/06-ModulesAndHelpers#Dynamic-Configuration-With-Parameters

可以从环境变量动态配置模块。参数存储应在 params 部分内的全局 codeception.yml 配置中指定。参数可以从环境变量、yaml(Symfony 格式)、.env(Laravel 格式)、ini 或 php 文件中加载。

使用全局配置文件 codeception.yml 的 params 部分来指定如何加载它们。您可以为要从中加载的参数指定多个源。

示例:从环境中加载参数:

params:
    - env # load params from environment vars

示例:从 YAML 文件(Symfony)加载参数:

params:
    - app/config/parameters.yml

示例:从 php 文件加载参数 (Yii)

params:
    - config/params.php

示例:从 .env 文件加载参数(Laravel):

params:
    - .env
    - .env.testing

加载后,参数变量可以用作模块配置值。使用用 % 包裹的变量名作为占位符,它将被其值替换。

假设我们要为云测试服务指定凭据。我们已经从环境中加载了 SAUCE_USER 和 SAUCE_KEY 变量,现在我们将它们的值传递给 WebDriver 的配置:

modules:
   enabled:
      - WebDriver:
         url: http://example.com
         host: '%SAUCE_USER%:%SAUCE_KEY%@ondemand.saucelabs.com'

参数对于为 Db 模块提供连接凭据也很有用(取自 Laravel 的 .env 文件):

modules:
    enabled:
        - Db:
            dsn: "mysql:host=%DB_HOST%;dbname=%DB_DATABASE%"
            user: "%DB_USERNAME%"
            password: "%DB_PASSWORD%"

如果要在命令行中设置,可以这样设置:

URL=http://example.org codecept run

或者

export URL=http://example.org
codecept run

上面的示例适用于 Bash,如果您使用不同的 shell,您可能需要做其他事情。


推荐阅读