En aquest tema, aprendrem a crear casos de prova utilitzant TestNG, un dels marcs de proves més populars per a l'automatització de proves amb Selenium. TestNG proporciona una estructura robusta per organitzar i executar proves, i ofereix característiques avançades com l'execució paral·lela, la gestió de dependències i la generació d'informes.
Objectius d'Aprenentatge
- Comprendre l'estructura bàsica d'un cas de prova TestNG.
 - Aprendre a utilitzar anotacions de TestNG per definir el cicle de vida de les proves.
 - Escriure i executar casos de prova senzills amb TestNG.
 - Organitzar proves en grups i gestionar dependències.
 
- Estructura Bàsica d'un Cas de Prova TestNG
 
Un cas de prova en TestNG es defineix com una classe Java que conté mètodes anotats amb @Test. Aquests mètodes representen les proves individuals que es volen executar.
Exemple de Cas de Prova Senzill
import org.testng.annotations.Test;
public class ExempleTest {
    @Test
    public void provaSenzilla() {
        System.out.println("Aquest és un cas de prova senzill.");
    }
}Explicació
- @Test: Aquesta anotació indica que el mètode 
provaSenzillaés un cas de prova que TestNG ha d'executar. - System.out.println: Utilitzat aquí per mostrar un missatge a la consola quan s'executa la prova.
 
- Anotacions de TestNG
 
TestNG proporciona diverses anotacions per controlar el cicle de vida de les proves. Algunes de les més comunes són:
- @BeforeSuite: Executat abans de tots els casos de prova en la suite.
 - @AfterSuite: Executat després de tots els casos de prova en la suite.
 - @BeforeTest: Executat abans de qualsevol cas de prova dins d'un 
<test>en el fitxer de configuració TestNG. - @AfterTest: Executat després de qualsevol cas de prova dins d'un 
<test>. - @BeforeClass: Executat abans de qualsevol mètode de prova en la classe actual.
 - @AfterClass: Executat després de tots els mètodes de prova en la classe actual.
 - @BeforeMethod: Executat abans de cada mètode de prova.
 - @AfterMethod: Executat després de cada mètode de prova.
 
Exemple d'Ús d'Anotacions
import org.testng.annotations.*;
public class AnotacionsTest {
    @BeforeClass
    public void setup() {
        System.out.println("Configuració abans de la classe.");
    }
    @Test
    public void prova1() {
        System.out.println("Executant prova 1.");
    }
    @Test
    public void prova2() {
        System.out.println("Executant prova 2.");
    }
    @AfterClass
    public void teardown() {
        System.out.println("Neteja després de la classe.");
    }
}Explicació
- @BeforeClass i @AfterClass: S'utilitzen per configurar i netejar recursos abans i després de l'execució de tots els mètodes de prova en la classe.
 
- Executar Casos de Prova
 
Per executar els casos de prova, necessitem un fitxer de configuració TestNG (normalment un fitxer XML) que defineixi quines classes i mètodes s'han d'executar.
Exemple de Fitxer de Configuració TestNG
<!DOCTYPE suite SYSTEM "https://testng.org/testng-1.0.dtd" >
<suite name="Suite de Proves">
    <test name="Proves Senzilles">
        <classes>
            <class name="ExempleTest"/>
            <class name="AnotacionsTest"/>
        </classes>
    </test>
</suite>Explicació
: Defineix una suite de proves. : Defineix un conjunt de proves que es poden executar junts. : Conté les classes que contenen els casos de prova. 
- Organització de Proves en Grups
 
