2012-05-25 13 views
5

Ho svolto ricerche su come automatizzare i test del browser per un certo numero di settimane utilizzando ora tutti i tipi di metodi diversi. Il sito web di Seleniums è molto vago su quale sia la strada migliore da percorrere.Test del browser automatizzato utilizzando selenio, Nunit, selenio griglia, C#, webdriver/telecomando

Ho installato

  1. Selenio WebDriver
  2. telecomando
  3. Selenio Griglia
  4. Apache Ant
  5. Nunit (e praticamente tutto il resto si può aver bisogno di fare questo)

I finall Rinuncia a provare per conto mio e voglio sapere qual è il modo migliore per farlo.

Voglio essere in grado di

  1. Caricare la stessa pagina web in un certo numero di diversi browser
  2. Caricare la stessa pagina web su un certo numero di macchine virtuali (che ho istituito)
  3. Be in grado di scattare istantanee confrontando i diversi risultati del browser.

Ho conoscenza della programmazione in C# e preferisco eseguire i miei test tramite Nunit.

Qualcuno può darmi indicazioni o indicarmi un sito Web che già li ha? Grazie.

+0

Quando si dice '1. Carica la stessa pagina web su un certo numero di browser diversi? Intendi in una volta? o in sequenza? –

+0

Subito. Quindi più browser si aprono caricando la stessa pagina web. – lbrown

+0

È possibile passare a MBunit? Dopo alcune indagini sono giunto alla conclusione che Nunit non è lo strumento migliore per la parallelizzazione. –

risposta

8

Ho creato una struttura di test utilizzando junit con Selenium WebDriver che soddisfa tutti i punti. Anche se non è esattamente quello che stai chiedendo, ritengo che possa essere utile a te, a prescindere.

Caricare la stessa pagina web su diversi browser

Uso griglia di selenio, questo è molto semplice da installare. Imposta alcune macchine virtuali con gli ambienti che stai cercando di testare.Nel nostro ambiente, per esempio, abbiamo una griglia in esecuzione con quattro nodi (come macchine virtuali) con una configurazione simile alla seguente

  • Windows con IE7 e Firefox
  • Windows con IE8 e Firefox
  • Windows con IE9 e Firefox
  • Linux con FireFox

si noti che il selenio raccomanda che una sola istanza di IE essere consentita l'esecuzione sui nodi di Windows. Su ciascuno dei nodi sopra menzionati, vi è un'istanza dell'IE specificata e cinque istanze dell'FF specificato autorizzate a essere eseguite in un dato momento. Con la configurazione della griglia e l'hub configurato, i test di accensione sono un gioco da ragazzi. In WebDriver, utilizzare l'oggetto DesiredCapabilities per configurare l'ambiente desiderato, quindi inviare il test e attendere il ritorno del risultato.

Platform desiredPlatform; 
DesiredCapabilities desiredCapabilities; 
desiredPlatform = Platform.LINUX; 
desiredCapabilities = DesiredCapabilities.firefox(); 
desiredCapabilities.setPlatform(desiredPlatform); 
desiredCapabilities.setVersion("11"); 

WebDriver driver = new RemoteWebDriver("http://hubURL", desiredCapabilities); 

Caricare la stessa pagina web su un certo numero di macchine virtuali (che ho predisposto)

Ho risolto questo forzando i test da eseguire, sia pure in modo unconvential, in un filettata maniera. Ogni test JUnit utilizza una libreria di thread condivisi che crea tutti i necessari RemoteWebDrivers necessari in thread separati. Ciascuno di questi thread viene eseguito contemporaneamente sul relativo nodo mentre il thread padre si trova e attende che tutti terminino. Poi al prossimo test che viene eseguito anche multithread.

Ci sono stati un paio di problemi che ho riscontrato come il recupero delle tracce dello stack di Junit in tutti i thread figli. Ho risolto il problema reindirizzando Std.err a un puntatore secondario sul thread principale. Tutti gli errori vengono instradati a quel flusso che poi converto in una stringa e stampato a Std.out alla fine di ogni test. Le pagine html generate alla fine dei test includono Std.out che ha funzionato perfettamente.

Essere in grado di scattare istantanee confrontando le diverse del browser si traduce

