2012-11-08 7 views
6

Ich benutze Behat und Mink, um mehrere Sites zu testen. Zwei von ihnen verwenden Single Sign On, so eine meiner Test beinhaltet Login in eine Website, gehen Sie auf die zweite Seite und überprüfe ich angemeldet binSo testen Sie mit behat zwei Sites im selben Test mit unterschiedlichen Umgebungen (so unterschiedliche URLs)

Dies wird mit diesem Behat Code 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" 

Dies funktioniert, aber das Problem ist, diese Zeile:

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

Wir haben verschiedene Umgebungen (lokale Entwickler, Entwickler, stagging) mit unterschiedlichen URLs, also kann ich nicht einen Test schreiben, die in jeder Maschine arbeitet. Der erste Server ist ok, da ich unterschiedliche base_url-Einstellungen für jede Maschine haben kann, aber ich finde keine Möglichkeit, den zweiten Server als allgemeine Einstellungen festzulegen, anstatt jede Feature-Datei, die diese zweite Server-URL ändert, neu zu schreiben.

Gibt es eine Möglichkeit, Variablen, Konstanten oder etwas zu deklarieren, das in einer Datei gespeichert werden kann, die für jede Maschine unterschiedlich ist? diese

Antwort

6

zu lösen, es ist möglich:

  • definieren Master und Slaves URL in einer Maschine abhängigen Dateien oder Umgebungsvariablen. Zum Beispiel behat.yml kann für jede Maschine angepasst werden, mit einigen zusätzlichen 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: ~ 

Dann schließen param in Ihre eigene FeatureContext Klasse definiert:

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'], 
     ); 

    } 

Schließlich , definieren Sie Ihren eigenen Schritt:

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

Eine Szenerie rio mit diesem Schritt Prüfung mit base_url für eine Slave-Website könnte sein:

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 

Dann schließt einen neuen Schritt zu prüfen, ob Benutzer in Master angemeldet sind.

+0

Anstatt eine Unzahl von 'slave1_url',' slave2_url' usw. zu erstellen, erstellen Sie den Parameter 'slave_url' und überladen Sie ihn mit den Behath-Profilen. Führen Sie dann in den Zielumgebungen ein anderes Profil aus. –