TestNG permet agrupar proves per facilitar la seva organització i execució.
Exemple d'Agrupació de Proves
import org.testng.annotations.Test;
public class GrupTest {
    @Test(groups = {"grup1"})
    public void provaGrup1() {
        System.out.println("Prova del grup 1.");
    }
    @Test(groups = {"grup2"})
    public void provaGrup2() {
        System.out.println("Prova del grup 2.");
    }
}Explicació
- groups: L'atribut 
groupsde l'anotació@Tests'utilitza per assignar el mètode a un o més grups. 
Executar Grups de Proves
Per executar només un grup específic de proves, es pot modificar el fitxer de configuració TestNG:
<!DOCTYPE suite SYSTEM "https://testng.org/testng-1.0.dtd" >
<suite name="Suite de Proves">
    <test name="Proves per Grup">
        <groups>
            <run>
                <include name="grup1"/>
            </run>
        </groups>
        <classes>
            <class name="GrupTest"/>
        </classes>
    </test>
</suite>Exercici Pràctic
Exercici: Crea una classe de prova amb dos mètodes de prova. Un mètode ha de pertànyer al grup "login" i l'altre al grup "checkout". Escriu un fitxer de configuració TestNG per executar només el grup "login".
Solució
import org.testng.annotations.Test;
public class EcommerceTest {
    @Test(groups = {"login"})
    public void provaLogin() {
        System.out.println("Prova de login.");
    }
    @Test(groups = {"checkout"})
    public void provaCheckout() {
        System.out.println("Prova de checkout.");
    }
}Fitxer de Configuració TestNG:
<!DOCTYPE suite SYSTEM "https://testng.org/testng-1.0.dtd" >
<suite name="Suite de Proves">
    <test name="Proves de Login">
        <groups>
            <run>
                <include name="login"/>
            </run>
        </groups>
        <classes>
            <class name="EcommerceTest"/>
        </classes>
    </test>
</suite>Conclusió
En aquesta secció, hem après a crear i organitzar casos de prova utilitzant TestNG. Hem explorat l'ús d'anotacions per gestionar el cicle de vida de les proves i hem vist com agrupar proves per facilitar la seva execució. Aquestes habilitats són fonamentals per estructurar i gestionar eficientment les proves automatitzades en projectes reals. En el següent tema, explorarem com realitzar proves basades en dades amb TestNG.
Automatització de Proves amb Selenium
Mòdul 1: Introducció a l'Automatització de Proves
- Què és l'Automatització de Proves?
 - Beneficis de l'Automatització de Proves
 - Visió General de Selenium
 - Configuració del Teu Entorn
 
Mòdul 2: Començant amb Selenium
- Introducció a Selenium WebDriver
 - Instal·lació de Selenium WebDriver
 - Primer Script de Selenium
 - Comprensió de la Interfície WebDriver
 
Mòdul 3: Localització d'Elements Web
- Introducció als Localitzadors
 - Ús de Localitzadors ID i Nom
 - XPath i Selectors CSS
 - Estratègies Avançades de Localització
 
Mòdul 4: Interacció amb Elements Web
- Realització d'Accions sobre Elements Web
 - Gestió de Desplegables i Caixes de Selecció
 - Treballant amb Alertes i Pop-ups
 - Gestió de Finestres del Navegador i Frames
 
Mòdul 5: Sincronització en Selenium
Mòdul 6: Marc de Proves i Selenium
- Introducció a TestNG
 - Configuració de TestNG amb Selenium
 - Creació de Casos de Prova TestNG
 - Proves Basades en Dades amb TestNG
 
Mòdul 7: Conceptes Avançats de Selenium
- Gestió de Trucades AJAX
 - Treballant amb Cookies
 - Captura de Captures de Pantalla
 - Execució de JavaScript amb Selenium
 
Mòdul 8: Selenium Grid i Proves en Paral·lel
- Introducció a Selenium Grid
 - Configuració de Selenium Grid
 - Execució de Proves en Paral·lel
 - Proves Multinavegador
 
Mòdul 9: Integració Contínua i Selenium
- Introducció a la Integració Contínua
 - Integració de Selenium amb Jenkins
 - Automatització de l'Execució de Proves
 - Informes i Registre
 
