执行TestNG的case 可以通过创建一个xml方式来执行,同时TestNG也提供了 XmlSuite 类,通过XmlSuite来创建一个类似xml的执行器。
详细懒得讲,直接看代码吧,看懂就懂,代码也都注释了,看不懂也就算了,只会某些特殊场景需要这么玩:
package otp.runner;import com.lucky.common.testng.RetryListener;import com.lucky.common.testng.TestResultListener;import org.testng.ITestNGListener;import org.testng.TestNG;import org.testng.annotations.Parameters;import org.testng.annotations.Test;import org.testng.xml.XmlPackage;import org.testng.xml.XmlSuite;import org.testng.xml.XmlTest;import java.util.*;/*** @author shijin.huang* @date 2020/9/2*/public class LuckyRunner {@Test@Parameters({"env","caseIds"})public void runner(String env, String caseIds) {// 新增<suite>标签,并设置并发方式和并发数XmlSuite xmlSuite = new XmlSuite();xmlSuite.setName("OTP_DEMO");xmlSuite.setVerbose(3);xmlSuite.setParallel(XmlSuite.ParallelMode.TESTS);xmlSuite.setThreadCount(1);// 设置suite parameterMap<String, String> mapParameters = new HashMap<>();mapParameters.put("env", env);xmlSuite.setParameters(mapParameters);// 新增<Test>标签并设置XmlTest xmlTest = new XmlTest(xmlSuite);xmlTest.setName("OTP自动化测试");String[] caseArrIDs = caseIds.split(",");System.out.println(caseIds);List<String> groups = Arrays.asList(caseArrIDs);// 设置class or packagesList<XmlPackage> packages = new ArrayList<>();// packages.add(new XmlPackage("otp.demo.*"));packages.add(new XmlPackage("otp.*"));// xmlTest.setParameters(mapParameters);xmlTest.setPackages(packages);// 设置要执行的Groups 关键点xmlTest.setIncludedGroups(groups);// 创建TestNG对象TestNG testNG = new TestNG();List<XmlSuite> suites = new ArrayList<>();suites.add(xmlSuite);testNG.setXmlSuites(suites);// 添加监听器List<Class<? extends ITestNGListener>> listenerClasses = new ArrayList<>();listenerClasses.add(RetryListener.class);listenerClasses.add(TestResultListener.class);testNG.setListenerClasses(listenerClasses);// runtestNG.run();}}
