Visualizzazione post con etichetta testNg. Mostra tutti i post
Visualizzazione post con etichetta testNg. Mostra tutti i post

Testng - uso del tag package

Qualche post fa si è definito un test tramite questa porzione di xml di configurazione:


<parameter name="parameter" value="Questo è il parametro"/>
<test name="Test dei parametri">
<classes>
<class name="it.testng.parameters.ParametersTest" />
</classes>
</test>


Può nascere durante i test la volontà di eseguire tutti i test riferendosi al package anzichè ad una specifica classe. Niente di più semplice! E' sufficiente utilizzare il tag <packages> come mostrato di seguito:

<test name="Test Package">
<packages>
<package name="it.testng.mypackage"></package>
</packages>
<test>

TestNg - Passaggio dei parametri

Fin qui le differenze tra TestNg e Junit non appaiono così evidenti.Ma TestNG è un framework avanzato e non vi è bisogno di molto per mostrarlo.
Per esempio con testNg non c'è più la necessità di creare costanti o qualsiasi altro metodo per ottenere dei parametri (dati) da utilizzare nei singoli test.
TestNG fornisce un'annotazione @Parameter utile per passare dati ai singoli metodi di test.
Per esempio:
Creare un test http://tommyalf.blogspot.com/2008/05/testng-primo-test.html

package it.testng.parameters;

import static org.testng.Assert.*;
import org.testng.annotations.Parameters;
import org.testng.annotations.Test;

public class ParametersTest {

@Parameters("parameter")
@Test
public void parametersTest(String parameter) {
assertEquals("Questo è il parametro", parameter);
}
}


Quindi il metodo parametersTest verrà invocato dal framework passando il parametro relativo a parameter.
Il valore di parameter si imposta sempre tramite il file testng.xml:

<parameter name="parameter" value="Questo è il parametro"/>
<test name="Test dei parametri">
<classes>
<class name="it.testng.parameters.ParametersTest" />
</classes>
</test>

TestNG.zip V1.0 - Prima Versione demo di utilizzo


Clicca per eseguire il download della prima versione demo.
Potrai ottenere una prima applicazione dei test con il framework TestNg.

TestNg - Dipendenze (SoftDependencies)

SoftDependencies è il metodo di TestNg per eseguire i test rispettando l'ordine delle dipendenze,
senza però che il successo o il fallimento di una dipendenza dipenda da un'altra.

Esso è possibile realizzarlo aggiungendo il
parametro alwaysRun=true nell'annotazione @Test

@Test(alwaysRun=true)

TestNg - Dipendenze (HardDependencies)

Spesso è necessario eseguire i test seguendo un ordine specificato.
TestNg permette di aver questa funzionalità secondo due modelli:

HardDependencies : i test vengono eseguiti secondo l'ordine costituito dalle dipendenze. Se il test fallisce verrà notificato come SKIP e non FAIL.

Ad esempio, se ho un test "tradizionale" nel quale sono presenti 20 dipendenze delle quali soltanto 10 falliscono avrò questo risultato:

10 test eseguiti con successo (dipendenze non fallite) e 11 failure.

In questo modo sono portato a pensare che i miei test sono falliti e che devo fare 11 fix. Invece TestNG con l'HardDependencies dimostra chiaramente che dei 21 test, 10 sono le dipendenze fallite mentre il test che dipende da questi 10 test è skippato. Il report infatti è:

10 test eseguiti con successo (dipendenze non fallite), 10 failure (dipendenze fallite), 1 SKIP (test dipendente).

TestNg mostra in modo più accurato ciò che succede durante l'esecuzione dei test.

TestNG - Gestione dei gruppi di test

E' anche possibile definire dei gruppi nei test. Così si possono realizzare test divisi per : 'unit test', 'integration test' ecc.

Ciò può essere realizzato tramite l'annotazione @Test e con il parametro 'groups'.




package it.testng.samplegroup.test;

import org.testng.annotations.Test;


public class SampleGroupTest {

@Test(groups = {"gruppo 1", "gruppo 2"})
public void TestMethod1() {
System.out.println("Metodo 1");
}

@Test(groups = {"gruppo 2"})
public void TestMethod2() {
System.out.println("Metodo 2");
}

@Test(groups = {"gruppo 3"})
public void TestMethod3() {
System.out.println("Metodo 3");
}

}




e configurando il file testNg.xml aggiungendo :


<test name="TestGroup">
<groups>
<run>
<include name="gruppo 2" />
</run>
</groups>
<classes>
<class name="it.testng.samplegroup.test.SampleGroupTest" />
</classes>
</test>



E' anche possibile escludere dai test un gruppo

inserendo all'interno di il tag
es:


Si può realizzare anche una gerarchia dei gruppi



@Test(groups = { "main" })
public class All {

@Test(groups = { "little" )
public void method1() { ... }

public void method2() { ... }
}


il method2 riferisce al gruppo "main" invece il method1 viene eseguito per i test di "main" che quelli di "little"

TestNg - configurazione di Maven con testng.xml

Installare testNG in Maven è molto semplice, è sufficiente:

Aggiungere la dipendenza

<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>5.7</version>
<scope>test</scope>
<classifier>jdk15</classifier>
</dependency>


Configurare il plug-in Surefire impostando il file di configurazione di TestNG nel seguente modo:

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.4</version>
<configuration>
<scope>test</scope>
<forkmode>always</forkmode>
<excludes></excludes>
<suiteXmlFiles>
<suiteXmlFile>testng.xml</suiteXmlFile>
</suiteXmlFiles>
</configuration>
</plugin>

TestNg - Primo Test

Dopo aver creato il Progetto maven SampleOneTestNG in eclipse procedere
con il creare una classe nei test di nome SampleOneTest così composta:

package it.testng.sampleone.test;

import org.testng.annotations.Test;

@Test
public class Test1 {
public void sampleOne() {
System.out.println("ok!");
}
}


da notare che l'annotazione Test ha lo stesso nome di quella di junit ma riferisce ad un jar diverso (org.testng.annotations.Test)

Successivamente è necessario creare il file testng.xml:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >

<suite name="SuiteProva" verbose="1" >
<test name="Prova1" >
<classes>
<class name="it.testng.sampleone.test.SampleOneTest" />
</classes>
</test>

</suite>