一、类和对应关系
- XmlSuite, 对应xml文件中的 suite 标签。
- XmlTest, 对应 test标签。
- XmlGroup, XmlClass, XmlPackage等等。
二、常用的方法
- setName(), 给定 suite 的名称。
- setConfigFailurePolicy(), 设置失败策略,比如continue。
- setParallel(), 设置同步执行策略,class,method等。
- setThreadCount(), 当同步执行时,最大线程数。
- setParameters(), 入参为map,对应xml文件中的<parameter>标签。
- setTests(), 入参为XmlTest的list,对应<Test>标签
XmlTest中含有group, package, classes
- setXmlSuite(), 需要给Test 指定Suite, 入参为XmlSuite
- addIncludedGroup(String group)
- setXmlPackages(List<XmlPackage>)
- setXmlClasses(List<XmlClass>)
初始化XmlClass,包含method, include, exclude
- setName(String name)
- setIncludedMethods(List<XmlInclude>)
- setExcludeMethods(List<String> m)
三、上代码
public class RunWithTestNgXml {
public static void main(String[] args) {
//Receive the arguments from command including groups, classes, package and so on
Map<String, String> nodeValues = parseArgs(args);
List<XmlSuite> xmlSuites = new ArrayList<XmlSuite>();
try {
//Could execute multiple suites
xmlSuites.add(getXmlSuite(nodeValues));
//Execute testng suites
TestNG testNG = new TestNG();
testNG.setXmlSuites(xmlSuites);
testNG.run();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
//Generate XmlSuite
private static XmlSuite getXmlSuite() throws ClassNotFoundException {
XmlSuite suite = new XmlSuite();
suite.setName("Suites");
suite.setConfigFailurePolicy(XmlSuite.FailurePolicy.CONTINUE);
//Set parallel as class
suite.setParallel(XmlSuite.ParallelMode.CLASSES);
//Set thread as 1
suite.setThreadCount(1);
//Set suite parameters
Map<String, String> suiteParams = generateSuiteMap();
suite.setParameters(suiteParams);
//Set test
List<XmlTest> xmlTests = getXmlTests(suite);
suite.setTests(xmlTests);
//if needed, also can write as testng.xml file
writeTestNgXml(suite);
return suite;
}
//Generate XmlTests
private static List<XmlTest> getXmlTests(XmlSuite suite) {
List<XmlTest> xmlTestsList = new ArrayList<XmlTest>();
XmlTest xmlTest = new XmlTest();
xmlTest.setName("Test");
xmlTest.setXmlSuite(xmlSuite);
//Set groups
List<String> groups;
xmlTest.setIncludeGroups(groups);
//Set Packages
List<XmlPackage> xmlPackages = new ArrayList<XmlPackage>();
xmlTest.setXmlPackages(xmlPackages);
//Set Classes
List<XmlClass> xmlClassList = new ArrayList<XmlClass>();
xmlTest.setXmlClasses(xmlClassList);
xmlTestsList.add(xmlTest);
return xmlTestsList;
}
//Write testng.xml to disk
private static void writeTestNgXml(XmlSuite suite) {
String xmlStr = suite.toXml();
FileWriter writer = null;
try {
writer = new FileWriter( new File(C:/testng.xml"), false);
writer.write(xmlStr);
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
writer.flush();
writer.close();
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
}
四、执行
使用command 执行main方法
cd {workspace}/build/libs/
java -cp {project}.jar com...RunWithTestNgXml groups=smoke,P0,test classes=${CLASSES} packages=${PACKAGES}