带@Dataprovider的TestNG @Factory

时间:2017-07-03 09:33:17

标签: selenium selenium-webdriver webdriver testng

所以,我试图让我的testsuite为每个测试用例运行多个凭证。

因此,我定义了一个数据提供程序,它将为@Factory提供凭据,以便针对每个凭据多次运行测试。

我的代码如下:

package TestSuite.TP_LogOut;

import org.testng.Reporter;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Factory;
import org.testng.annotations.AfterTest;
import org.testng.annotations.Test;

import Repository.URLs;
import SeLib.CompareURL;
import SeLib.LogIn;
import SeLib.WaitAndClick;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;

public class TC_LogOut{

    @BeforeTest
    public void beforeTest() throws InterruptedException{
        Reporter.log("The test has just begun.");
    }

    private WebDriver driver;
    private String username;
    private String password;

    @Factory (dataProvider="credentials")
    public setter(String username, String password){
        this.username=username;
        this.password = password;
        System.out.println("Credentials "+username+" "+password);
    }
    @DataProvider
    public static Object[][] credentials() {
        return new Object[][]   { {     "id1",  "pass1"  },
                                  {     "id2",  "pass2"  } };
    }
    @Test
    public void TC_LogIn() throws Exception{

        // use username, password here:
        LogIn.Execute(driver, username, password);
    }
}

出于某种原因,@ Factory不承认我看到的几个例子中的非返回类型,并指出它应该是一个void类型函数。

是否有明显的解决方案并不意味着@Factory创建多个测试用例实例?

如果没有,返回类型应该如何?

谢谢...

编辑:由于我在测试用例中调用了登录函数,通过将驱动程序传递给LogIn.Execute方法,我认为只是让LogIn处理运行多个测试用例并且这是一个好主意。那么它只会使它变得更简单,而不必在每个测试用例中维护@Factory和@DataProvider。但这就像是一个不正确的编程设置,不是吗?

1 个答案:

答案 0 :(得分:1)

最好的解决方案就是在没有@Factory的情况下使用@DataProvider,例如:

   @DataProvider
    public static Object[][] credentials() {
        return new Object[][]   { {     "id1",  "pass1"  },
                                  {     "id2",  "pass2"  } };
    }
    @Test
    public void TC_LogIn(String username, String password) throws Exception{