Anche se ho ottenuto questo al lavoro, ci sono alcuni problemi inerenti con afferrando le immagini da remoto. IE restituirà schermate nere se il processo è in esecuzione come servizio. Per risolvere il problema, è sufficiente eseguire il jar dalla riga di comando e mantenere l'utente connesso, nel qual caso gli screenshot vengono restituiti correttamente. Questo è un problema noto nel browser e non c'è davvero una buona soluzione al problema. Prendere screenshot funziona grosso modo così

WebDriver augmentedDriver = new Augmenter().augment(driver); 
TakesScreenshot ss = (TakesScreenshot) augmentedDriver; 
String base64Screenshot = ss.getScreenshotAs(OutputType.BASE64); 
byte[] decodedScreenshot = Base64.decodeBase64(base64Screenshot.getBytes()); 
FileOutputStream fos = new FileOutputStream(new File(imageName)); 
fos.write(decodedScreenshot); 
fos.close(); 

che salva lo screenshot catturato dal browser in esecuzione della macchina remota sulla macchina locale.

In realtà, l'automazione del browser sta ancora lottando per stabilizzarsi. Ci sono un certo numero di caratteristiche importanti, come quelle che stai chiedendo, che non sono implementate in modo solido e che conosco in qualsiasi contesto. Con il tempo, però, sono sicuro che molto di questo si stabilizzerà e gli sviluppatori di QA in tutto il mondo si rallegreranno.

+0

Ho notato il tuo lavoro su un paio di altre domande e sembri molto esperto nei test automatici. Per caso, hai un tutorial o un codice pubblicato aperto al pubblico? – lbrown

1

Per quanto riguarda il secondo punto: anziché utilizzare Grid, è possibile consentire al server di integrazione continua di eseguire il lavoro. Nella mia azienda utilizziamo Jenkins e la cosiddetta Configuration Matrix: ti consente di eseguire lo stesso lavoro su più nodi Jenkins.

Per quanto riguarda il primo, penso che anche Jenkins potrebbe essere d'aiuto. È possibile eseguire più lavori sullo stesso nodo. Anche se non l'ho mai provato, quindi non ne sono perfettamente sicuro. E questa è solo un'idea, non consiglierei davvero una soluzione del genere. Si potrebbe anche voler leggere this blog post descrivendo come eseguire test in parallelo usando Selenium Grid. Per le persone che utilizzano Java, consiglierei di leggere su parallel tests with TestNG.

Il terzo punto è un po 'vago. Cosa intendi per istantanea? E che tipo di risultato vuoi confrontare?

-1

Si può anche considerare the free Telerik Testing Framework. Questo è il sostegno del prodotto commerciale Test Studio di Telerik. Il framework di test fornisce supporto per browser, fa un ottimo lavoro con situazioni di contenuto dinamico (AJAX) e ti consente anche di gestire finestre di dialogo a livello di sistema operativo come le finestre di caricamento/scaricamento dei file. Puoi anche scattare istantanee del browser in qualsiasi momento.

Puoi avvolgere la struttura all'interno di qualsiasi runner che preferisci. Ho usato NUnit e MbUnit senza problemi.

C'è anche un'opzione per un pacchetto di supporto se hai bisogno di aiuto con la tua automazione.

(Disclosure: io lavoro per Telerik come il loro Studio Test evangelista)

0

Selenio RC è obsoleto e WebDriver è il modo più affidabile di creazione di test di selenio. Vedo che le risposte sopra soddisfano maggiormente il lato java. Qui di seguito menzionate sono più informazioni su come raggiungere le domande poste qui utilizzando C# e selenio WebDriver

su come configurare l'IDE (VS espresso), NUnit e selenio riferimento How to setup C#,nUnit and selenium client drivers on VSExpress for Automated tests

Sulla Creazione semplice script che lancia una il browser fa pochi passi si riferiscono Creating Basic Selenium web driver test case using Nunit and C#

su come caricare la stessa pagina web in un certo numero di diversi browser suggeriscono di riferimento How to invoke locally different types of browser driver using selenium and c#

On Caricare la stessa pagina Web su un numero di macchine virtuali (che ho configurato) per questo, è necessario utilizzare il webdriver remoto invece del normale webdriver. Inoltre con il webdriver remoto, puoi avviare diversi tipi di browser. Fare riferimento il sito How to invoke/run different type of web driver browser using remote webdriver in C#

Per scattare un'istantanea su diversi browser che si può fare riferimento il link Capturing screen shots using remote/local webdriver in C#/Selenium webdriver

Problemi correlati