Pelaporan Kustom dengan TestNG

1. Ikhtisar

Pada artikel ini, kita akan membahas pembuatan custom logging dan laporan menggunakan TestNG.

TestNG menyediakan fitur pelaporannya sendiri - menghasilkan laporan dalam format HTML / XML. Jika pengujian dijalankan menggunakan maven-surefire-plugin, laporan akan menggunakan format default yang ditentukan oleh plugin. Selain pelaporan bawaan, ini menyediakan mekanisme untuk memudahkan penyesuaian informasi yang dicatat dan laporan yang dihasilkan.

Jika Anda ingin memulai dengan dasar-dasar TestNG, lihat artikel ini.

2. Pembuatan Log Kustom

Sebelum kita menerapkan custom logging, mari kita lihat log default dengan menjalankan perintah 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.

Log ini tidak memberi kami informasi apa pun tentang urutan eksekusi, atau tentang kapan pengujian tertentu dimulai / diselesaikan, dll.

Jika kita ingin mengetahui hasil dari setiap proses bersama dengan beberapa data khusus, kita dapat menerapkan log dan laporan kita sendiri. TestNG menyediakan cara untuk mengimplementasikan laporan kustom dan logging.

Sederhananya, kita dapat mengimplementasikan antarmuka org.testng.ITestListener untuk logging atau antarmuka org.testng.IReporter untuk pelaporan. Kelas yang diimplementasikan ini mendapatkan pemberitahuan untuk acara seperti mulai, berakhir, kegagalan, dll. Dari pengujian dan rangkaian.

Mari lanjutkan dan terapkan beberapa custom logging sederhana:

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()); } //... } 

Perhatikan bagaimana kita telah mengganti metode onFinish () , yang akan dipanggil ketika semua eksekusi uji selesai dan semua konfigurasi telah selesai. Demikian pula, kita bisa mengganti metode lain - seperti onTestStart (), onTestFailure () dll (dan menemukan detail tentang metode lain ini di sini).

Sekarang mari kita sertakan listener ini dalam konfigurasi XML:

Setelah dijalankan, pendengar akan dipanggil di setiap acara dan akan mencatat informasi saat kami menerapkan. Ini mungkin berguna untuk men-debug eksekusi uji kami.

Log keluaran:

... 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 ...

Log khusus memberi kami informasi yang hilang di log default.

3. Laporan Kustom

Saat kami menjalankan pengujian menggunakan plugin, itu menghasilkan laporan dalam format HTML / XML di direktori target / surefire-reports :

Jika kita ingin menjalankan rangkaian pengujian tertentu menggunakan file XML TestNG, kita perlu mencantumkannya di tag konfigurasi plugin yang pasti :

   src\test\resources\parametrized_testng.xml   

Setelah pembuatan log khusus, sekarang mari kita coba membuat beberapa laporan khusus tempat kita mengimplementasikan antarmuka org.testng.IReporter dan mengganti metode 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); }

Metode yang diganti membutuhkan tiga argumen:

  • xmlSuite - berisi daftar semua suite yang disebutkan dalam file XML
  • suites - objek daftar, yang menyimpan semua informasi tentang eksekusi pengujian
  • outputDirectory - jalur direktori tempat laporan dibuat

Kami menggunakan initReportTemplate () metode untuk memuat template HTML, suiteToResults () fungsi yang memanggil resultsToRow () fungsi untuk menangani internal menghasilkan laporan:

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()); }; }
     
    

dan saveReportTemplate () untuk menyimpan hasil lengkap.

Sertakan reporter dalam file konfigurasi XML:

Berikut hasil dari laporan kami:

Dibandingkan dengan laporan HTML pasti-api default, laporan ini memberikan gambaran yang jelas dan tajam tentang hasilnya, dalam satu tabel. Mana yang lebih nyaman dan mudah dibaca.

4. Kesimpulan

Dalam tutorial singkat ini, kita belajar tentang bagaimana membuat laporan pengujian dengan plugin Surefire Maven. Kami juga mempertimbangkan untuk menyesuaikan log dan menghasilkan laporan yang disesuaikan dengan TestNG. Untuk detail lebih lanjut tentang TestNG seperti cara menulis kasus uji, suite, dll. Lihat pengantar kami

Untuk detail lebih lanjut tentang TestNG, seperti cara menulis kasus uji, suite, mulailah dengan artikel pengantar kami.

Seperti biasa, penerapan cuplikan dapat ditemukan di GitHub.