Dataprovider e TestNG XML: Parametrizzazione in Selenium (esempio)

Giu 9, 2021
admin

Come creiamo un software, desideriamo sempre che funzioni diversamente con un diverso insieme di dati. Quando si tratta di testare lo stesso pezzo di software, non possiamo essere ingiusti nel testarlo con un solo set di dati. Anche in questo caso, dobbiamo verificare che il nostro sistema prenda tutti i set di combinazioni che ci si aspetta di supportare. Per questo, abbiamo bisogno di parametrizzare i nostri scipts di test. Ecco la parametrizzazione nell’immagine.

Parametrizzazione in Selenium

La parametrizzazione in Selenium è un processo per parametrizzare gli script di test al fine di passare più dati all’applicazione in fase di esecuzione. È una strategia di esecuzione che esegue automaticamente i casi di test più volte utilizzando valori diversi. Il concetto ottenuto parametrizzando gli script di test è chiamato Data Driven Testing.

In questo tutorial, imparerai-

  • Tipo di parametrizzazione in TestNG-
  • Annotazione Parametri con Testng.xml
  • Risoluzione dei problemi
  • Parametri usando Dataprovider
  • Invochiamo DataProvider da classi diverse
  • Tipi di parametri in Dataprovider

Tipo di parametrizzazione in TestNG-

Per rendere la parametrizzazione più chiara, passeremo attraverso le opzioni di parametrizzazione in uno dei framework più popolari per Selenium Webdriver – TestNG.

Ci sono due modi in cui possiamo ottenere la parametrizzazione in TestNG

  1. Con l’aiuto dell’annotazione Parameters e del file TestNG XML.

  2. Con l’aiuto dell’annotazione DataProvider.

Parametri da Testng.xml possono essere a livello di suite o di test

Parametro da DataProvider può prendere Metodo e ITestContext come parametro.

Studiateli in dettaglio –

Parametri Annotati in TestNG

Parametri Annotati in TestNG è un metodo usato per passare valori ai metodi di test come argomenti usando file .xml. Agli utenti può essere richiesto di passare i valori ai metodi di test durante l’esecuzione. Il metodo di annotazione @Parameters può essere usato in qualsiasi metodo che abbia l’annotazione @Test, @Before, @After o @Factory.

Annotazione Parametri con Testng.xml

Seleziona la parametrizzazione usando le annotazioni quando vuoi affrontare la complessità & il numero di combinazioni di input è minore.

Vediamo come funziona

Scenario del test

Passo 1) Lanciare il browser & andare su Google.com

Passo 2) Inserire una parola chiave di ricerca

Passo 3) Verificare che il valore inserito sia uguale a quello fornito dai nostri dati di test

Passo 4) Ripetere 2 & 3 fino a quando tutti i valori sono inseriti

Autore del test SearchKey
Guru99 India
Krishna USA
Bhupesh Cina

Ecco un esempio di come farlo SENZA parametri

Uno studio, l’esempio precedente. Provate a immaginare quanto sarà complesso il codice quando lo faremo per 3 combinazioni di input

Ora, parametrizziamo questo usando TestNG

Per farlo, è necessario

  • Creare un file XML che memorizzerà i parametri
  • Nel test, aggiungere l’annotazione @Parametri

Ecco il codice completo

Test Level TestNG.xml

File ParameterWithTestNGXML.java

Istruzioni per eseguire lo script, selezionare il file XML ed eseguire come Test NG Suite

Click destro su .xml file -> Esegui come -> Testng Suite (Nota : Suite)

Ora, i parametri possono essere definiti a 2 livelli

  1. Livello suite – I parametri dentro il tag <suite> del file TestNG XML saranno un parametro di livello suite.
  2. Livello test — I parametri all’interno del tag <Test> del file XML di test saranno un parametro di livello test.

Ecco lo stesso test con parametri di livello suite

NOTA: Nel caso in cui il nome del parametro sia lo stesso nel livello suite e nel livello test, il parametro di livello test avrà la preferenza sul livello suite. Quindi, in quel caso, tutte le classi all’interno di quel livello di test condivideranno il parametro sovrascritto, e le altre classi che sono fuori dal livello di test condivideranno il parametro del livello di suite.

Risoluzione dei problemi

Problema # 1 Il valore del parametro in testng.xml non può essere inserito nel parametro del metodo di test corrispondente, verrà lanciato un errore.

Considera il seguente esempio

