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

如何使用TestNG和DataProvider顺序执行测试

夹谷斌蔚
2023-03-14

我正在使用@dataprovider TestNG 注释来传递不同的数据集。我的 TestNG 类包含 @BeforeClass、@DataProvider、三种@Test方法(一种使用数据提供程序的测试)和@After类。 数据提供程序包含 3 组数据(用户名和密码)

我只想知道如何按照以下顺序执行测试

--执行@Beforeclass

-

--转到测试并从数据提供程序打印第二组数据 --执行第二个测试用例 -

-执行第三个测试用例

--转到测试并打印来自数据提供程序的第三组数据
--执行第二个测试用例
--执行第三个测试用例

--执行@Afterclass

public class SequentialExe {

    @BeforeClass
    public void started(){

        System.out.println("Class Started");
    }

    @DataProvider(name="testdata")
    public Object[][] getdata(){

        Object ob[] 
  []=ExcelUtils.excelread("C:/Users/Desktop/capsule.xlsx", 0);
        return ob;
    }

    @Test(dataProvider="testdata",priority=0)
    public void test01(String uname, String paswrd){

        System.out.println("Username is"+"--"+uname);
        System.out.println("Password is"+"--"+paswrd);

    }
    @Test(priority=1)
    public void test02(){

        System.out.println("This is second test case");
    }
    @Test(priority=2)
    public void test03(){

        System.out.println("This is third test case");
    }

    @AfterClass
    public void end(){

        System.out.println("Class END");
    }
}

现在我得到的结果是

已开始上课

用户名是--uname01
密码是--pwd01
用户名是--uname02
密码是--pwd02
用户名是--uname03
密码是--pwd03

这是第二个测试用例
这是第三个测试用例
类END

我正在寻找以下结果

已开始上课

用户名是--uname01
密码是--pwd01
这是第二个测试用例
这是第三个测试用例

用户名是--uname02
密码是--pwd02 这是第二个测试用例

这是第三个测试用例

用户名是--uname03
密码是--pwd03
这是第二个测试用例
这是第三个测试用例

类结束

请帮忙。

共有2个答案

章安宜
2023-03-14

使用@Factory注释可以生成预期的输出。参考:https://howtodoinjava . com/TestNG/difference-factory-data provider/

阎自怡
2023-03-14

您可以尝试使用@Factory注释来参数化测试用例。@DataProvider在测试方法级别工作,@Factory在类级别工作。我用@Factory尝试了您的代码,但无法产生您期望的输出。你可以试一试。

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

  • 我有一个关于testNG的问题。我有五类测试(a类、b类、c类、d类、e类),并且在每个类中都有3个测试(test1 test2 test3)问题是我在所有测试中都有@Test(组={"吸烟测试"},启用=真,优先级=1)-类a-类a-类a <代码>@测试(组={"吸烟测试"},启用=真,优先级=1) -类b<代码>@测试(组={"吸烟测试"},启用=真,优先级=2) -类b<代码>@测试(组={

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

  • 我正在使用数据提供程序向每个测试方法传递数据。假设数据提供程序中有2行。 当前运行单个测试方法的所有迭代,然后运行第二个测试方法...例如: 但我想按以下顺序运行。 http://fruzenshtein.com/testng-dataprovider-run-tests-sequency/

  • 我有一个包-'脚本' 根据剧本,我有两个类别——甲和乙 在一个类中,我有3个方法(@Test)按顺序编写- 在B班我有一种方法- TestNG. XML 在执行时——作为TestNG套件——右键单击TestNG XML并选择Run as a TestNG Suite 类B首先执行-这是因为类B中的@Test没有指定优先级,因此成为最高优先级 有没有办法让@Test的优先级只在类中起作用?为什么Te

  • 在带有testng注释的测试类中首先调用什么方法: 用@DataProvider注释 用@beforeMethod注释 我的情况如下: