5

我的acceptance.suite.yml 配置文件中有环境配置。参数之一是语言。我需要知道实际测试代码中的这个参数值才能正确驱动测试步骤。

Acceptance.suite.yml 配置内容:

 class_name: WebGuy
modules:
    enabled:
        - WebDriver
        - WebHelper
        - Db
    config:
        WebDriver:
            browser: firefox
env:
    eng:
        modules:
            config:
                WebDriver:
                   url: 'localhost'
                   lang: en
   esp:
        modules:
            config:
                WebDriver:
                    url: 'localhost'
                    lang: es

如何获取语言参数值?

4

5 回答 5

10

我遇到了同样的问题,并在 Codeception 论坛上找到了帮助。这是用户 Dan 提到的如何访问配置内容的方法。

$config = \Codeception\Configuration::config();
$apiSettings = \Codeception\Configuration::suiteSettings('api', $config);
于 2014-05-26T08:20:26.023 回答
2

@George 的答案将为您提供所有设置,但不提供所选环境。

我努力让当前环境使用getopt,但发现这足以满足我的需求。我得到了这个baseUrl值,所以已经包含了经过测试的代码,而不是根据问题为“lang”编辑它,但没有对其进行测试。这应该只是改变挑选值的数组的问题。

// Default to no env
$env = '';
// If we have argv settings, go through each one
if (isset($_SERVER['argv'])) {
    foreach($_SERVER['argv'] as $key => $value) {
        // If the current value is --env and we have the next one, then take the next one as the setting
        if ($value == '--env' && isset($_SERVER['argv'][$key + 1])) {
            $env = $_SERVER['argv'][$key + 1];
        }
    }
}
// By this point we either found an --env and have its value, or we
// didn't and can assume we don't have one set.
// We look in a slightly difference place depending on whether we
// have an env or not
if ( empty( $env ) ) {
    $baseUrl = $apiSettings['modules']['config']['baseUrl'];
} else {
    $baseUrl = $apiSettings['env'][$env]['modules']['config']['baseUrl'];
}
于 2017-07-07T12:30:44.303 回答
2

使用 Scenario,您将获得活动的“env”,当您获得它时,阅读配置很容易。下面的例子。您可以访问 Cept 和 Cest 格式的 \Codeception\Scenario。在 Cept 中,$scenario 变量默认是可用的,而在 Cest 中,您应该通过依赖注入来检索它。

public function someTest(AcceptanceTester $I, \Codeception\Scenario $scenario) {

    $current_env = $scenario->current('env');
    $config = \Codeception\Configuration::suiteSettings("acceptance", \Codeception\Configuration::config());

    $current_language = $config['env'][$current_env]['modules']['config']['WebDriver']['lang'];

}
于 2017-09-01T14:27:12.407 回答
0

我找到了一个完美的解决方案。我把它放到 _Bootstrap.php 文件中:

# Checking which language parameter is provided
$lang = $_SERVER['argv'];
$language = $lang[4];
于 2014-11-12T13:53:21.947 回答
0

无法直接从测试文件中访问配置值。

然而,它可以通过一个帮助文件访问(确认与 Acceptance.php 一起使用)。

在 Helper 文件中添加了以下内容:

public function getConfigUrl(){
  return $this->getModule('WebDriver')->_getConfig('url');
}

在测试文件中,它是通过以下方式访问的:

$I->getConfigUrl();

请注意,在我的 *.suite.yml 文件中,我有以下配置:

paths:
    helpers: tests/_support
modules:
    enabled:
        - \Helper\Acceptance
        - WebDriver

关于我的帖子的更多详细信息:http: //phptest.club/t/how-to-grab-module-config-values/1616/2

于 2017-08-30T13:17:38.343 回答