Pelaporan Tersuai dengan TestNG

1. Gambaran keseluruhan

Dalam artikel ini, kita akan membincangkan penghasilan log dan laporan khas menggunakan TestNG.

TestNG menyediakan ciri pelaporannya sendiri - menghasilkan laporan dalam format HTML / XML. Sekiranya ujian dijalankan menggunakan plugin maven-surefire, laporan akan mengambil bentuk lalai yang ditentukan oleh pemalam. Selain daripada pelaporan bawaan, ini menyediakan mekanisme untuk penyesuaian mudah maklumat log dan laporan yang dihasilkan.

Sekiranya anda ingin memulakan dengan asas TestNG, lihat artikel ini.

2. Pembalakan Custom

Sebelum kita melaksanakan pembalakan tersuai, mari kita periksa log lalai dengan melaksanakan perintah ujian mvn :

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 maklumat mengenai urutan pelaksanaan, atau mengenai kapan ujian tertentu dimulakan / diselesaikan dll.

Sekiranya kita ingin mengetahui hasil setiap larian bersama dengan beberapa data tersuai, kita dapat melaksanakan log dan laporan kita sendiri. TestNG menyediakan cara untuk melaksanakan laporan dan pembalakan tersuai.

Ringkasnya, kita boleh melaksanakan antara muka org.testng.ITestListener untuk log atau antara muka org.testng.IReporter untuk melaporkan. Kelas-kelas yang dilaksanakan ini diberitahu untuk acara seperti permulaan, akhir, kegagalan dan lain-lain ujian dan suite.

Mari teruskan dan melaksanakan beberapa pembalakan khas yang mudah:

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 mengganti kaedah onFinish () , yang akan dipanggil apabila semua pelaksanaan ujian selesai dan semua konfigurasi selesai. Begitu juga, kita boleh mengatasi kaedah lain - seperti onTestStart (), onTestFailure () dan lain-lain (dan dapatkan perincian mengenai kaedah lain di sini).

Sekarang mari sertakan pendengar ini dalam konfigurasi XML:

Setelah dilaksanakan, pendengar akan dipanggil pada setiap acara dan akan mencatat maklumat seperti yang kita laksanakan. Ini mungkin berguna untuk menyahpepijat pelaksanaan ujian kami.

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

Log tersuai memberi kami maklumat yang hilang dalam log lalai.

3. Laporan Tersuai

Apabila kita menjalankan ujian menggunakan plugin, ia menghasilkan laporan dalam format HTML / XML dalam direktori target / surefire-laporan :

Sekiranya kita ingin menjalankan rangkaian ujian tertentu menggunakan fail XML TestNG, kita perlu mencantumkannya dalam teg konfigurasi plugin surefire :

   src\test\resources\parametrized_testng.xml   

Setelah log masuk tersuai, sekarang mari kita cuba membuat beberapa laporan tersuai di mana kita melaksanakan antara muka org.testng.IReporter dan menimpa kaedah createReport () :

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

Kaedah yang diganti mengambil tiga hujah:

  • xmlSuite - mengandungi senarai semua suite yang disebutkan dalam fail XML
  • suite - objek senarai, menyimpan semua maklumat mengenai pelaksanaan ujian
  • outputDirectory - jalan direktori di mana laporan dihasilkan

Kami menggunakan kaedah initReportTemplate () untuk memuat templat HTML, fungsi suiteToResults () yang memanggil fungsi resultsToRow () untuk menangani dalaman 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 yang lengkap.

Sertakan wartawan dalam fail konfigurasi XML:

Berikut adalah hasil laporan kami:

Sebagai perbandingan dengan laporan HTML yang pasti, laporan ini memberikan gambaran hasil yang jelas dan jelas, dalam satu jadual. Mana lebih senang dan senang dibaca.

4. Kesimpulan

Dalam tutorial ringkas ini, kami belajar tentang cara menghasilkan laporan ujian dengan plugin Surefire Maven. Kami juga berusaha menyesuaikan log dan menghasilkan laporan yang disesuaikan dengan TestNG. Untuk maklumat lebih lanjut mengenai TestNG seperti cara menulis kes ujian, suite dan lain-lain, rujuk kepada pengenalan kami

Untuk maklumat lebih lanjut mengenai TestNG, seperti cara menulis kes ujian, suite, mulakan dengan artikel pengenalan kami.

Seperti biasa pelaksanaan potongan boleh didapati di GitHub.