diff --git a/pom.xml b/pom.xml
index 4eecc16..559d717 100644
--- a/pom.xml
+++ b/pom.xml
@@ -13,8 +13,8 @@
UTF-8
- 1.8
- 1.8
+ 21
+ 21
x
@@ -29,7 +29,7 @@
org.testng
testng
- 6.14.3
+ 7.10.2
test
@@ -62,7 +62,7 @@
org.apache.maven.plugins
maven-surefire-plugin
- 2.19.1
+ 3.5.2
./src/test/resources/suites/testng.xml
diff --git a/src/test/java/example/example/listeners/SuiteSummaryListener.java b/src/test/java/example/example/listeners/SuiteSummaryListener.java
new file mode 100644
index 0000000..46dadca
--- /dev/null
+++ b/src/test/java/example/example/listeners/SuiteSummaryListener.java
@@ -0,0 +1,51 @@
+package example.example.listeners;
+
+import org.testng.ISuite;
+import org.testng.ISuiteListener;
+import org.testng.ISuiteResult;
+import org.testng.ITestContext;
+
+import example.example.util.LoggerUtil;
+import example.example.util.MailUtil;
+import example.example.util.TestProperties;
+
+/**
+ * Suite-level listener that loads global properties before the suite runs and,
+ * once the whole suite has finished, logs an execution summary and emails the
+ * report. This replaces the former {@code @BeforeSuite}/{@code @AfterSuite}
+ * hooks in {@code BaseTest}: TestNG 7 no longer supports native parameter
+ * injection into {@code @AfterSuite} methods, and a suite listener guarantees
+ * the summary runs exactly once per suite while aggregating results across every
+ * {@code } tag.
+ */
+public class SuiteSummaryListener implements ISuiteListener {
+
+ @Override
+ public void onStart(ISuite suite) {
+ LoggerUtil.log("************************** Test Execution Started ************************************");
+ TestProperties.loadAllPropertie();
+ }
+
+ @Override
+ public void onFinish(ISuite suite) {
+ int total = 0;
+ int passed = 0;
+ int failed = 0;
+ int skipped = 0;
+ for (ISuiteResult result : suite.getResults().values()) {
+ ITestContext context = result.getTestContext();
+ total += context.getAllTestMethods().length;
+ passed += context.getPassedTests().size();
+ failed += context.getFailedTests().size();
+ skipped += context.getSkippedTests().size();
+ }
+ LoggerUtil.log("Total number of testcases : " + total);
+ LoggerUtil.log("Number of testcases Passed : " + passed);
+ LoggerUtil.log("Number of testcases Failed : " + failed);
+ LoggerUtil.log("Number of testcases Skipped : " + skipped);
+ boolean mailSent = MailUtil.sendMail(total, passed, failed, skipped);
+ LoggerUtil.log("Mail sent : " + mailSent);
+ LoggerUtil.log("************************** Test Execution Finished ************************************");
+ }
+
+}
diff --git a/src/test/java/example/example/tests/BaseTest.java b/src/test/java/example/example/tests/BaseTest.java
index b962ab1..cf55964 100644
--- a/src/test/java/example/example/tests/BaseTest.java
+++ b/src/test/java/example/example/tests/BaseTest.java
@@ -1,23 +1,17 @@
package example.example.tests;
-import java.util.concurrent.TimeUnit;
+import java.time.Duration;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
-import org.testng.ITestContext;
import org.testng.annotations.AfterClass;
-import org.testng.annotations.AfterSuite;
import org.testng.annotations.BeforeClass;
-import org.testng.annotations.BeforeSuite;
import org.testng.annotations.Listeners;
import example.example.context.WebDriverContext;
import example.example.listeners.LogListener;
import example.example.listeners.ReportListener;
-import example.example.util.LoggerUtil;
-import example.example.util.MailUtil;
-import example.example.util.TestProperties;
import io.github.bonigarcia.wdm.WebDriverManager;
/**
@@ -31,35 +25,6 @@ public class BaseTest {
/** The driver. */
protected WebDriver driver;
- /**
- * Global setup.
- */
- @BeforeSuite(alwaysRun = true)
- public void globalSetup() {
- LoggerUtil.log("************************** Test Execution Started ************************************");
- TestProperties.loadAllPropertie();
- }
-
- /**
- * Wrap all up.
- *
- * @param context the context
- */
- @AfterSuite(alwaysRun = true)
- public void wrapAllUp(ITestContext context) {
- int total = context.getAllTestMethods().length;
- int passed = context.getPassedTests().size();
- int failed = context.getFailedTests().size();
- int skipped = context.getSkippedTests().size();
- LoggerUtil.log("Total number of testcases : " + total);
- LoggerUtil.log("Number of testcases Passed : " + passed);
- LoggerUtil.log("Number of testcases Failed : " + failed);
- LoggerUtil.log("Number of testcases Skipped : " + skipped);
- boolean mailSent = MailUtil.sendMail(total, passed, failed, skipped);
- LoggerUtil.log("Mail sent : " + mailSent);
- LoggerUtil.log("************************** Test Execution Finished ************************************");
- }
-
/**
* Setup.
*/
@@ -74,7 +39,7 @@ protected void setup() {
ops.addArguments("--disable-dev-shm-usage");
driver = new ChromeDriver(ops);
driver.manage().window().maximize();
- driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
+ driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(10));
WebDriverContext.setDriver(driver);
}
diff --git a/src/test/resources/suites/testng.xml b/src/test/resources/suites/testng.xml
index b282705..d3ac96d 100644
--- a/src/test/resources/suites/testng.xml
+++ b/src/test/resources/suites/testng.xml
@@ -1,7 +1,9 @@
-
+
+
+