当前位置: 首页 > 知识库问答 >
问题:

使用Selenium DataProvider运行多个测试

杭涵映
2023-03-14

我目前正在使用testng selenium来自动化我的测试,我有以下场景:

我需要从excel文件中读取数据,转换对象中的每一行,并为每一行运行一个测试。我试图使用annotation@DataProvider返回一个对象数组,但是它只能返回迭代器和对象[]。是否有任何变通方法可用于从数据提供程序返回客户机对象数组?我尝试了以下代码,但它只打印来自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());
    }
}

编辑1:客户类别:

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个答案

东方森
2023-03-14

谢谢你的帮助。通过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());
    }
}
盖翰池
2023-03-14

所以

您的先决条件:

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

你能做什么:

  1. 创建返回迭代器的@DataProvider
 类似资料:
  • 我有3个maven项目。项目1,项目2 为此,我在项目2 pom.xml文件中添加了这个 我的pom。Project3的xml是- 在项目3中,我添加了testng。xml文件来运行测试。现在如果我运行这个测试。xml文件,那么我所有的测试用例都成功运行了。如果我尝试使用maven测试运行测试用例,那么它会失败。 我已经在下面的pom文件中包含了testng.xml文件,以便使用maven运行te

  • 我知道怎么说 但如何指定多个? 这似乎只是随机运行一个测试。 这告诉我 在根项目“MyProject”中找不到任务“MyPackage.Model.ModelTest”。 我读了很多手册和教程(和一些SO帖子),但没有找到明确的答案。但是我看到有人通过-tests“somePackage.*”作为参数,所以我想空格周围的引号可能会有帮助。 这不会很快失败,但不幸的是,它只运行列表中的第一个测试。

  • 但是,我只想运行以一些字符串开始的文件。假设前缀为“AsiaUserTests”的文件。类似下面的内容 这将导致,所以我想知道是否有一种方法可以做到这一点,因为我在Web中找不到这样的东西。

  • 问题内容: 我想同时运行多个Selenium测试(在Jenkins服务器上)。 当前,由于ChromeDriver似乎通过特殊端口进行通讯,因此一次仅运行一次测试。因此,以某种方式,我想我必须通过Selenium将某种端口设置传递给ChromeDriver,以启动多个测试。 不幸的是,Selenium网站上的该主题为空:http : //docs.seleniumhq.org/docs/04_we

  • 问题内容: 我有一种创建2个远程Web驱动程序的方法。一个带有chrome,另一个带有Firefox: Driver.cs 然后我有一个Test类: } 问题是当Driver.Intialize被调用时,它无法同时运行chrome和firefox。我要发生的是,调用Init方法时,它将启动两个浏览器并在每个浏览器中运行测试方法。 问题答案: 我目前使用NUnit的方式。我遇到了同样的问题,找不到使

  • 我正在探索硒网格,用于在多个浏览器上执行测试。我已经按照在线教程配置了集线器和节点。我已经创建了一个测试脚本。 这是测试脚本的代码: 我的目标是在多个浏览器上运行此测试,我已经添加了所需的功能,如火狐, 感谢任何帮助