2012-11-08 18 views
6

私はいくつかのサイトをテストするためにBehatとMinkを使用しています。それらのうちの2つは、シングルサインオンを使用するので、私のテストの一つは、一つのサイトにログインを含み、第二のサイトに行き、私がログインしていますチェック異なる環境(異なるURL)で同じテストで2つのサイトをテストする方法

これは、この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/" 

私たちは、異なるURLと異なる環境(ローカル開発者、DEV、stagging)を持っているので、私はすべてのマシンで動作テストを書くことはできません。私は各マシンの異なるbase_url設定を持つことができるので、最初のサーバーはOKですが、2番目のサーバーURLを変更するすべての機能ファイルを書き換える代わりに、2番目のサーバー を一般設定として設定する方法が見つかりません。

変数、定数、またはマシンごとに異なるファイルに保存できる何かを宣言する方法はありますか?それはすることができますこれを解決する

答えて

6

  • は、マシンに依存するファイルや環境変数にマスターとスレーブURLを定義します。例えば、behat.ymlは、いくつかの余分のparamsで、すべてのマシン用にカスタマイズすることができます:
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: ~ 

を次に、あなた自身のFeatureContextクラスに定義されたのparam含まれます:

最後に
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');  
} 

シーンスレーブサイトの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プロファイルを使ってオーバーロードします。次に、対象の環境で異なるプロファイルを実行します。 –

関連する問題