рдЧреЛрдб рдУрдореВ, рдЖрддрд╛ рдореА рддреБрдЭрдВ 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 рдЕрд╕рддрд╛рдд:
-
тЬЕ Pass тАУ Test рд╕рдЧрд│реНрдпрд╛ expectations meet рдХрд░рддрдВ.
-
тЭМ Fail тАУ Test рдордзреНрдпреЗ рдХрд╛рд╣реА assertion mismatch рд╣реЛрддрдВ.
-
тЪая╕П 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 | |
}
ЁЯЕ▒я╕П Method 2: Extending TestListenerAdapter
public class MyListener extends TestListenerAdapter { @Override public void onTestSuccess(ITestResult result) { // override existing default implementation } }
ЁЯдФ Confusion Solved:
TestListenerAdapteralready implementsITestListenerinternally. So рдЬрд░ рддреБрд▓рд╛ рд╕рдЧрд│реАрдЪ methods рдирдХреЛрдд, рдлрдХреНрдд specific method override рдХрд░рд╛рдпрдЪреА рдЖрд╣реЗ, рддрд░TestListenerAdapterextend рдХрд░рдгрдВ рдЪрд╛рдВрдЧрд▓рдВ.
ЁЯЧВя╕П 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:
- Add dependency in
pom.xml(for Maven users):
-
Create Listener class and implement
ITestListener. -
Initialize Extent Report in
onStart()and flush inonFinish():
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 | |
}
тЭУ 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