使用Selenium DataProvider运行多个测试

时间:2016-08-03 15:28:27

标签: java selenium arraylist testng dataprovider

我目前正在使用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

2 个答案:

答案 0 :(得分:3)

因此...

您的先决条件:

  • excel文件,每行 - 一个数据集
  • 为每个数据集运行测试

你能做什么:

  1. 创建@DataProvider,其中包含您的数据集Iterator<Object[]>,其中每个Object []都是您从excel获取的行。 (最简单的一个)
  2. 使用@Factory手动迭代数据集并调用测试方法。
  3. 使用@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());
    }
}