2014-10-10 49 views
1

在stackoverflow上发出问题Parameters in Behat 3 Ian找到了传递给behat参数的解决方案。Behat以编程方式再次运行场景

对于环境没问题,但对于国家参数我有点困惑。我有这样一个特点:

Scenario Outline: Test if first link works 
    Given I am on website "<country>" 
    Then I visit the url "my-url" 
    Then I click on first link 

Examples: 
    | country | 
    | US  | 
    | IT  | 

这是我的,现在我想运行是这样的:

env="stg" country="US,IT" php53 bin/behat --suite=mySuite 

但随着场景的轮廓,整个场景运行每个国家。我想要做同样的事情,但是通过参数传递的国家/地区列表。

也许与钩AfterScenario或类似的东西,我可以再次运行我的整个场景与不同的配置?

谢谢!

回答

0

不幸的是,使用标准工具是不可能的,至少不是没有头痛和重新发明车轮。一个有趣的问题,但!

您可以通过在behat.yml中配置套件来实现此功能。你应该有一个默认的套房配有基本配置,以及一套为每种语言:

default: 
    extensions: 
     Behat\MinkExtension 

    suites: 
     default: 
      paths: […] 
      contexts: […] 

     US: 
      paths: […] 
      contexts: […] 

     IT: 
      paths: […] 
      contexts: […] 

,并使用@beforeSuite钩:

/** 
* @beforeSuite 
* 
* @param BeforeSuiteScope $scope 
*/ 
public static function setUpSuite(BeforeSuiteScope $scope) 
{ 
    $suiteName = $scope->getSpecificationIterator()->getSuite()->getName(); 

    // If the suite denotes one of the languages, then set it as the main language. 
} 

该解决方案有几个缺点:

  1. 您不能将套件用于语言以外的任何内容。
  2. 很多配置重复。
  3. 从钩子设置语言将是一个痛苦。您可能需要将其存储为静态属性,并且在发送每个Mink请求之前将其传递到标题中,以便服务器知道要使用哪种语言。你需要另一个钩子 - 无论如何,这是另一个痛苦的故事。

想到的另一个解决方案是只使用另一个PHP/Bash脚本,它将按国家参数依次运行Behat。它也有一些缺点:

  1. 如果你每次使用不同的Behat params,你可能需要添加逻辑来传递它们。
  2. 运行每个子任务时,正确显示Behat结果可能存在问题。
  3. 您仍然需要以某种方式将该语言传递到您的应用程序,但上述建议应该可以工作。

正如你所看到的,这不是一项简单的任务。就我个人而言,我对第二种解决方案有了更好的信念,虽然它可能更及时,但也为大量定制提供了空间。另一方面,除非你对每个国家有完全不同的内容/逻辑,否则你可能不需要进入这样的极端。做一些有针对性的检查,语言可以改变,并且如预期的那样改变应该足够了。重新运行40个国家的相同测试需要数小时,并且不会增加任何重要价值。

相关问题