TestNG : dataProvider 迭代一次后进入下一个测试

TestNG : Go to the next test after one iteration of dataProvider

所以我有 2 个测试,一个检查注册 test01_signIn,如果它通过,则进入第二个测试 test02_CheckNewsStandElements,它检查主页元素的可见性,唯一的问题是第一个测试有一个如下所示的 DataProvider:

@Test(dataProvider = "Data")
public void test01_signIn(String idMedia, String nomMedia, String idSSO, String mdpSSO, String lien) {
     //Test
}

@Test
public void test02_CheckNewsStandElements(){
    WebDriverWait wait = new WebDriverWait(driver,5);
    WebElement modalCloseButton = null;
    modalCloseButton = nsp.modalCloseButton(driver);
    try{
        wait.until(ExpectedConditions.visibilityOf(modalCloseButton));
    }catch(TimeoutException e){
        System.out.println("The Element isn't visible");
    }
}

@DataProvider(name="Data")
public Object [][] getLists() throws IOException, GeneralSecurityException {
    Object [][] objects = newEDLI.importData().clone();
    return objects;
}

我得到的结果更像:

Test1
Test1
Test1
...
Test2
Test2
Test2

当我在寻找这样的结果时:

Test1 Test2 Test1 Test2

当您使用 @DataProvider 将数据注入测试方法时,TestNg 将 运行 此方法连续使用的次数与您拥有的数据一样多。此外,您的测试方法之间没有依赖关系。因此,您的 test01_signIn 独立于 test02_CheckNewsStandElements.

执行

您可以考虑使用@Factory来组织执行顺序。在这种情况下,您将数据注入测试 class 构造函数(数据提供者应该是静态的),并且您能够管理测试方法执行的顺序:

public class FactoryTest {
    private String idMedia;
    private String nomMedia;
    // .. rest of your data

    @Factory(dataProvider = "Data")
    public FactoryTest(String idMedia, String nomMedia, ...) {
        this.idMedia = idMedia;
        this.nomMedia = nomMedia;
        // set the rest of your fields
    }

    @DataProvider(name = "Data")
    public static Object[] getList() {
        return newEDLI.importData().clone();
    }

    @Test
    public void test01_signIn() {
        // use data from class members 
    }

    @Test(dependsOnMethods = "test01_signIn")
    public void test02_CheckNewsStandElements() {
        WebDriverWait wait = new WebDriverWait(driver,5);
        WebElement modalCloseButton = null;
        modalCloseButton = nsp.modalCloseButton(driver);
        try{
            wait.until(ExpectedConditions.visibilityOf(modalCloseButton));
        }catch(TimeoutException e){
            System.out.println("The Element isn't visible");
        }
    }
}

注意:虽然测试会以正确的顺序执行,但在测试报告中它们仍然会被分组和排序。