Qui, l’attributo ‘author’ è uguale a ‘Guru99’ che è una stringa e nel metodo di test corrispondente si aspetta un valore intero, quindi avremo un’eccezione.

Problema # 2 I tuoi @Parametri non hanno un valore corrispondente in testing.xml.

Puoi risolvere questa situazione aggiungendo l’annotazione @optional nel parametro corrispondente nel metodo di test.

Problema # 3: vuoi testare più valori dello stesso parametro usando Testng.xml

La risposta semplice è che questo non può essere fatto! Puoi avere più parametri diversi, ma ogni parametro può avere un solo valore. Questo aiuta a prevenire l’hardcoding dei valori nello script. Questo rende il codice riutilizzabile. Pensatelo come un file di configurazione per il vostro script. Se vuoi usare più valori per un parametro usa DataProviders

Data Provider in TestNG

Data Provider in TestNG è un metodo usato quando un utente ha bisogno di passare parametri complessi. Parametri complessi devono essere creati da Java come oggetti complessi, oggetti da file di proprietà o da un database possono essere passati dal metodo data provider. Il metodo è annotato da @DataProvider e restituisce un array di oggetti.

Parametri usando Dataprovider

L’annotazione @Parameters è facile ma per testare con più serie di dati dobbiamo usare Data Provider.

Per riempire migliaia di moduli web usando il nostro framework di test abbiamo bisogno di una metodologia diversa che possa darci un set di dati molto grande in un singolo flusso di esecuzione.

Questo concetto guidato dai dati si ottiene con l’annotazione @DataProvider in TestNG.

Ha solo un attributo ‘name’. Se non si specifica l’attributo name allora il nome del DataProvider sarà uguale al nome del metodo corrispondente.

Il DataProvider restituisce un oggetto bidimensionale JAVA al metodo di test e il metodo di test, invocherà M volte in un array di oggetti di tipo M*N. Per esempio, se il DataProvider restituisce un array di 2*3 oggetti, il testcase corrispondente sarà invocato 2 volte con 3 parametri ogni volta.

Esempio completo

Invoca DataProvider da una classe diversa

Per default, DataProvider risiede nella stessa classe dove si trova il metodo di test o nella sua classe base. Per metterlo in qualche altra classe abbiamo bisogno di rendere il metodo DataProvider come statico e nel metodo di test abbiamo bisogno di aggiungere un attributo dataProviderClass nell’annotazione @Test.

Esempio di codice

TestClass ParameterDataproviderWithClassLevel.java

DataproviderClass.java

Tipi di parametri in Dataprovider

Ci sono due tipi di parametri supportati dal metodo DataProvider.

Method- Se lo stesso DataProvider deve comportarsi diversamente con diversi metodi di prova, usa il parametro Method.

Nel seguente esempio,

  • Controlliamo se il nome del metodo è testMethodA.
  • Se sì restituisce un set di valori
  • Se no restituisce un altro set di valori

Ecco l’output

ITestContext- Può essere usato per creare diversi parametri per i casi di test basati su gruppi.

Nella vita reale, si può usare ITestContext per variare i valori dei parametri in base ai metodi di test, agli host, alle configurazioni del test.

Nel seguente esempio di codice

  • Abbiamo 2 gruppi A & B
  • Ogni metodo di test è assegnato a un gruppo
  • Se il valore del gruppo è A, viene restituito un particolare set di dati
  • Se il valore del gruppo è B, viene restituito un altro set di dati

Nota: Se eseguite direttamente la vostra classe testng, chiamerà prima dataprovider che non può ottenere informazioni sui gruppi perché i gruppi non sono disponibili. Ma invece se chiamate questa classe tramite testng.xml, avrà le informazioni sui gruppi disponibili con ITestContext. Usate il seguente XML per chiamare il test

Summary:

  • La parametrizzazione è necessaria per creare Data Driven Testing.
  • TestNG supporta due tipi di parametrizzazione, usando @Parameter+TestNG.xml e usando@DataProvider
  • In @Parameter+TestNG.xml i parametri possono essere messi a livello di suite e di test. Se

    lo stesso nome del parametro è dichiarato in entrambi i posti; il parametro di livello test avrà la preferenza sul parametro di livello suite.

  • utilizzando @Parameter+TestNG.xml solo un valore può essere impostato alla volta, ma @DataProvider restituisce un array 2d di Object.
  • Se DataProvider è presente nella classe diversa da quella in cui risiede il metodo di test, DataProvider dovrebbe essere un metodo statico.
  • Ci sono due parametri supportati da DataProvider sono Method e ITestContext.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.