使用testng.xml文件时,TestNG是否允许多个数据集?

时间:2016-01-19 20:34:30

标签: intellij-idea testng data-driven-tests

我已经能够通过将测试值硬编码到DataProvider中来进行数据驱动的测试:

@DataProvider(name = "XXXData")
public Object[][] createXXXData() {
    // Our test values here are hard-coded, which is OK
    // You could also, say, read an Excel file and create the parameter sets on the fly
    // The three values are: string to use, expected alphabetic, expected numeric count
    return new Object[][] {
            { "a1a", 2, 1},
            { "b2", 1, 2},  // Wrong num count - will fail
            { "cc333", 2, 3},
            { "d44dd44", 3, 4},
            { "eeee55555", 5, 5},   // Wrong alpha count - will fail
            { "ffff", 4, 0},
            { "000", 0, 3},
    };

我想尝试使用testng.xml做同样的事情。 (我的一些同事对将测试数据放在与代码不同的文件中存在偏见。)

我能够执行一个数据集,如下所示。但是,我在网上看到的很多例子中没有一个具有多个值,与上面所示的相似。

testng.xml不支持吗?

<?xml version="1.0" encoding="UTF-8"?>
<suite name="ParameterExampleSuite" parallel="false">
    <test name="ParameterTest">
        <classes>
            <parameter name="message" value="a1a"></parameter>
            <parameter name="alphaCount" value="2"></parameter>
            <parameter name="numericCount" value="1"></parameter>
            <class name="com.Acme.Business.Safes.XXX.XXXTest"/>
        </classes>
    </test>
</suite>

我知道我可以在createXXXData()中编写代码来读取外部文件并根据它创建数据集。 这都是使用IntelliJ。 这个问题类似于TestNG DataProvider reading test data from the testng.xml config file?。但是,那里的答案似乎与用例不匹配。当然,答案并不比在程序本身中读取Excel或xml文件更方便。

2 个答案:

答案 0 :(得分:1)

您必须定义多个测试,而不是在classes标记中定义params。 (我仍然相信你应该将数据放在外部文件中,然后在xml中执行此操作)

<test name="Automation Test Results" >
    <parameter name="name" value="NV"></parameter>
    <classes>
        <class name="framework.tests.TestParams">
            <methods><include name="test1"></include></methods>
        </class>
    </classes>
  </test>
  <test name="Automation Test Results2" >
    <parameter name="name" value="NV1"></parameter>
    <classes>
        <class name="framework.tests.TestParams">
            <methods><include name="test2"></include></methods>
        </class>
    </classes>
  </test>

答案 1 :(得分:0)

您可以在其他类上使用静态方法,并在测试中使用 dataProviderClass 。所有数据都将放在一个单独的文件中。