C'è un infra pronto per l'esecuzione di test di cetriolo in parallelo? [duplicato]


Questa domanda ha già una risposta qui:

Scrivo un po ' di automazione usando selenium e java.

Io uso build.gradle per eseguire caratteristiche cetriolo.

Ogni caratteristica ha alcuni test.

Esiste un modo pronto per far funzionare gli script indipendenti parallelo?

Tutti usano selenuim ChromeWebDriver.

Se non ce n'è, come mi consiglieresti di scriverlo?

Author: Opal, 2014-07-22

2 answers

Ecco un approccio che ha funzionato bene per me ( nota importante: usando maven come build manager)

===========================================

Sarà necessario avere Maven e Firefox installati sul computer per eseguire questo esempio.

Una volta recuperato il sorgente, è possibile eseguire navigando nella directory Cucumber-JVM-Parallel ed emettendo il comando:

Installazione pulita Mvn

Questo eseguirà il progetto di esempio e avvierà due browser finestre contemporaneamente. Ogni finestra del browser corrisponde a un file di funzionalità di Cetriolo nell'esempio. Una volta completata l'esecuzione, verrà generato un report in /target/cucumber-report/index.HTML.

Il resto di questo post approfondirà ulteriormente la struttura del progetto di esempio, anche se si presume che tu abbia qualche esperienza precedente di Cucumber. In caso contrario, il readme Cetriolo-JVM è un ottimo punto di partenza.

File di funzionalità

La prima cosa di cui hai bisogno è il tuo file di funzionalità per descrivere il comportamento che ci si aspetta. In questo esempio, abbiamo due caratteristiche separate, anche se è anche possibile eseguire scenari all'interno di una singola caratteristica in parallelo.

Il modo in cui possiamo fare è usare i tag Cucumber, che possono essere applicati a tutti gli scenari di una funzionalità o a singoli scenari.

Tag cetriolo

Sopra, puoi vedere che abbiamo due file di funzionalità. Questi risiedono nella cartella 'src / test / resources'. Ogni file di funzionalità è contrassegnato (@autocorrect e @search), e contiene un singolo scenario.

Codice colla

Ora che abbiamo i nostri scenari, abbiamo bisogno di aggiungere un po ' di codice colla per legare ogni passo nel nostro framework di test sottostante

Questi sono indicati come definizioni di passi e possono essere trovati in ‘src/java/cucumber.vvm.parallelo / cetriolo / stepdefs'.

frammento di codice

Nello snippet sopra, puoi vedere che usiamo un'istanza di ShareDriver per comunicare direttamente con una finestra del browser. Questo è basato su uno degli esempi di cetriolo per condividere una singola sessione del browser tra tutti i test (utilizzando dependency injection) per rimuovere la necessità di avviare un'istanza del browser per test e quindi accelerare l'esecuzione. Nel nostro caso, ciò si traduce in una sessione del browser per thread. La classe ShareDriver può essere trovata in ' / src / test / java / cucumber.vvm.parallelo / cetriolo".

Oggetti pagina

Lo snippet mostra anche che usiamo un'istanza di 'SearchPageObject', che è semplicemente una classe che rappresenta la pagina di ricerca di Google, trovato in ' / src / test / java / cetriolo.vvm.parallel / pageobjects'.

Questo non è richiesto, ma è buona norma utilizzare il modello di oggetto page per facilitare la manutenibilità su un progetto più grande.

oggetto pagina

Sopra, puoi vedere che l'oggetto page contiene identificatori per gli elementi della pagina e metodi specifici per quella pagina.

Corridori

La fase successiva del processo è l'aggiunta dei corridori di prova. Stiamo usando JUnit in contrasto con la CLI, e questo è dove dobbiamo iniziare a strutturare le cose in modo specifico per gestire l'esecuzione parallela dei test.

corridore

Nel frammento di cui sopra da ' SearchAT.classe ' si può vedere che stiamo specificando la posizione dei file di funzionalità. Stiamo anche specificando un tag (@search) che si riferisce a uno dei nostri tag di file di funzionalità di cetriolo e una destinazione di report html per i risultati dei test.

Ciò che dice è "esegui tutti i test etichettati come @ search e scrivi i risultati nella cartella / search".

Abbiamo quindi un'altra classe, 'AutoCorrectAT ‘che fa lo stesso per tutti i test etichettati’@autocorrect'. Entrambe queste classi possono essere trovate sotto ' / src / test/java / cucumber.vvm.parallelo / cetriolo".

L'aggiunta di un altro thread è semplicemente un caso di aggiunta di una nuova classe runner con un tag diverso.

Prove parallele

Fino a questo punto, le istruzioni sono identiche alla creazione di un set relativamente semplice non parallelo di test Cucumber-JVM utilizzando WebDriver per interagire con un sito.

Ora dobbiamo andare al file Maven POM per vedere come stiamo facendo eseguire i test in parallelo.

POM config

Nello snippet sopra, puoi vedere che il plugin maven-surefire-viene utilizzato per eseguire i nostri test di accettazione – tutte le classi che terminano in *AT verranno eseguite come classe di test JUnit. Grazie a JUnit, eseguire i test in parallelo è ora un semplice caso di impostazione dell'opzione di configurazione forkCount. Nel progetto di esempio, questo è impostato su 5, il che significa che possiamo eseguire fino a 5 thread (cioè, 5 classi di corridori) alla volta.

============================

Maggiori dettagli si possono ottenere in Esecuzione di test Cucumber-JVM in parallelo articolo

Spero che questo ti aiuti.

 4
Author: eugene.polschikov, 2014-07-23 09:31:24

Presumo che si utilizza un compito di test per eseguire i vostri corridori cetriolo? Se è così, puoi usarlo nella tua build.gradle:

tasks.withType(Test) {
    maxParallelForks = 5
}

task uiTests(type: Test){  includes = ['**/*Cucumber*'] }

Questo compito UITESTS presuppone che tutte le classi Runner abbiano Cetriolo nel loro nome, se questo non ti soddisfa, puoi semplicemente scrivere ogni classe Runner lì dentro.

Ora se si fornisce un proprio corridore per ogni file di funzionalità, i diversi corridori saranno eseguiti in parallelo

Si può dare ogni caratteristica un tag diverso in alto, e poi lasciare che ogni corridore esegui solo un tag. Questo può essere configurato come

@CucumberOptions{tags = @Feature1}

In ogni classe corridore

 1
Author: Dude, 2015-04-14 14:44:25