0

我有发送多个测试和多个参数的 xml 套件。

例子:

        <test name="Create">       
        <classes>       
        <class name="TestClass">
            <methods>
                <parameter name="offerId" value="1234"/>
                <include name="testmethod"/>
            </methods>
        </class>                                          
      </classes>
      </test>
        <test name="Add">       
        <classes>       
        <class name="TestClass2">
            <methods>
                <include name="testmethod2"/>
            </methods>
        </class>                                          
      </classes>
      </test>

我需要多次运行这个类,每次都使用不同的 offerId 参数。(例如 1234,4567,7899)

我只想运行这个请求一次,它会刺激所有不同的参数并一次又一次地运行整个套装,并在同一个报告上给出结果。

这就是我所做的:

@Test
public void runSuites2(){

    TestNG testng = new TestNG();
    List<String> suites=new ArrayList<String>();
    suites.add("c:/tests/testng1.xml");//path to xml..

    testng.setTestSuites(suites);
    testng.run();

}

所以这将加载并运行我需要的套装,但是如何更改套装内的参数?(之后我将创建 for 循环)

[目前我复制了 xml 并手动更改了每个测试的参数。然后运行套件]

考试:

@Parameters({ "offerId" })
@Test
public void testmethod(String offerId, ITestContext context) throws Exception {
    Reporter.log("offer ID is = " + offerId, true);
        }
4

2 回答 2

2

在这种情况下,您可以使用 dataprovider 或者您可以从 excel 中读取值,并且将为 dataprovider/excel 表中的每个值运行测试。
为您提供有关如何将 dataprovider 用于您的测试用例的示例。

@DataProvider(name = "offerId")
public static Object[][] voiceSearchTestData() {
    return new Object[][]{
            {1234},
            {2345},
            {4567}
    };
}

@Test(dataProvider = "offerId")
public void testmethod(int offerId, ITestContext context) throws Exception {
    Reporter.log("offer ID is = " + offerId, true);
}

因此,上述测试将运行 3 次,数据提供程序中存在的每个值一个,您不需要在 testng xml 中参数化任何内容。您只需要提及类名,所有测试都会自动运行。你 testng.xml 应该是这样的:

<test name="SampleTest">
    <classes>
        <class name="packageName.className" />
    </classes>
</test>
于 2019-02-07T09:15:09.980 回答
0

下面的代码做了什么: 我想在运行时为每个参数添加一个列表。这些参数作为 Maven 运行时参数传递。System.getProperty()使用如下所示的方法读取它们。然后把这些参数加到<test>里面<suite>,testng就跑成功了。这在其他场景中也非常有用。

下面的代码读取 testng.xml 文件并将参数添加到

List<String> parameters = new ArrayList<>();
parameters = Arrays.asList(System.getProperty("parameters").split(",");

TestNG tng = new TestNG();
File initialFile = new File("testng.xml");
InputStream inputStream = FileUtils.openInputStream(initialFile);
Parser p = new Parser(inputStream);
List<XmlSuite> suites = p.parseToList();
for(XmlSuite suite:suites){
    List<XmlTest> tests = suite.getTests();
    for (XmlTest test : tests) {
         for (int i = 0; i < parameters.size(); i++) {
            HashMap<String, String> parametersMap = new HashMap<>();
            parametersMap.put("parameter",parameters.get(i));
            test.setParameters(parametersMap);
        }
    }
}
tng.setXmlSuites(suites);
tng.run();
于 2020-04-17T05:05:02.277 回答