执行TestNG的case 可以通过创建一个xml方式来执行,同时TestNG也提供了 XmlSuite 类,通过XmlSuite来创建一个类似xml的执行器。
    详细懒得讲,直接看代码吧,看懂就懂,代码也都注释了,看不懂也就算了,只会某些特殊场景需要这么玩:

    1. package otp.runner;
    2. import com.lucky.common.testng.RetryListener;
    3. import com.lucky.common.testng.TestResultListener;
    4. import org.testng.ITestNGListener;
    5. import org.testng.TestNG;
    6. import org.testng.annotations.Parameters;
    7. import org.testng.annotations.Test;
    8. import org.testng.xml.XmlPackage;
    9. import org.testng.xml.XmlSuite;
    10. import org.testng.xml.XmlTest;
    11. import java.util.*;
    12. /**
    13. * @author shijin.huang
    14. * @date 2020/9/2
    15. */
    16. public class LuckyRunner {
    17. @Test
    18. @Parameters({"env","caseIds"})
    19. public void runner(String env, String caseIds) {
    20. // 新增<suite>标签,并设置并发方式和并发数
    21. XmlSuite xmlSuite = new XmlSuite();
    22. xmlSuite.setName("OTP_DEMO");
    23. xmlSuite.setVerbose(3);
    24. xmlSuite.setParallel(XmlSuite.ParallelMode.TESTS);
    25. xmlSuite.setThreadCount(1);
    26. // 设置suite parameter
    27. Map<String, String> mapParameters = new HashMap<>();
    28. mapParameters.put("env", env);
    29. xmlSuite.setParameters(mapParameters);
    30. // 新增<Test>标签并设置
    31. XmlTest xmlTest = new XmlTest(xmlSuite);
    32. xmlTest.setName("OTP自动化测试");
    33. String[] caseArrIDs = caseIds.split(",");
    34. System.out.println(caseIds);
    35. List<String> groups = Arrays.asList(caseArrIDs);
    36. // 设置class or packages
    37. List<XmlPackage> packages = new ArrayList<>();
    38. // packages.add(new XmlPackage("otp.demo.*"));
    39. packages.add(new XmlPackage("otp.*"));
    40. // xmlTest.setParameters(mapParameters);
    41. xmlTest.setPackages(packages);
    42. // 设置要执行的Groups 关键点
    43. xmlTest.setIncludedGroups(groups);
    44. // 创建TestNG对象
    45. TestNG testNG = new TestNG();
    46. List<XmlSuite> suites = new ArrayList<>();
    47. suites.add(xmlSuite);
    48. testNG.setXmlSuites(suites);
    49. // 添加监听器
    50. List<Class<? extends ITestNGListener>> listenerClasses = new ArrayList<>();
    51. listenerClasses.add(RetryListener.class);
    52. listenerClasses.add(TestResultListener.class);
    53. testNG.setListenerClasses(listenerClasses);
    54. // run
    55. testNG.run();
    56. }
    57. }