我目前正在使用testng + selenium来自动化我的测试,我有以下场景:
我需要从excel文件中读取,转换对象中的每一行并为每个行运行1次测试。我试图使用注释@DataProvider返回一个对象数组,但它只能返回Iterators和Objects [] []。有没有可用于从DataProvider返回Cliente对象数组的解决方法?我尝试了以下代码,但它只打印来自Client2的数据:
public class TestDataProvider
{
Cliente cliente;
@DataProvider(name = "test1")
public static Object[][] dataMethod() {
return new Object[][] { { new Cliente("Client1", "1111111111") },
{ new Cliente("Client2", "2222222222") }};
}
@Test(dataProvider = "test1")
public void testMethod(Cliente cliente) {
System.out.println(cliente.getNome() + " " + cliente.getCartao());
}
}
Edit1:Cliente class:
public class Cliente {
private static String name;
private static String card;
//Construtor method
public Cliente(String name, String card){
setname(name);
setCartao(card);
}
public String getName() {
return name;
}
public void setName(String name) {
Cliente.name = name;
}
public String getCard() {
return card;
}
public void setCard(String card) {
Cliente.card = card;
}
}
控制台中打印的值:
Client2 2222222222
Client2 2222222222
答案 0 :(得分:3)
因此...
您的先决条件:
你能做什么:
@DataProvider
,其中包含您的数据集Iterator<Object[]>
,其中每个Object []都是您从excel获取的行。 (最简单的一个)@Factory
手动迭代数据集并调用测试方法。@DataProvider
为@Factory
提供数据,并执行上述操作。
第二个和第三个选项很复杂,但如果您有其他参数(数据集除外)以运行测试,则会有一些好处。答案 1 :(得分:1)
感谢您的帮助。根据RocketRacoon的第三个建议,我设法解决了我的问题。以下是一个简单的例子:
public class ProvidedTest
{
private static nome;
private static cpf;
private static cartao;
@DataProvider
public static Object[][] dataProviderMethod() {
return new Object[][] { {"Client1", "111111111", "444444444"},
{"Client2", "222222222", "555555555"},
{"Client3", "333333333", "666666666"}};
}
@Factory (dataProvider="dataProviderMethod")
public ProvidedTest(String nome, String cpf, String cartao){
this.nome = nome;
this.cpf = cpf;
this.cartao = cartao;
}
@Test
public void testCase(){
System.out.println(cliente.getNome());
System.out.println(cliente.getCpf());
System.out.println(cliente.getCartao());
}
}