【问题标题】:Use TestNG dataProvider with dependsOnGroups to set order of execution使用 TestNG dataProvider 和 dependsOnGroups 来设置执行顺序
【发布时间】:2019-09-26 21:51:05
【问题描述】:

我有几个相互依赖的测试用例。可以在 TestNG 中使用 groupsdependsOnGroups@Test 注释中定义执行顺序:

public class MyTest {
    @Test(groups = { "group1" })
    public void testCase1() {
    }

    @Test(groups = {"group2"}, dependsOnGroups = { "group1" })
    public void testCase2() {
    }

    @Test(groups = {"group2"}, dependsOnGroups = { "group1" })
    public void testCase() {
    }

    @Test(groups = { "group3" }, dependsOnGroups = { "group2" })
    public void testCase4() {
    }
}

但我只需要一个@Test 方法和一个@DataProvider 动态地希望它给我组和依赖项。

public class MyTest {

    @Test(dataProvider = "test-cases", groups = {testCase[1]}, dependsOnGroups  = {testCase[2]})
    public void executeTest(TestCase testCase) throws Exception {
    }

    @DataProvider(name = "test-cases", parallel = true)
    public Object[][] getTestCases() {
        Object[][] testdata = new Object[...][...];
        // Fields: test name, group, depends on, test data 
        testdata[0] = {"TC#1", "group1", "",       "foo data"};
        testdata[1] = {"TC#2", "group2", "group1", "bar data"};
        testdata[2] = {"TC#3", "group2", "group1", "bzz data"};
        testdata[3] = {"TC#4", "group3", "group2", "frr data"};
        return testdata;
    }

}

不幸的是,这种方法不起作用,因为无法从 @Test(..., groups = {testCase[1]}, ...) 注释访问 testCase[1]。

是否有另一种方法可以将数据提供者驱动的测试按固定顺序排列?

【问题讨论】:

  • 当你说它不起作用时,你的意思是你无法在上面的代码中从@Dataprovider获取数据还是你不想在@Dataprovider中输入数据但想要它其他方式?
  • @user1207289 我阐明了我想要实现的目标:将数据驱动的测试用例按固定顺序排列。

标签: java testng testng-dataprovider


【解决方案1】:

根据您的 cmets 和编辑,我认为您希望将数据放入您的所有方法中,并按照它们在您的课程中出现的顺序运行它们。

您可以使用以下方法和testng.xmlpreserve-order="true" 来运行您的数据驱动测试。请注意,您可能必须删除 groupsdependsOnGroups,如下所示。

public class MyTest {

    @Test(dataProvider = "test-cases")     
    public void testCase1(Object[][] obj) {
        //access obj to get data
    }

    @Test(dataProvider = "test-cases")
    public void testCase2(Object[][] obj1) {
    //access obj1 to get data
    }

    @Test(dataProvider = "test-cases")
    public void testCase(Object[][] obj2) {
     //access obj2 to get data

    }

    @Test(dataProvider = "test-cases")
    public void testCase4(Object[][] obj3) {
         //access obj3 to get data
    }
}

这是您的testng.xml,应该按照它们出现的顺序运行它

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="yourSuiteName" >

    <test name="FirstScenario_1" preserve-order="true">

        <classes>  
         <class name="yourPackage.MyTest" >
               <methods> 
                  <include name="testCase1" />
                  <include name="testCase2" /> 
                  <include name="testCase" />
                  <include name="testCase4" />
               </methods> 
        </classes>
    </test>
</suite>

【讨论】:

  • 感谢您的建议。我不想为每个测试用例创建一个测试方法,因为它们是动态创建的(例如从电子表格或数据库表中读取)=> 每个数据都是一个测试用例。也许我需要另一种方法来解决这个问题,但现在 dataProvider 工作得很好,除了我无法设置测试用例的执行顺序。
  • @arnep 上面的xml会设置顺序
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-03-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多