使用TestNG的XmlSuite类动态生成testng.xml文件

一、类和对应关系

  • 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} 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
testng.xmlTestNG测试框架的配置文件,用于定义测试套件、测试测试方法的执行顺序、参数和其他设置。以下是一个典型的testng.xml文件的示例: ```xml <!DOCTYPE suite SYSTEM "https://testng.org/testng-1.0.dtd" > <suite name="Test Suite" verbose="1"> <test name="Test Case 1"> <parameter name="browser" value="chrome" /> <classes> <class name="com.example.TestClass1" /> </classes> </test> <test name="Test Case 2"> <parameters> <parameter name="username" value="john" /> <parameter name="password" value="secret" /> </parameters> <classes> <class name="com.example.TestClass2" /> </classes> </test> <listeners> <listener class-name="com.example.CustomListener" /> </listeners> </suite> ``` 在这个示例testng.xml包含一个suite元素,表示整个测试套件。suite元素包含了两个test元素,分别代表两个测试用例。每个test元素可以包含一个或多个classes元素,其定义了要执行的测试。 通过parameter元素,我们可以为测试方法提供参数值。在示例,Test Case 1使用了一个名为"browser"的参数,并将其值设置为"chrome"。Test Case 2使用了两个参数:"username"和"password",并分别设置为"john"和"secret"。 listeners元素用于指定自定义的测试监听器。在示例,我们指定了一个名为"com.example.CustomListener"的监听器。 这只是testng.xml文件的一个简单示例,可以根据您的需求进行扩展和定制。在运行测试时,您可以使用testng.xml文件来配置测试套件的执行方式和参数。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值