有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java TestNG:在dataProvider的一次迭代后进行下一次测试

所以我有两个测试,一个是检查注册test01_signIn,如果通过了,它将进入第二个测试test02_CheckNewsStandElements,它检查主页元素的可见性,唯一的问题是第一个测试有一个如下所示的数据提供程序:

@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

共 (1) 个答案

  1. # 1 楼答案

    当您使用@DataProvider将数据注入测试方法时,TestNg将在一行中运行此方法,其数量是您拥有的数据的两倍。此外,测试方法之间没有依赖关系。因此,您的test01_signIn独立于test02_CheckNewsStandElements执行

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

    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");
            }
        }
    }
    

    注意:尽管测试将以正确的顺序执行,但在测试报告中,它们仍将被分组和排序