当前位置: 首页 > 知识库问答 >
问题:

TestNG使用DataProvider一次执行一个迭代的测试

钱选
2023-03-14

我正在使用数据提供程序向每个测试方法传递数据。假设数据提供程序中有2行。

@Test(dataProvider = "TestData")
public void firstTest(String data){
   //Code
}

@Test(dataProvider = "TestData")
public void secondTest(String data){
   //Code
}

@Test(dataProvider = "TestData")
public void thirdTest(String data){
   //Code
}

当前运行单个测试方法的所有迭代,然后运行第二个测试方法...例如:

firstTest()
firstTest()

secondTest()
secondTest()

thirdTest()
thirdTest()

但我想按以下顺序运行。

firstTest()
secondTest()
thirdTest()

firstTest()
secondTest()
thirdTest()
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">

<suite name="Test-Automation" parallel="methods" thread-count="2" verbose="1">
    <test name="Suite Test" parallel="methods" thread-count="2" verbose="1">
        <listeners>
             <listener class-name="GroupByInstanceEnabler"></listener>
        </listeners>

        <classes>
            <class name="SampleTest">
                <methods>
                    <include name="firstTest"/>
                    <include name="secondTest"/>
                    <include name="thirdTest"/>
                </methods>
            </class>
        </classes>
    </test>
</suite>
import org.testng.ISuite;
import org.testng.ISuiteListener;

public class GroupByInstanceEnabler implements ISuiteListener {

    @Override
    public void onStart(ISuite suite) {
        System.out.println("Hello");
        suite.getXmlSuite().setGroupByInstances(true);
    }

    @Override
    public void onFinish(ISuite suite) {

    }
}

http://fruzenshtein.com/testng-dataprovider-run-tests-sequency/

共有1个答案

杨志强
2023-03-14

您应该使用由数据提供程序支持的TestNG工厂。

下面的示例向您展示了如何使用与数据提供程序耦合的TestNG工厂。

package com.rationaleemotions.stackoverflow.qn48399410;

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

public class SampleTestClass {
    private int iteration;

    @Factory(dataProvider = "dp")
    public SampleTestClass(int iteration) {
        this.iteration = iteration;
    }

    @Test
    public void firstTest() {
        System.err.println("firstTest() running for iteration #" + iteration);
    }

    @Test
    public void secondTest() {
        System.err.println("secondTest() running for iteration #" + iteration);
    }

    @Test
    public void thirdTest() {
        System.err.println("thirdTest() running for iteration #" + iteration);
    }

    @DataProvider(name = "dp")
    public static Object[][] getData() {
        return new Object[][]{
                {1},
                {2},
                {3}
        };
    }
}

这是套件xml文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="48399410_Suite" parallel="false" verbose="2">
    <test name="48399410_test" verbose="2" group-by-instances="true">
        <classes>
            <class name="com.rationaleemotions.stackoverflow.qn48399410.SampleTestClass"/>
        </classes>
    </test>
</suite>
...
... TestNG 6.13.1 by Cédric Beust (cedric@beust.com)
...
firstTest() running for iteration #2
secondTest() running for iteration #2

thirdTest() running for iteration #2
firstTest() running for iteration #3
secondTest() running for iteration #3
thirdTest() running for iteration #3
firstTest() running for iteration #1
secondTest() running for iteration #1
thirdTest() running for iteration #1
PASSED: firstTest
PASSED: secondTest
PASSED: thirdTest
PASSED: firstTest
PASSED: secondTest
PASSED: thirdTest
PASSED: firstTest
PASSED: secondTest
PASSED: thirdTest

===============================================
    48399410_test
    Tests run: 9, Failures: 0, Skips: 0
===============================================

===============================================
48399410_Suite
Total tests run: 9, Failures: 0, Skips: 0
===============================================
 类似资料:
  • 我正在使用TestNG数据提供程序读取数据池。xls文件,在名为ReadData的类中包含1017个测试用例和214列。 然后,我将214个String参数传递到名为Enterprise Data的单独类中的@Test注释中。 我在@Test中创建了一个for循环,只执行ceratin迭代的操作(比如1-10),它总共只输入10个测试用例。我的问题是,在运行结束时,它仍然显示“Total test

  • 问题内容: 我有一个测试,可以从数据提供者那里接收数据。我希望此测试与数据提供者的不同值并行运行。 我尝试了类似的方法: } 我收到的输出是: 你好:10 你好:12 你好:17 你好:11 你好:16 你好:14 你好:13 你好:15 产生10个线程,而我在线程池大小中指定5个。您能否告诉我们必须在上述代码段中添加哪些内容来控制数据提供程序线程池的大小。 问题答案: 您需要使用。在和不需要的值

  • 我正在使用@dataprovider TestNG 注释来传递不同的数据集。我的 TestNG 类包含 @BeforeClass、@DataProvider、三种@Test方法(一种使用数据提供程序的测试)和@After类。 数据提供程序包含 3 组数据(用户名和密码) 我只想知道如何按照以下顺序执行测试 --执行@Beforeclass - --转到测试并从数据提供程序打印第二组数据 --执行第

  • 问题内容: 我使用了。 是否可以将两个数据提供程序逐步赋予 相同的 测试功能? 我可以将两个提供程序合而为一,但这不是我想要的。 我需要(与本示例不同)独立生成数据。 我想让两个提供商都接受相同的测试。这可能吗? 问题答案: 否,但是没有什么可以阻止您将这两个数据提供程序合并为一个,并指定其中一个作为您的数据提供程序:

  • 我使用testNg用于使用java的自动化,我使用从excel获取数据并作为参数传递给测试脚本。 假设我在中有10行数据,我的测试用例将按顺序执行10次,但现在我想并行运行这10个测试,同时使用线程。 这能做到吗?如果是的话,有人能给我一个同样的例子吗?

  • 我对如何最好地实现一个简单的DataProvider有点困惑,以前没有这样做过。 我有一个非常简单的逗号分隔的.csv文件: 我只需要读入并迭代记录,对每个记录运行相同的测试,直到完成为止。 我不清楚如何(和/或最好的方式)从objRegArray对象检索每个记录。 我猜这是一个基本的集合问题;谁能给我指正确的路吗?