2012-12-20 4 views
5

Sto configurando alcuni test del browser utilizzando SauceLabs. Sono stato in grado di eseguire test in locale e tramite Sauce, quindi ora sto cercando di integrarlo con la mia installazione di Jenkins per attivare automaticamente build e test del browser.

La maggior parte di questo funziona, ma ho un piccolo problema. In modo che possa eseguire i miei test localmente e tramite Sauce, voglio impostare la proprietà statica $ browsers durante la funzione phpUnit setup(), piuttosto che codificarla. Questo non sembra possibile.

Sto utilizzando la salsiccia di legame, il mio TestCase sembra piuttosto simile a questa demo: https://github.com/jlipps/sausage/blob/master/WebDriverDemo.php

ho provato in setup() per aggiornare l'array $ browser, ma non è mai sembra avere effetto. per esempio.

public function setUp() 
{ 
    self::$browsers = array(
     'browserName' => getenv('SELENIUM_BROWSER'), 
     'desiredCapabilities' => array(
      'version' => getenv('SELENIUM_VERSION'), 
      'platform' => getenv('SELENIUM_PLATFORM'), 
     ) 
    ); 
} 

C'è un modo per passare i dettagli del browser da Jenkins in modo che i test case siano più flessibili? Mi sento come se mi mancasse qualcosa di semplice qui?

+0

Jenkins dispone di plug-in di parametri che prendono i parametri quando si attiva un lavoro. Qualcosa del genere: https://wiki.jenkins-ci.org/display/JENKINS/Parameterized+Build ti aiuta? –

+0

Non ho problemi a ottenere i parametri nel caso di test phpunit. Quando sono lì, sembra troppo tardi per usarli. –

risposta

1

Ok, quindi l'ho risolto. Se qualcun altro ha lo stesso problema, ecco come l'ho risolto.

Nello script ANT eseguito da Jenkins, che esegue a sua volta PHPUnit, ho incluso un file config.xml. Questo imposta una variabile di configurazione (ambiente) chiamati a saucetrue

<phpunit> 
    <php> 
     <env name="sauce" value="true" /> 
    </php> 
</phpunit> 

Ora il trucco è di non effettivamente utilizzare i $ browser matrice statica, ma invece di utilizzare il metodo setupSpecificBrowser. Quindi, ora nella mia funzione setUp() dei miei test, accendo la variabile env salsa e se esiste, so che stiamo correndo da Jenkins e quindi uso le variabili fornite da esso.

if(getenv('sauce') == true) { 
     $browser = array(
       'browserName' => getenv('SELENIUM_BROWSER'), 
       'desiredCapabilities' => array(
         'version' => getenv('SELENIUM_VERSION'), 
         'platform' => getenv('SELENIUM_PLATFORM'), 
       ) 
     ); 
    } else { 
     $browser = array(
       'browserName' => 'firefox', 
       'local' => true, 
       'sessionStrategy' => 'isolated' 
     ); 
    } 
    $this->setupSpecificBrowser($browser); 

per quanto ne so non sembra esserci alcuna documentazione per questo, ho solo lavorato da guardando il codice. Divertimento.

+0

Sei riuscito ad aggiungere più di un browser? –

+0

La denominazione automatica dei test sembra interrompersi in questo modo. Tutti i test sono stati denominati "job senza nome" –

+0

Usando il mio metodo, dovresti configurare un task Jenkins separato per browser che volevi testare, dato che questi vengono passati tramite il plugin SauceOnDemand in Ant. Detto questo, l'interfaccia utente ti consente di selezionare più browser. Non sono sicuro di come accedere a questi valori se lo facessi (apols non ho il tempo di testare adesso) –

0

Va notato anche che l'impostazione dei browser dopo il fatto interrompe il test parallelo. Inoltre se hai tre diversi browser per iniziare (in $ array statici per browser) e imposta il browser su chrome, allora avrai tre macchine con Chrome in esecuzione.

5

Dopo aver trascorso un po 'di tempo a scavare attraverso la fonte, ho trovato una soluzione allo scenario "browser multipli". affermazioni di chapmatic per quanto riguarda più browser e la risposta data erano davvero corretto: non funziona per il test in parallelo e corre lo stesso browser più volte se si dispone di più browser definite nel array $ browser. La soluzione utilizza ancora variabili d'ambiente, ma è comunque necessario utilizzare l'array $ browser.

Quindi, assicuratevi innanzitutto di definire l'array $ browser nella vostra classe di test astratta. Quindi, supponiamo di aver definito il BROWSER di env var e di assegnargli il browser che vuoi testare. È possibile impostare la seguente funzione statica nella classe di test astratta che si estende salsa \ Salsiccia \ WebDriverTestCase:

public static function browserSetup() 
    { 
     switch (getenv('BROWSER')) { 
      case 'firefox': 
       self::$browsers = array(
        array(
         'browserName' => 'firefox', 
         'desiredCapabilities' => array(
          'platform' => 'self::WIN_VERSION', 
          'version' => self::FIREFOX_VERSION, 
         ) 
        ) 
       ); 
       break; 

      case 'safari': 
       //safari desiredCapabilities 
       break; 

      case 'explorer': 
       //ie desiredCapabilities 
       break; 

      case 'chrome': 
      //chrome desiredCapabilities 

      default: //This will just use the default $browsers array you defined 
     return; 
    } 

Ora che browserSetup() è definito, è necessario assicurarsi che sia chiamato prima la suite di test è impostato in modo che i test siano impostati per essere eseguiti solo sul browser specificato nella variabile di ambiente BROWSER.Diamo un'occhiata a PHPUnit_Extensions_Selenium2TestCase, che è speso da Sauce \ Sausage \ WebDriverTestCase; PHPUnit_Extensions_Selenium2TestCase definisce il seguente metodo:

public static function suite($className) 
{ 
    return PHPUnit_Extensions_SeleniumTestSuite::fromTestCaseClass($className); 
} 

Questo metodo viene chiamato per impostare la suite di test con tutti i browser che hai specificato nella propria matrice $ browser, quindi è necessario sovrascrivere questo metodo nella classe di test astratta, assicurandosi chiamare browserSetup() prima fromTestCaseClass() si chiama:

public static function suite($className) 
{ 
    self::browserSetup(); 
    return PHPUnit_Extensions_SeleniumTestSuite::fromTestCaseClass($className); 
} 

Ora, se si definisce l'ambiente bROWSER variabile con il browser che si desidera verificare, è possibile dare il via la piattaforma di test e l'array $ browser sarà correttamente sovrascritto con le impostazioni specificate per il singolo browser definito nel tuo BROWSER Enviro variabile. Assicurati che jenkins stia impostando correttamente questa variabile d'ambiente nella sezione Build-> Execute shell, e tu sei pronto a partire.

+0

Questa soluzione sembra in qualche modo promettente. Perché non accendere i gruppi di navigazione come - 'local', 'sauce', –

+0

Questo funziona anche quando si utilizza 'PHPUnit_Extensions_SeleniumTestCase' come classe base. – Kryten

Problemi correlati