2012-11-08 21 views
6

我正在使用Behat和Mink測試多個網站。其中兩個使用單點登錄,所以我的測試之一包括在一個網站的登錄,進入第二個網站,並檢查我登錄如何在同一測試中使用behat測試兩個網站(使用不同的網址)

這acomplished這個貝哈特代碼:

Feature: SSO 
    In order to login in all related sites 
    As a anonymous user 
    I want to login in just one site 


Scenario: Login with normal user 
    Given I am on "/user/login" 
    When I fill in "name" with "username" 
    And I fill in "pass" with "password" 
    And I press "login" 
    Then I should see "My account" 
    And I go to "http://server.developer1.workstations/" 
    Then I should see "Close session" 

這工作,但問題是這一行:

And I go to "http://server.developer1.workstations/" 

我們有不同的環境(本地開發者,開發者,新股套利)使用不同的網址,所以我不能寫一個測試,在每一個機的工作原理。第一臺服務器沒關係,因爲我可以爲每臺機器設置不同的base_url設置,但是我找不到將第二臺服務器 設置爲常規設置的方法,而不是重寫每個功能文件來更改第二臺服務器的URL。

有什麼辦法可以聲明變量,常量或可以存儲在一個文件中,每個機器會有所不同?

回答

6

解決這個有可能:

  • 定義主機和從機地址的機器相關的文件或環境變量。例如,behat.yml可定製每一臺機器,用一些額外參數:
default: 
    context: 
    parameters: 
     master_url: 'http://master_site.workstation1' 
     slave1_url: 'http://.slave1.master_site.workstation1' 
     slave2_url: 'http://.slave2.master_site.workstation1' 
    extensions: 
    Behat\MinkExtension\Extension: 
     slave1_url: 'http://.slave1.master_site.workstation1' 
     goutte: ~ 
     selenium2: ~ 

然後,包括定義PARAM到自己的FeatureContext類:

class FeatureContext extends MinkContext 
{ 
    /** 
    * Initializes context. 
    * Every scenario gets it's own context object. 
    * 
    * @param array $parameters context parameters (set them up through behat.yml) 
    */ 
    public function __construct(array $parameters) 
    { 
     $this->site_urls = array(
      'master' => $parameters['master_url'], 
      'slave1' => $parameters['slave_url1'], 
      'slave2' => $parameters['slave_url2'], 
     ); 

    } 

最後,定義你自己的步驟:

/** 
* @Then /^I should be logged in master$/ 
*/ 
public function iShouldBeLoggedInMaster() 
{ 
    $this->visit($this->site_urls['master']); 
    $this->assertPageContainsText('Close session');  
} 

An scena力拓與BASE_URL這一步檢查了從站點可能是:

Scenario: Login as normal user 
    Given I am on "/user/login" 
    When I fill in "name" with "username" 
    And I fill in "pass" with "password" 
    And I press "Login" 
    Then I should see "My account" 
    And I should be logged in master 

然後,包括一個新的臺階,以檢查用戶是否在主記錄。

+0

而不是創建'slave1_url','slave2_url'等無數,創建'slave_url'參數並使用behat配置文件過載。然後在目標環境中運行不同的配置文件。 –