Код ниже предназначен для создания динамического testng.xml. Есть три компании A, B, C, которые являются параметрами для каждого тестового тега, но параметр A добавляется для всех трех тестовых тегов. Как решить это? Мне нужно сгенерировать XML, чтобы один тестовый тег имел значение параметра A, второй - как B, а третий тестовый тег - значение параметра C.
public class TestRunner {
public static void main(String[] args) {
List < String > companyNamesParameters = new ArrayList < >();
BufferedReader br = null;
try {
br = new BufferedReader(new FileReader("C:\\CompanyNames\\CompanyNames.txt"));
String line;
while ((line = br.readLine()) != null) {
companyNamesParameters.add(line);
}
} catch(IOException e) {
e.printStackTrace();
}
XmlSuite xmlSuite = new XmlSuite();
xmlSuite.setName("ParallelSuite");
xmlSuite.setVerbose(1);
xmlSuite.setParallel(XmlSuite.ParallelMode.TESTS);
xmlSuite.setThreadCount(companyNamesParameters.size());
//for class tag
XmlClass newClaimClass = new XmlClass(SampleTests.class);
List < XmlClass > xmlClassList = new ArrayList < XmlClass > ();
xmlClassList.add(newClaimClass);
Map < String,
String > companyName = new HashMap < String,
String > ();
List < XmlTest > testList = new ArrayList < XmlTest > ();
//for loop to generate the xml
for (int i = 0; i < companyNamesParameters.size(); i++) {
testList.add(i, new XmlTest(xmlSuite));
testList.get(i).setName("TestCase" + i);
testList.get(i).setParallel(XmlSuite.ParallelMode.NONE);
testList.get(i).setThreadCount(1);
testList.get(i).setXmlClasses(xmlClassList);
System.out.println("Company name is " + companyNamesParameters.get(i));
companyName.put("CompanyName", companyNamesParameters.get(i));
testList.get(i).setParameters(companyName);
}
//to generate the xml suite
TestNG testng = new TestNG();
List < XmlSuite > xmlSuiteList = new ArrayList < XmlSuite > ();
xmlSuiteList.add(xmlSuite);
testng.setXmlSuites(xmlSuiteList);
// write the generated code in .xml file
FileWriter writer;
try {
writer = new FileWriter(new File("TestRunner.xml"));
writer.write(((XmlSuite) xmlSuite).toXml());
writer.flush();
writer.close();
System.out.println(new File("TestRunner.xml").getAbsolutePath());
} catch(IOException e) {
e.printStackTrace();
}
}
}
сгенерированный TestNG.xml:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite thread-count="3" name="ParallelSuite" parallel="tests">
<test thread-count="1" name="TestCase0">
<parameter name="CompanyName" value="A"/>
<classes>
<class name="SampleTests"/>
</classes>
</test>
<!-- TestCase0 -->
<test thread-count="1" name="TestCase1">
<parameter name="CompanyName" value="A"/>
<classes>
<class name="SampleTests"/>
</classes>
</test>
<!-- TestCase1 -->
<test thread-count="1" name="TestCase2">
<parameter name="CompanyName" value="A"/>
<classes>
<class name="SampleTests"/>
</classes>
</test>
</suite>
В приведенном выше XML-файле значение во всех тестовых тегах равно A, а не A, B, C.