2012-11-08 10 views
6

Sto utilizzando Behat e Mink per testare diversi siti. Due di loro usano Single Sign On, quindi uno dei miei test include login in un sito, andare al secondo sito e controllare ho effettuato l'accessoCome testare con behat due siti nello stesso test con ambienti diversi (quindi URL diversi)

Questo è acomplished con questo codice Behat:.

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" 

questo funziona, ma il problema è questa linea:

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

Abbiamo diversi ambienti (sviluppatori locali, dev, stagging) con URL diversi, quindi non posso scrivere un test che funziona in ogni macchina. Il primo server va bene perché posso avere diverse impostazioni base_url per ogni macchina, ma non riesco a trovare un modo per impostare il secondo server come impostazioni generali invece di riscrivere ogni file di funzionalità cambiando l'URL del secondo server.

C'è un modo per dichiarare variabili, costanti o qualcosa che può essere memorizzato in un file che sarà diverso per ogni macchina?

risposta

6

per risolvere questo è possibile:

  • Definire master e slave URL in una macchina file dipendenti o variabili d'ambiente. Ad esempio, behat.yml può essere personalizzato per ogni macchina, con alcuni params in più:
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: ~ 

Poi, includono definito param nella propria classe 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'], 
     ); 

    } 

Infine , definisce il tuo passaggio:

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

Una scena rio con questo controllo passo con base_url per un sito schiavo poteva essere:

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 

Poi, includono un nuovo passo per verificare se l'utente è loggato master.

+0

Invece di creare una miriade di 'slave1_url',' slave2_url' ecc., Creare il parametro 'slave_url' e sovraccaricarlo usando i profili behat. Quindi, esegui un profilo diverso su ambienti mirati. –

Problemi correlati