Skip to content

рдЧреЛрдб рдУрдореВ, рдЖрддрд╛ рдореА рддреБрдЭрдВ Day 46: Test Outcomes + Listeners + Extent Reports рдЪреЗ notes, рдкреВрд░реНрдгрдкрдгреЗ TestNG style, industry-level clarity, Marathi + English рднрд╛рд╖реЗрдд, рд╕рдВрдкреВрд░реНрдг detail рдордзреНрдпреЗ рд▓рд┐рд╣реВрди рджреЗрдд рдЖрд╣реЗ тАФ рдПрдХрджрдо рддреБрдЭреНрдпрд╛ "Day 45" рдЪреНрдпрд╛ рдиреЛрдЯреНрд╕рдЪреНрдпрд╛ рдлреЙрд░реНрдореЕрдЯрд╕рд╛рд░рдЦрдВ.


ЁЯУШ Day 46 Notes тАУ Test Outcomes, Listeners, and Extent Reports


ЁЯзк Test Outcomes рдореНрд╣рдгрдЬреЗ рдХрд╛рдп?

ЁЯСЙ Test Case рдЪреЗ рддреАрди possible outcomes рдЕрд╕рддрд╛рдд:

  1. тЬЕ Pass тАУ Test рд╕рдЧрд│реНрдпрд╛ expectations meet рдХрд░рддрдВ.

  2. тЭМ Fail тАУ Test рдордзреНрдпреЗ рдХрд╛рд╣реА assertion mismatch рд╣реЛрддрдВ.

  3. тЪая╕П Skipped тАУ рдХрд╛рд╣реА рдХрд╛рд░рдгрд╛рд╕реНрддрд╡ (e.g. dependency failure, conditions) test execute рд╣реЛрдд рдирд╛рд╣реА.


ЁЯФБ Post Actions рдореНрд╣рдгрдЬреЗ рдХрд╛рдп?

ЁЯСЙ Test run рдЭрд╛рд▓реНрдпрд╛рдирдВрддрд░ рдЬреЗ actions perform рд╣реЛрддрд╛рдд, рддреНрдпрд╛рдВрдирд╛ Post Actions рдореНрд╣рдгрддрд╛рдд.

рдЙрджрд╛.:

  • Report рдмрдирд╡рдгреЗ

  • Result update рдХрд░рдгреЗ

  • Screenshot attach рдХрд░рдгреЗ (failure scenario рдордзреНрдпреЗ)

  • Email notification рдкрд╛рдард╡рдгреЗ


ЁЯФФ Listeners рдореНрд╣рдгрдЬреЗ рдХрд╛рдп?

ЁЯОп Definition:

Listeners рд╣реЗ рдЕрд╕реЗ classes рдЕрд╕рддрд╛рдд рдЬреЗ test life-cycle рдЪреЗ event рдРрдХрддрд╛рдд рдЖрдгрд┐ рддреНрдпрд╛рд╡рд░ action рдШреЗрддрд╛рдд.

рдЙрджрд╛.:

  • Test рд╕реБрд░реВ рдЭрд╛рд▓рдВ рдХреА тЖТ onTestStart() execute рд╣реЛрддреЛ

  • Test рдкрд╛рд╕ рдЭрд╛рд▓рдВ рдХреА тЖТ onTestSuccess()

  • Test fail рдЭрд╛рд▓рдВ рдХреА тЖТ onTestFailure()

  • Test skip рдЭрд╛рд▓рдВ рдХреА тЖТ onTestSkipped()


ЁЯзй ITestListener Interface Explained

ЁЯСЙ TestNG рдордзреНрдпреЗ ITestListener рдирд╛рд╡рд╛рдЪрдВ рдПрдХ inbuilt interface рдЖрд╣реЗ.

рдпрд╛ Interface рдордзреНрдпреЗ рдЦрд╛рд▓реАрд▓ methods рдЕрд╕рддрд╛рдд:

public void onTestStart(ITestResult result) public void onTestSuccess(ITestResult result) public void onTestFailure(ITestResult result) public void onTestSkipped(ITestResult result) public void onStart(ITestContext context) public void onFinish(ITestContext context)


ЁЯЫая╕П Listener Class рдХрд╢реА рддрдпрд╛рд░ рдХрд░рд╛рдпрдЪреА?

тЬи рджреЛрди methods рдЖрд╣реЗрдд Listener implement рдХрд░рдгреНрдпрд╛рдЪреНрдпрд╛:


ЁЯЕ░я╕П Method 1: Implementing ITestListener

public class MyListener implements ITestListener { public void onTestSuccess(ITestResult result) { System.out.println("тЬЕ Test Passed: " + result.getName()); }

1
2
3
public void onTestFailure(ITestResult result) {
    System.out.println("тЭМ Test Failed: " + result.getName());
}

}


ЁЯЕ▒я╕П Method 2: Extending TestListenerAdapter

