Rapporti personalizzati con TestNG

1. Panoramica

In questo articolo, discuteremo della generazione di log e report personalizzati utilizzando TestNG.

TestNG fornisce la propria funzione di reportistica, generando report in entrambi i formati HTML / XML. Se i test vengono eseguiti utilizzando il plug-in maven-surefire, il report assumerà la forma predefinita definita dal plug-in. Oltre al reporting integrato, fornisce un meccanismo per una facile personalizzazione delle informazioni registrate e dei report generati.

Se desideri iniziare con le basi di TestNG, consulta questo articolo.

2. Registrazione personalizzata

Prima di implementare la registrazione personalizzata, esaminiamo i registri predefiniti eseguendo il comando mvn test :

Tests run: 11, Failures: 1, Errors: 0, Skipped: 0, Time elapsed: 1.21 sec <<< FAILURE! - in TestSuite whenCalledFromSuite_thanOK(baeldung.com.RegistrationTest) Time elapsed: 0.01 sec <<< FAILURE! java.lang.AssertionError: Test Failed due to some reason at baeldung.com.RegistrationTest.whenCalledFromSuite_thanOK( RegistrationTest.java:15) Results : Failed tests: RegistrationTest.whenCalledFromSuite_thanOK:15 Test Failed due to some reason Tests run: 11, Failures: 1, Errors: 0, Skipped: 0 [ERROR] There are test failures.

Questi log non ci forniscono alcuna informazione sull'ordine di esecuzione, o su quando un particolare test è stato avviato / completato ecc.

Se vogliamo conoscere il risultato di ogni corsa insieme ad alcuni dati personalizzati, possiamo implementare i nostri log e rapporti. TestNG fornisce un modo per implementare report e log personalizzati.

In poche parole, possiamo implementare l' interfaccia org.testng.ITestListener per la registrazione o l' interfaccia org.testng.IReporter per la creazione di report. Queste classi implementate vengono notificate per eventi come inizio, fine, errore, ecc. Di test e suite.

Andiamo avanti e implementiamo alcuni semplici log personalizzati:

public class CustomisedListener implements ITestListener { // ... @Override public void onFinish(ITestContext testContext) { LOGGER.info("PASSED TEST CASES"); testContext.getPassedTests().getAllResults() .forEach(result -> {LOGGER.info(result.getName());}); LOGGER.info("FAILED TEST CASES"); testContext.getFailedTests().getAllResults() .forEach(result -> {LOGGER.info(result.getName());}); LOGGER.info( "Test completed on: " + testContext.getEndDate().toString()); } //... } 

Si noti come abbiamo sovrascritto il metodo onFinish () , che verrà richiamato quando tutte le esecuzioni di test saranno complete e tutte le configurazioni saranno completate. Allo stesso modo, possiamo sovrascrivere altri metodi - come onTestStart (), onTestFailure () ecc (e trovare i dettagli su questi altri metodi qui).

Ora includiamo questo listener nella configurazione XML:

Una volta eseguito, il listener verrà richiamato su ogni evento e registrerà le informazioni come implementato. Questo potrebbe essere utile per eseguire il debug della nostra esecuzione di test.

I registri di output:

... INFO CUSTOM_LOGS - Started testing on: Sat Apr 22 14:39:43 IST 2017 INFO CUSTOM_LOGS - Testing: givenNumberFromDataProvider_ifEvenCheckOK_thenCorrect INFO CUSTOM_LOGS - Tested: givenNumberFromDataProvider_ifEvenCheckOK_thenCorrect Time taken:6 ms INFO CUSTOM_LOGS - Testing: givenNumberObjectFromDataProvider_ifEvenCheckOK_thenCorrect INFO CUSTOM_LOGS - Failed : givenNumberObjectFromDataProvider_ifEvenCheckOK_thenCorrect INFO CUSTOM_LOGS - PASSED TEST CASES INFO CUSTOM_LOGS - givenNumberFromDataProvider_ifEvenCheckOK_thenCorrect INFO CUSTOM_LOGS - FAILED TEST CASES INFO CUSTOM_LOGS - givenNumberObjectFromDataProvider_ifEvenCheckOK_thenCorrect INFO CUSTOM_LOGS - Test completed on: Sat Apr 22 14:39:43 IST 2017 ...

I log personalizzati ci forniscono le informazioni mancanti nei log predefiniti.

3. Rapporti personalizzati

Quando eseguiamo test utilizzando il plug-in, genera report in formati HTML / XML nella directory target / surefire-reports :

Se vogliamo eseguire una particolare suite di test utilizzando un file XML TestNG, dobbiamo elencarlo nel tag di configurazione del plugin sicuro :

   src\test\resources\parametrized_testng.xml   

Dopo la registrazione personalizzata, ora proviamo a creare alcuni rapporti personalizzati in cui implementiamo l' interfaccia org.testng.IReporter e sovrascriviamo il metodo generateReport () :

public void generateReport( List xmlSuites, List suites, String outputDirectory) { String reportTemplate = initReportTemplate(); String body = suites .stream() .flatMap(suiteToResults()) .collect(Collectors.joining()); String report = reportTemplate.replaceFirst("", String.format("%s", body)); saveReportTemplate(outputDirectory, report); }

Il metodo sottoposto a override accetta tre argomenti:

  • xmlSuite: contiene un elenco di tutte le suite menzionate nel file XML
  • suites - un oggetto elenco, che contiene tutte le informazioni sull'esecuzione del test
  • outputDirectory - il percorso della directory in cui vengono generati i rapporti

Abbiamo utilizzato il metodo initReportTemplate () per caricare un modello HTML, la funzione suiteToResults () che richiama la funzione resultsToRow () per gestire le parti interne della generazione del report:

private Function
    
      suiteToResults() { return suite -> suite.getResults().entrySet() .stream() .flatMap(resultsToRows(suite)); } private Function
     
       resultsToRows(ISuite suite) { return e -> { ITestContext testContext = e.getValue().getTestContext(); Set failedTests = testContext.getFailedTests().getAllResults(); Set passedTests = testContext.getPassedTests().getAllResults(); Set skippedTests = testContext.getSkippedTests().getAllResults(); String suiteName = suite.getName(); return Stream .of(failedTests, passedTests, skippedTests) .flatMap(results -> generateReportRows(e.getKey(), suiteName, results).stream()); }; }
     
    

e saveReportTemplate () per salvare il risultato completo.

Includere il reporter nel file di configurazione XML:

Ecco l'output dei nostri rapporti:

Rispetto al rapporto HTML infallibile predefinito, questo rapporto fornisce un'immagine chiara e nitida del risultato, in un'unica tabella. Che è più comodo e facile da leggere.

4. Conclusione

In questo breve tutorial, abbiamo imparato come generare rapporti di prova con il plug-in Surefire Maven. Abbiamo anche esaminato la personalizzazione dei log e la generazione di report personalizzati con TestNG. Per maggiori dettagli su TestNG come scrivere casi di test, suite, ecc., Fare riferimento alla nostra introduzione

Per maggiori dettagli su TestNG, come scrivere casi di test, suite, inizia sicuramente con il nostro articolo introduttivo.

Come sempre l'implementazione degli snippet può essere trovata su GitHub.