testng.xml 中参数的多个值(不使用 dataProvider)

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

我想使用不同的参数值多次运行我的测试用例。是否可以使用 testng.xml 和 @Parameters 注释?

例如。

 <test name="Login Tests">
    <parameter name="one" />
    <parameter name="two" />
    <classes>
        <class name="test.java.Login"/>
    </classes>
</test>

因此,这应该运行测试两次,一次使用值一,然后使用值二。

是否可以使用testng.xml和@Parameter?

Q2。另外,是否可以仅为套件中的特定 @Test 添加参数

例如。我的 TestSuite 有 2 个测试用例和一个与其关联的 testng.xml。

是否可以在 testng.xml 中仅为一个 @Test 添加 @Parameters,因为我的两个测试都采用相同的参数。

java xml parameters testng testng-dataprovider
2个回答
2
投票

下面的示例基本上应该可以帮助回答您所有的问题。

如何根据通过

@Test
标签提供的值多次运行
<parameters>

如何仅将参数传递给特定的测试类

import org.testng.ITestContext;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;

public class FirstTestClass {

    @Test(dataProvider = "getData")
    public void testMethod(String param) {
        System.out.println("Name = " + param);
    }

    @DataProvider
    public Object[][] getData(ITestContext context) {
        String parameter = context.getCurrentXmlTest().getLocalParameters().get("names");
        String[] names = parameter.split(",");
        Object[][] returnValues = new Object[names.length][1];
        int index = 0;
        for (Object[] each : returnValues) {
            each[0] = names[index++].trim();
        }
        return returnValues;
    }
}

在这里,我们通过使用

testng.xml
 将通过 
,

文件传递的单个参数解析为多个值

这是第二个测试类的样子,它将接收测试类特定的参数。

public class SecondTestClass {
    @Test
    @Parameters({"age"})
    public void testMethod(int age) {
        System.out.println("Age = " + age );
    }
}

最后,这是

testng.xml
的样子:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="45160355_Suite" parallel="false" verbose="2" >
    <test name="45160355_test" verbose="2">
        <parameter name="names" value="Cedric, Julien"/>
        <classes>
            <class name="com.rationaleemotions.stackoverflow.qn45160355.FirstTestClass">
            </class>
            <class name="com.rationaleemotions.stackoverflow.qn45160355.SecondTestClass">
                <parameter name="age" value="15"/>
            </class>
        </classes>
    </test>
</suite>

这是输出

... TestNG 6.11 by Cédric Beust ([email protected])
...
{names=Cedric, Julien}
Name = Cedric
Name = Julien
Age = 15

===============================================
45160355_Suite
Total tests run: 3, Failures: 0, Skips: 0
===============================================

0
投票

虽然 Krishnan 建议的答案工作得很好,但有一种方法可以仅使用 TestNG xml 文件和 @Parameter 注释来完成此操作,而根本不使用 DataProvider。 它可能很笨重,特别是对于较大的项目,但它完全符合arctic_monkey 的要求,也许有人会发现它很有用。

您可以创建多个具有不同参数值的测试标签,但在每个标签中执行相同的测试:

<suite name="Parameterized tests">
    <test name="Login Tests one">
        <parameter name="one"/>
        <classes>
            <class name="test.java.Login"/>
        </classes>
    </test>
    <test name="Login Tests two">
        <parameter name="two"/>
        <classes>
            <class name="test.java.Login"/>
        </classes>
    </test>
</suite>

您还可以在每个类标记中指示特定方法,以便不要多次运行整个套件,而只运行参数化方法:

<suite name="Parameterized tests">
    <test name="Login Tests one">
        <parameter name="one"/>
        <classes>
            <class name="test.java.Login">
                <methods>
                    <include name="loginTest"/>
                </methods>
            </class>    
        </classes>
    </test>
    <test name="Login Tests two">
        <parameter name="two"/>
        <classes>
            <class name="test.java.Login">
                <methods>
                    <include name="loginTest"/>
                </methods>
            </class>                        
        </classes>
    </test>
</suite>
© www.soinside.com 2019 - 2024. All rights reserved.