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.
Quando si dice '1. Carica la stessa pagina web su un certo numero di browser diversi? Intendi in una volta? o in sequenza? –
Subito. Quindi più browser si aprono caricando la stessa pagina web. – lbrown
È possibile passare a MBunit? Dopo alcune indagini sono giunto alla conclusione che Nunit non è lo strumento migliore per la parallelizzazione. –