以下代码用于生成动态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。