2014-10-10 92 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個國家的相同測試需要數小時,並且不會增加任何重要價值。

相關問題