Hi Krishnan,
I tried the above method but instead of service loaders I am calling the listener in my suite file. Just to give an idea, my suite files look as follows (you can see me calling the 'ParameterInjector' in each of these suites):
My properties file:
deviceName=R52N20ALVDN
platformVersion= 10
portNumber=4723
Parent suite:
<suite name="TP397">
<listeners>
<listener class-name="framework.Listeners.ParameterInjector" />
</listeners>
<suite-files>
<suite-file path="./src/test/java/CPAutomationTestSuite/TP_000397/Procedure1/TP397_procedure1.xml"> </suite-file>
<suite-file path="./src/test/java/CPAutomationTestSuite/TP_000397/Procedure2/TP397_procedure2.xml"> </suite-file>
<suite-file path="./src/test/java/CPAutomationTestSuite/TP_000397/Procedure3/TP397_procedure3.xml"> </suite-file>
<suite-file path="./src/test/java/CPAutomationTestSuite/TP_000397/Procedure4/TP397_procedure4.xml"> </suite-file>
</suite-files>
</suite>
Child suite file 1:
<suite name="TP397_Procedure1">
<listeners>
<listener class-name="framework.ReportGenerator.ReporterManager" />
<listener class-name="framework.Listeners.ParameterInjector" />
</listeners>
<test name="Procedure1">
<parameter name="TP_ID" value="TP397" />
<classes>
<class name="CPAutomationTestSuite.TP_000397.Procedure2.TP397_Procedure1_Initialize" />
<class name="CPAutomationTestSuite.TP_000397.Procedure2.TP397_Procedure1_Section01" />
<class name="CPAutomationTestSuite.TP_000397.Procedure2.TP397_Procedure1_Section02" />
<class name="CPAutomationTestSuite.TP_000397.Procedure2.TP397_Procedure1_Section03" />
<class name="CPAutomationTestSuite.TP_000397.Procedure2.TP397_Procedure1_TearDown" />
</classes>
</test> <!-- Procedure 2 -->
</suite> <!-- TP397_Procedure2 -->
Child suite file 2:
<suite name="TP397_Procedure2">
<listeners>
<listener class-name="framework.ReportGenerator.ReporterManager" />
<listener class-name="framework.Listeners.ParameterInjector" />
</listeners>
<test name="Procedure2">
<parameter name="TP_ID" value="TP397" />
<classes>
<class name="CPAutomationTestSuite.TP_000397.Procedure2.TP397_Procedure2_Initialize" />
<class name="CPAutomationTestSuite.TP_000397.Procedure2.TP397_Procedure2_Section01" />
<class name="CPAutomationTestSuite.TP_000397.Procedure2.TP397_Procedure2_Section02" />
<class name="CPAutomationTestSuite.TP_000397.Procedure2.TP397_Procedure2_Section03" />
<class name="CPAutomationTestSuite.TP_000397.Procedure2.TP397_Procedure2_TearDown" />
</classes>
</test> <!-- Procedure 2 -->
</suite> <!-- TP397_Procedure2 -->
and so on...
Problem I am seeing in this approach, is that when I run the child suites, the runs go through fine, but when i run the parent suite, I see the following warning messages and the child scripts do not pick up the values from the properties file:
[RemoteTestNG] detected TestNG version 7.5.0
[main] WARN org.testng.TestNG - Ignoring duplicate listener : framework.Listeners.ParameterInjector
[main] WARN org.testng.TestNG - Ignoring duplicate listener : framework.Listeners.ParameterInjector
[main] WARN org.testng.TestNG - Ignoring duplicate listener : framework.Listeners.ParameterInjector
[main] WARN org.testng.TestNG - Ignoring duplicate listener : framework.Listeners.ParameterInjector
[INFO ] 2022-03-15 20:41:58 framework.Listeners.ExecutionListener 42 onExecutionStart -
***********************
TestNG Run Started
***********************
[INFO ] 2022-03-15 20:41:58 framework.commonUtilities.ExtentReports.ExtentListener 75 onExecutionStart - onStart called*****
[main] INFO org.testng.internal.Utils - [TestNG] Running:
C:\Users\skhandekar\eclipse-workspace\CPAutomationFramework\src\test\java\CPAutomationTestSuite\TP_000397\Procedure1\TP397_Procedure1.xml
[INFO ] 2022-03-15 20:41:58 framework.Listeners.ExecutionListener 120 onStart -
********************************
Suite [TP397_Procedure1] started
********************************
[INFO ] 2022-03-15 20:41:58 framework.Listeners.ExecutionListener 220 onStart -
**********************************************************
***** Starting test - Procedure1 *****
**********************************************************
[INFO ] 2022-03-15 20:41:58 framework.testWriting.ResultWriter.ResultWriterCSV 45 <init> - FrameworkVariables.ALREADY_EXECUTED = false
[INFO ] 2022-03-15 20:41:58 framework.testWriting.ResultWriter.ResultWriterCSV 60 <init> - FrameworkVariables.ALREADY_EXECUTED = true
[INFO ] 2022-03-15 20:41:58 framework.Listeners.ExecutionListener 80 onBeforeClass -
**************************************************************
---------------------------------------------------------------
***** Starting section - TP397_Procedure1_Section02 *****
---------------------------------------------------------------
***************************************************************
[INFO ] 2022-03-15 20:41:58 framework.testWriting.TestSection 166 setUpTest - BeforeMethod from TestSection
[INFO ] 2022-03-15 20:41:58 framework.testWriting.TestSection 215 setUpTest - Testname in TestSection is: TP397_001
[INFO ] 2022-03-15 20:41:58 framework.Listeners.ExecutionListener 149 beforeInvocation - BeforeInvocation: TP397_001
[INFO ] 2022-03-15 20:41:58 framework.Listeners.ExecutionListener 154 beforeInvocation -
*********************************************************************
Test Name - TP397_001
Description: Creating OR Session With ETM When IPG And Lead Details Are Configured
*********************************************************************
[INFO ] 2022-03-15 20:41:58 framework.commonUtilities.ExtentReports.ExtentListener 194 beforeInvocation - Test started - from extent reports
[INFO ] 2022-03-15 20:41:58 framework.testWriting.ResultWriter.ResultWriterCSV 219 appendTestCaseResultToCSV -
**********************************************
Write TestCase result to ResultReport
**********************************************
[INFO ] 2022-03-15 20:41:58 framework.testWriting.ResultWriter.ResultWriterCSV 315 appendToCSV - StringArray:
[INFO ] 2022-03-15 20:41:58 framework.testWriting.ResultWriter.ResultWriterCSV 315 appendToCSV - StringArray: TP397_001_Completed
[INFO ] 2022-03-15 20:41:58 framework.testWriting.ResultWriter.ResultWriterCSV 315 appendToCSV - StringArray:
[INFO ] 2022-03-15 20:41:58 framework.testWriting.ResultWriter.ResultWriterCSV 315 appendToCSV - StringArray:
[INFO ] 2022-03-15 20:41:58 framework.testWriting.ResultWriter.ResultWriterCSV 315 appendToCSV - StringArray:
[INFO ] 2022-03-15 20:41:58 framework.testWriting.ResultWriter.ResultWriterCSV 315 appendToCSV - StringArray:
[INFO ] 2022-03-15 20:41:58 framework.testWriting.ResultWriter.ResultWriterCSV 315 appendToCSV - StringArray: Fail
[INFO ] 2022-03-15 20:41:58 framework.testWriting.ResultWriter.ResultWriterCSV 315 appendToCSV - StringArray:
[INFO ] 2022-03-15 20:41:58 framework.testWriting.ResultWriter.ResultWriterCSV 319 appendToCSV - WRITE NEXT: [, TP397_001_Completed, , , , , Fail, ]
[INFO ] 2022-03-15 20:41:58 framework.testWriting.ResultWriter.ResultWriterCSV 223 appendTestCaseResultToCSV - WRITE NEXT: [, TP397_001_Completed, Fail]
[ERROR] 2022-03-15 20:41:58 framework.Listeners.ExecutionListener 203 onTestSkipped - [TestSection.initialize(java.lang.String,java.lang.String,java.lang.String)[pri:0, instance:CPAutomationTestSuite.TP_000397.Procedure1.TP397_Procedure1_Section02@ffaa6af]]
[ERROR] 2022-03-15 20:41:58 framework.Listeners.ExecutionListener 204 onTestSkipped -
***********************************************************************************************************************************
Skipped Test Name = TP397_001, was skipped due to:
[framework.testWriting.TestSection.initialize] which is a configuration Method.
org.testng.TestNGException:
Parameter 'deviceName' is required by BeforeClass on method initialize but has not been marked @Optional or defined
in C:\Users\skhandekar\eclipse-workspace\CPAutomationFramework\src\test\java\CPAutomationTestSuite\TP_000397\Procedure1\TP397_Procedure1.xml
***********************************************************************************************************************************
Any reason how to fix this?