在TestNG xml套件中以编程方式设置测试参数以并行执行

问题描述 投票:0回答:1

我正在尝试以并行方式运行TestNG套件,但要根据外部参数动态更改threadCount。

如果测试号= threadCount(参数号)-我可以通过使用TestNG API来做到这一点:

            List<String> params = Arrays.asList("1", "2");

            suite.setThreadCount(params.size());
            suite.setParallel(XmlSuite.ParallelMode.TESTS);

            List<XmlTest> xmlTests = suite.getTests();

            for (int i = 0; i < xmlTests.size(); i++) {
                Map<String, String> paramsMap = new HashMap<>();
                paramsMap.put("param", params.get(i));
                xmlTests.get(i).setParameters(paramsMap);
            }

但是如果测试编号> threadCount(参数编号),我想相应地为threadCount设置参数:

<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="TestNG suite" parallel="tests" thread-count="2">

 <test name="Test 1">
   <parameter name="param" value="1"/>
        <classes>
            <class name="tests.Tests_1">
            </class>
        </classes>
    </test>
    <test name="Test 2">
 <parameter name="param" value="2"/>
        <classes>
            <class name="tests.Tests_2">
            </class>
        </classes>
    </test>
    <test name="Test 3">
<parameter name="param" value="1"/>
        <classes>
            <class name="tests.Tests_3">
            </class>
        </classes>
    </test>
</suite>

例如,对于2个threadCount和6个测试设置参数:1、2、1、2、1、2;对于3个threadCount和5个测试集:1、2、3、1、2

如何遍历测试并设置适当的参数?

java arrays algorithm loops testng
1个回答
0
投票

您需要计算threadCount的索引:

int j = 0;
for (int i = 0; i < xmlTests.size(); i++) {

            if (j>= params.size()) {
               j = 0;
            }

            Map<String, String> paramsMap = new HashMap<>();
            paramsMap.put("param", params.get(j));
            xmlTests.get(i).setParameters(paramsMap);
            j++;
        }
© www.soinside.com 2019 - 2024. All rights reserved.