需要在测试代码中使用代码参数

时间:2014-03-07 19:43:44

标签: symfony selenium codeception

我在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

如何获取语言参数值?

5 个答案:

答案 0 :(得分:6)

我遇到了同样的问题,并在Codeception论坛上找到了帮助。以下是访问配置内容as mentioned by user Dan的方法。

$config = \Codeception\Configuration::config();
$apiSettings = \Codeception\Configuration::suiteSettings('api', $config);

答案 1 :(得分:1)

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

我努力使用baseUrl获取当前环境,但发现这可以很好地满足我的需求。我得到了// 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']; } 值,因此包含了经过测试的代码,而不是为" lang"根据问题但不测试它。它应该只是改变挑选值的数组。

Es--> France---_-2011 --> import.csv
Es--> Italy---_-2012 --> files --> import.csv
Es -->France---_-2012 --> files --> recent --> import.csv

答案 2 :(得分:1)

使用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'];

}

答案 3 :(得分:0)

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

# Checking which language parameter is provided
$lang = $_SERVER['argv'];
$language = $lang[4];

答案 4 :(得分: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