所以,我试图让我的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。但这就像是一个不正确的编程设置,不是吗?答案 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{