2013-04-20 14 views
19

Si utilizza la versione finale di arquillian-junit-container 1.0.0 per il test di Junit.Distribuzione singola per tutti i casi di test in Arquillian

Abbiamo così tante classi di test e ogni classe di test come metodo @Deployment, quindi quando eseguo tutti i test insieme, crea problemi di memoria e prestazioni.

Qualcuno può aiutarmi a risolvere questo problema spiegando come evitare la distribuzione multipla per ogni singola classe. Come possiamo ottenere Una distribuzione singola per tutti i casi di test in Arquillian?

risposta

1

Perché dovresti avere il metodo di implementazione in ogni classe? Io uso Arquillian per i test funzionali con Drone e Graphene e ho una classe base con metodo di implementazione, inizializzazione di Selenium Web Driver, pochi metodi utils e ogni altra classe di test è semplicemente estendendo questa classe e riutilizzando l'istanza di Web Driver.

Non vedo perché non dovrebbe funzionare nel tuo caso (o anche senza estendere la classe base).

Ok, questo è come appare

public class WebDriverTest extends Arquillian { //I am using TestNG 

    @Drone 
    protected WebDriver driver; 

    @ArquillianResource 
    private URL contextRoot; 

    @Deployment(testable = false) //functional tests cannot run in container 
    public static WebArchive createDeployment() { 
     File archive = new File("target/myApp.war"); 
     ShrinkWrap.createFromZipFile(WebArchive.class, archive); 
    } 
} 


public class TestClass extends WebDriverTest { 

    @Test 
    public void test1() {} 

    @Test 
    public void test2() {} 
} 

Tutto sta funzionando bene qui. Assicurarsi inoltre di avere diritto dipendenze Maven, questi deve essere presente, al fine di eseguire i test funzionali (poi fare dipendenza per tutto il necessario da queste distinte base)

<dependencyManagement> 
    <dependencies> 
     <dependency> 
      <groupId>org.jboss.arquillian.selenium</groupId> 
      <artifactId>selenium-bom</artifactId> 
      <version>${selenium.version}</version> 
      <type>pom</type> 
      <scope>import</scope> 
     </dependency> 
     <dependency> 
      <groupId>org.jboss.arquillian</groupId> 
      <artifactId>arquillian-bom</artifactId> 
      <version>${arquillian-core.version}</version> 
      <type>pom</type> 
      <scope>import</scope> 
     </dependency> 
     <dependency> 
      <groupId>org.jboss.arquillian.extension</groupId> 
      <artifactId>arquillian-drone-bom</artifactId> 
      <version>${arquillian-drone.version}</version> 
      <type>pom</type> 
      <scope>import</scope> 
     </dependency> 
    </dependencies> 
</dependencyManagement> 

EDIT

Ok, in base a questo JIRA non vedrete questa funzione in Arquillian fino alla versione 2.0.0.CR1. Quindi il codice che ho menzionato sopra è il meglio che puoi ottenere adesso :-)

+0

puoi fornire l'esempio perché ho provato questo e non funziona sul mio terminale –

+6

Petr, la tua soluzione non darebbe ancora più chiamate al metodo 'createDeployment' (uno per ogni sottoclasse)? Quello che Ranu sta cercando di ottenere è schierarlo una sola volta. –

2

Penso che ti stia chiedendo perché Arquillian debba distribuire una nuova guerra per ogni classe di test quando si esegue il test. Ho il metodo di distribuzione descritto da Petr Mensik, ma ogni classe di test verrà ancora distribuita nella propria guerra quando si eseguono i test. Metterlo nella super classe semplifica solo il codice da una prospettiva di meno linee. Significa che ogni classe di test che è sotto classe avrà la stessa implementazione. Ciò significa che il tuo deployment sarà il super set di dipendenze, e quindi molto più grande di farlo individualmente. Penso che sia più facile da gestire e valga il prezzo soprattutto con progetti più grandi.

Per rispondere alla tua domanda, sembra che non sarai in grado di raggruppare i test e distribuire una guerra per testare fino alla versione 2.0 (prevista alla fine di quest'anno?).

+0

Ho lo stesso problema di OP. Arquillian sembra una buona idea. Ma rimuovendo prima il supporto per il contenitore incorporato, costringendo tutti a usare Arquillian e solo poi rendersi conto di quanto manca, questo è solo sbagliato. – sm4

9

Non è possibile, ufficialmente, ancora.

Il numero JIRA ARQ-197 è stato creato per supportare l'esecuzione di più classi di test su una singola distribuzione. Nel 2010! Se si desidera questa funzione, si prega di votare per questo.

Questo è il numero più votato di Arquillian. Attualmente è in programma per la versione 2.0.0.CR1, che potrebbe essere la prossima versione, ma non riesco a trovare un piano di roadmap/release ovunque che lo confermi.

Nel frattempo, c'è l'Arquillian Suite Extension (l'ultima incarnazione è here). Non è ufficiale, e quindi ci sono dei limiti, ma il codice base originale è stato scritto da uno degli sviluppatori principali di Arquillian per dimostrare che alla fine avrebbero potuto supportare le suite JUnit. Il problema per rendere ufficiale questo supporto è here ed è il secondo problema più votato di Arquillian.

+2

L'implementazione è finalmente in corso. Puoi trovare la discussione in corso qui: http://discuss.arquillian.org/t/arquillian-core-suite-subsuite-support/162 – JanM

Problemi correlati