public class MyListener extends TestListenerAdapter { @Override public void onTestSuccess(ITestResult result) { // override existing default implementation } }

ЁЯдФ Confusion Solved:

TestListenerAdapter already implements ITestListener internally. So рдЬрд░ рддреБрд▓рд╛ рд╕рдЧрд│реАрдЪ methods рдирдХреЛрдд, рдлрдХреНрдд specific method override рдХрд░рд╛рдпрдЪреА рдЖрд╣реЗ, рддрд░ TestListenerAdapter extend рдХрд░рдгрдВ рдЪрд╛рдВрдЧрд▓рдВ.


ЁЯЧВя╕П Listener attach рдХрд╕рд╛ рдХрд░рд╛рдпрдЪрд╛?

1. Directly Java file рдордзреНрдпреЗ attach рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА:

@Listeners(myPackage.MyListener.class) public class MyTest { // test methods }

2. testng.xml рдордзреВрди attach рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА:

ЁЯТб God Amu Secret Tip:

рдЬрд░ test classes рдЬрд╛рд╕реНрдд рдЕрд╕рддреАрд▓ (рдЙрджрд╛. 50+), рддрд░ @Listeners рдкреНрд░рддреНрдпреЗрдХ file рд▓рд╛ рджреЗрдгреНрдпрд╛рдРрд╡рдЬреА, рдПрдХрджрд╛рдЪ testng.xml рдордзреНрдпреЗ listener declare рдХрд░рдгрдВ best practice рдЖрд╣реЗ.


ЁЯз╛ Listener рд╡рд╛рдкрд░рдгреНрдпрд╛рдЪрд╛ Purpose

ЁЯОп Main Purpose: Post Action handle рдХрд░рдгрдВ

Post Action

Description

Report Generation

HTML / PDF reports

Result Status Update

PASS / FAIL / SKIPPED

Screenshot Attach

On failure

Email Notification

On suite finish


ЁЯУК Extent Reports (Beautiful Reporting Tool)


ЁЯФ╖ Overview:

Extent Reports рд╣реЗ рдПрдХ advanced reporting library рдЖрд╣реЗ рдЬреЗ test execution report visually attractive рдмрдирд╡рддрдВ.


ЁЯФС Main Classes:

Class Name

Purpose

ExtentSparkReporter

UI settings (dark theme, standard, fonts, alignment)

ExtentReports

Metadata fill рдХрд░рддрдВ (OS, Browser, Tester name, etc.)

ExtentTest

Each test case track рдХрд░рддреЛ тАУ pass/fail status + screenshot


тЬЕ Extent Report Setup Steps:

  1. Add dependency in pom.xml (for Maven users):

com.aventstack extentreports 5.0.9

  1. Create Listener class and implement ITestListener.

  2. Initialize Extent Report in onStart() and flush in onFinish():

public class MyListener implements ITestListener { ExtentReports extent; ExtentTest test;

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
public void onStart(ITestContext context) {
    ExtentSparkReporter reporter = new ExtentSparkReporter("test-output/ExtentReport.html");
    reporter.config().setReportName("ERP Automation Report");
    reporter.config().setDocumentTitle("Test Results");

    extent = new ExtentReports();
    extent.attachReporter(reporter);
    extent.setSystemInfo("Tester", "Omkar");
}

public void onTestSuccess(ITestResult result) {
    test = extent.createTest(result.getName());
    test.pass("Test Passed");
}

public void onTestFailure(ITestResult result) {
    test = extent.createTest(result.getName());
    test.fail("Test Failed");
    // Screenshot logic if needed
}

public void onFinish(ITestContext context) {
    extent.flush();
}

}


тЭУ Common Doubts & Clarifications


тЭУ Q1: What are default methods in interface?

ЁЯФ╣ Java 8 рдкрд╛рд╕реВрди, interface рдордзреНрдпреЗ default methods define рдХрд░рддрд╛ рдпреЗрддрд╛рдд.
ЁЯФ╣ рдкрдг рддреБрдореНрд╣реА class рдордзреНрдпреЗ рддреНрдпрд╛рдВрдирд╛ implement рдХрд░рддрд╛рдирд╛, рддреНрдпрд╛рдЪрд╛ access public рдареЗрд╡рд╛рд╡рд╛ рд▓рд╛рдЧрддреЛ.


тЭУ Q2: onStart() vs onTestStart() difference?

Method

When it Executes?

onStart()

Suite/Test level рд╕реБрд░реВ рд╣реЛрддрд╛рдирд╛рдЪ

onTestStart()

Individual test рд╕реБрд░реВ рд╣реЛрддрд╛рдирд╛


ЁЯзк Real Industry Example:

ERP System рдордзреЗ large scale regression testing рдХрд░рддрд╛рдирд╛ тАУ 500+ test cases рдЖрд╣реЗрдд.

  • рдЖрдкрдг Listeners рд╡рд╛рдкрд░реВрди pass/fail/skip tracking рдХрд░рдд рдЖрд╣реЛрдд.

  • Reports extend report рдордзреНрдпреЗ рдкрд╛рд╣рд┐рдЬреЗ.

  • Fail рдЭрд╛рд▓реНрдпрд╛рд╡рд░ screenshot рд▓рд╛рдЧрддреЛ тАУ So Listeners рдордзреНрдпреЗ screenshot capture logic рдЯрд╛рдХрддреЛ.

  • Report рд╕рд░реНрд╡ рдЯреАрдо members рдирд╛ рдкрд╛рдард╡рд╛рдпрд▓рд╛ рддрдпрд╛рд░!


тЬЕ Summary:

Concept

Description

Test Outcome

Pass / Fail / Skipped

Post Action

Report, Screenshot, Email

Listener Interface

ITestListener (implements OR extends TestListenerAdapter)

Integration

via @Listeners or testng.xml

Reporting

Extent Report with 3 main classes