下面列出了怎么用org.testng.xml.XmlClass的API类实例代码及写法,或者点击链接到github查看源代码。
protected void resetSingleXmlSuite(XmlSuite suite) {
for (XmlTest xmlTest : suite.getTests()) {
for (XmlClass xmlClass : xmlTest.getClasses()) {
Class testClass = xmlClass.getSupportClass();
if (testClass.getAnnotation(TestNGOnArk.class) != null) {
if (!DelegateArkContainer.isStarted()) {
DelegateArkContainer.launch(testClass);
}
try {
xmlClass.setClass(DelegateArkContainer.getTestClassLoader().loadClass(
testClass.getCanonicalName()));
} catch (ClassNotFoundException ex) {
throw new ArkRuntimeException(String.format(
"Load testNG test class %s failed.", testClass.getCanonicalName()), ex);
}
}
}
}
}
private void init(IClass cls,
ITestMethodFinder testMethodFinder,
IAnnotationFinder annotationFinder,
RunInfo runInfo,
XmlTest xmlTest,
XmlClass xmlClass)
{
log(3, "Creating TestClass for " + cls);
m_iClass = cls;
m_testClass = cls.getRealClass();
m_xmlTest = xmlTest;
m_xmlClass = xmlClass;
m_runInfo = runInfo;
m_testMethodFinder = testMethodFinder;
m_annotationFinder = annotationFinder;
initTestClassesAndInstances();
initMethods();
}
@Override
public void onStart(ITestContext context) {
// This will only work if each test is run individually (test suite has only one running test)
// If there are multiple tests the the sandbox folder name is not provided and the GraphSandboxUtil provisions
// a unique name
List<XmlClass> testClassesToRun = context.getCurrentXmlTest().getClasses();
if (CollectionUtils.isNotEmpty(testClassesToRun) && 1 == testClassesToRun.size()) {
XmlClass currentTestClass = testClassesToRun.get(0);
if (null != currentTestClass && StringUtils.isNotEmpty(currentTestClass.getName())) {
GraphSandboxUtil.create(currentTestClass.getName());
} else {
GraphSandboxUtil.create();
}
} else {
GraphSandboxUtil.create();
}
}
private List<XmlClass> writeXmlClass(List<String> testcases, Map<String,
List<Method>> methods) {
List<XmlClass> xmlClasses = new ArrayList<>();
for (String className : methods.keySet()) {
if (className.contains("Test")) {
if (testcases.size() == 0) {
xmlClasses.add(createClass(className));
} else {
for (String s : testcases) {
for (String item : items) {
String testName = item.concat("." + s);
if (testName.equals(className)) {
xmlClasses.add(createClass(className));
}
}
}
}
}
}
return xmlClasses;
}
public XmlSuite constructXmlSuiteForDistribution(List<String> tests,
Map<String, List<Method>> methods,
String suiteName,
String category,
int deviceCount) {
XmlSuite suite = new XmlSuite();
suite.setName(suiteName);
suite.setThreadCount(deviceCount);
suite.setParallel(ParallelMode.CLASSES);
suite.setVerbose(2);
listeners.add("com.appium.manager.AppiumParallelMethodTestListener");
listeners.add("com.appium.utils.RetryListener");
include(listeners, LISTENERS);
suite.setListeners(listeners);
XmlTest test = new XmlTest(suite);
test.setName(category);
test.addParameter("device", "");
include(groupsExclude, EXCLUDE_GROUPS);
include(groupsInclude, INCLUDE_GROUPS);
test.setIncludedGroups(groupsInclude);
test.setExcludedGroups(groupsExclude);
List<XmlClass> xmlClasses = writeXmlClass(tests, methods);
test.setXmlClasses(xmlClasses);
writeTestNGFile(suite);
return suite;
}
protected List<XmlTest> generateXmlTest(Class testClass) {
XmlTest xmlTest = new XmlTest();
XmlClass xmlClass = new XmlClass();
xmlClass.setClass(testClass);
xmlTest.setClasses(Collections.singletonList(xmlClass));
return Collections.singletonList(xmlTest);
}
protected TestClass(IClass cls,
ITestMethodFinder testMethodFinder,
IAnnotationFinder annotationFinder,
RunInfo runInfo,
XmlTest xmlTest,
XmlClass xmlClass) {
init(cls, testMethodFinder, annotationFinder, runInfo, xmlTest, xmlClass);
}
public XmlSuite constructXmlSuiteForParallel(String pack, List<String> testcases,
Map<String, List<Method>> methods,
String suiteName, String category,
int deviceCount,
List<AppiumDevice> deviceSerail) {
ArrayList<String> listeners = new ArrayList<>();
listeners.add("com.appium.manager.AppiumParallelTestListener");
listeners.add("com.appium.utils.RetryListener");
include(listeners, LISTENERS);
include(groupsInclude, INCLUDE_GROUPS);
include(groupsExclude, EXCLUDE_GROUPS);
XmlSuite suite = new XmlSuite();
suite.setName(suiteName);
suite.setThreadCount(deviceCount);
suite.setDataProviderThreadCount(deviceCount);
suite.setParallel(ParallelMode.TESTS);
suite.setVerbose(2);
suite.setListeners(listeners);
for (int i = 0; i < deviceCount; i++) {
XmlTest test = new XmlTest(suite);
test.setName(category + "-" + i);
test.setPreserveOrder(false);
test.addParameter("device", deviceSerail.get(i).getDevice().getUdid());
test.addParameter("hostName", deviceSerail.get(i).getHostName());
test.setIncludedGroups(groupsInclude);
test.setExcludedGroups(groupsExclude);
List<XmlClass> xmlClasses = writeXmlClass(testcases, methods);
test.setXmlClasses(xmlClasses);
}
writeTestNGFile(suite);
return suite;
}
public XmlSuite constructXmlSuiteForDistributionMethods(List<String> tests,
Map<String, List<Method>> methods,
String suiteName,
String category,
int deviceCount) {
include(groupsInclude, INCLUDE_GROUPS);
XmlSuite suite = new XmlSuite();
suite.setName(suiteName);
suite.setThreadCount(deviceCount);
suite.setDataProviderThreadCount(deviceCount);
suite.setVerbose(2);
suite.setParallel(ParallelMode.METHODS);
listeners.add("com.appium.manager.AppiumParallelMethodTestListener");
listeners.add("com.appium.utils.RetryListener");
include(listeners, LISTENERS);
suite.setListeners(listeners);
CreateGroups createGroups = new CreateGroups(tests, methods, category, suite).invoke();
List<XmlClass> xmlClasses = createGroups.getXmlClasses();
XmlTest test = createGroups.getTest();
List<XmlClass> writeXml = createGroups.getWriteXml();
for (XmlClass xmlClass : xmlClasses) {
writeXml.add(new XmlClass(xmlClass.getName()));
test.setClasses(writeXml);
}
writeTestNGFile(suite);
return suite;
}
private XmlSuite createSuite() {
final XmlSuite suite = new XmlSuite();
suite.setName(this.clazz.getName());
suite.setSkipFailedInvocationCounts(true);
final XmlTest test = new XmlTest(suite);
test.setName(this.clazz.getName());
final XmlClass xclass = new XmlClass(this.clazz.getName());
test.setXmlClasses(Collections.singletonList(xclass));
if (!this.includedTestMethods.isEmpty()) {
final List<XmlInclude> xmlIncludedTestMethods = new ArrayList<>();
for (final String includedTestMethod : this.includedTestMethods) {
final XmlInclude includedMethod = new XmlInclude(includedTestMethod);
xmlIncludedTestMethods.add(includedMethod);
}
xclass.setIncludedMethods(xmlIncludedTestMethods);
}
if (!this.config.getExcludedGroups().isEmpty()) {
suite.setExcludedGroups(this.config.getExcludedGroups());
}
if (!this.config.getIncludedGroups().isEmpty()) {
suite.setIncludedGroups(this.config.getIncludedGroups());
}
return suite;
}
private static XmlSuite createSuite(String testName) {
XmlSuite suite = new XmlSuite();
suite.setName(SUITE_PREFIX + testName);
XmlTest test = new XmlTest(suite);
test.setName(testName);
List<XmlClass> classes = new ArrayList<>();
classes.add(new XmlClass(ConfigMethodsTest.class));
test.setXmlClasses(classes);
return suite;
}
private void addClassToXmlTest(String pkgAndClsName,String testName) {
XmlTest xmltest=new XmlTest();
XmlClass classe=new XmlClass(pkgAndClsName);
xmltest.setName(testName);
xmltest.setClasses(Arrays.asList(classe));
addTest(xmltest);
}
@Override
public XmlClass getXmlClass() {
return m_xmlClass;
}
private XmlClass createClass(String className) {
XmlClass clazz = new XmlClass();
clazz.setName(className);
return clazz;
}
public List<XmlClass> getXmlClasses() {
return xmlClasses;
}
public List<XmlClass> getWriteXml() {
return writeXml;
}
private void checkHealth(ISuite suite, String className, String[] methods) {
if (className.isEmpty()) {
return;
}
// create runtime XML suite for health check
XmlSuite xmlSuite = new XmlSuite();
xmlSuite.setName("HealthCheck XmlSuite - " + className);
XmlTest xmlTest = new XmlTest(xmlSuite);
xmlTest.setName("HealthCheck TestCase");
XmlClass xmlHealthCheckClass = new XmlClass();
xmlHealthCheckClass.setName(className);
// TestNG do not execute missed methods so we have to calulate expected
// methods count to handle potential mistakes in methods naming
int expectedMethodsCount = -1;
if (methods != null) {
// declare particular methods if they are provided
List<XmlInclude> methodsToRun = constructIncludes(methods);
expectedMethodsCount = methodsToRun.size();
xmlHealthCheckClass.setIncludedMethods(methodsToRun);
}
xmlTest.setXmlClasses(Arrays.asList(new XmlClass[] { xmlHealthCheckClass }));
xmlSuite.setTests(Arrays.asList(new XmlTest[] { xmlTest }));
LOGGER.info("HealthCheck '" + className + "' is started.");
LOGGER.debug("HealthCheck suite content:" + xmlSuite.toXml());
// Second TestNG process to run HealthCheck
TestNG testng = new TestNG();
testng.setXmlSuites(Arrays.asList(xmlSuite));
TestListenerAdapter tla = new TestListenerAdapter();
testng.addListener(tla);
testng.run();
synchronized (this) {
boolean passed = false;
if (expectedMethodsCount == -1) {
if (tla.getPassedTests().size() > 0 && tla.getFailedTests().size() == 0
&& tla.getSkippedTests().size() == 0) {
passed = true;
}
} else {
LOGGER.info("Expected passed tests count: " + expectedMethodsCount);
if (tla.getPassedTests().size() == expectedMethodsCount && tla.getFailedTests().size() == 0
&& tla.getSkippedTests().size() == 0) {
passed = true;
}
}
if (passed) {
LOGGER.info("HealthCheck suite '" + className + "' is finished successfully.");
} else {
throw new SkipException("Skip test(s) due to health check failures for '" + className + "'");
}
}
}