【问题标题】:TestNG with 2 Testcase with data provider带有 2 个带有数据提供者的测试用例的 TestNG
【发布时间】:2018-05-27 11:17:55
【问题描述】:

我对 TestNG 有疑问。我有一些用于测试的数据集,但我想对数据集中的每个数据执行完整的测试周期。我该怎么做?

这是我的代码

@DataProvider(name = "login")
public static Object[][] usernamePassword() {
    // username, password, isSukses
    return new Object[][] { 
        { "coin", "coin123", true }, 
        { "coin", "coin", false },
        { "username", "password", false } };
}

 @Test(description = "Fill the Login Details", priority = 2)
public void FillLoginDetails(String user, String pass, boolean isSuccess) throws Exception {

    try {
        // Get the username element
        WebElement username = driver.findElement(By.id("uid"));
        username.sendKeys(user);

        // Get the password element
        WebElement password = driver.findElement(By.id("pwd"));
        password.sendKeys(pass);

        Thread.sleep(1000);

        TestNGResults.put("3", new Object[] { 2d, "Fill Login form data (Username/Password)",
                "Login details gets filled", "Pass" });

    } catch (Exception e) {
        TestNGResults.put("3",
                new Object[] { 2d, "Fill Login form data (Username/Password)", "Login form gets filled", "Fail" });
        Assert.assertTrue(false);
    }
}

@Test(description = "Perform Login", priority = 3)
public void doLogin() throws Exception {

    try {
        // Click on the Login button
        WebElement login = driver.findElement(By.id("login-button"));
        login.click();

        Thread.sleep(1000);
        // Assert the user login by checking the Online user
        WebElement onlineuser = driver.findElement(By.cssSelector("h3.paddedleft > strong.ng-binding"));
        AssertJUnit.assertEquals("Welcome, " + "coin", onlineuser.getText());
        TestNGResults.put("4",
                new Object[] { 3d, "Click Login and verify welcome message", "Login success", "Pass" });
    } catch (Exception e) {
        TestNGResults.put("4",
                new Object[] { 3d, "Click Login and verify welcome message", "Login success", "Fail" });
        Assert.assertTrue(false);
    }
}

怎么能这样测试,

测试优先级 2(数据 1),

测试优先级3(数据1),


测试优先级 2(数据 2),

测试优先级 3(数据 2),


测试优先级 2(数据 3),

测试优先级 3(数据 3),

???

【问题讨论】:

  • 你现在得到的结果,
  • @Rizqi Ahmad Fauzan:请检查我的回答

标签: selenium testng testng-dataprovider


【解决方案1】:

您可以使用Factory Concepts实现上述场景。但是需要将测试数据移动到不同的类中,并且需要在您的测试类中进行一些修改。

请查看下面的网址,你会明白的。

http://fruzenshtein.com/testng-dataprovider-run-tests-sequentially/

Executing multiple test sequentially with different parameters testng

为您的参数化数据创建一个实例变量

String user; 
String pass;
boolean isSuccess;

用上述参数对构造函数进行重载并初始化实例变量

//Assumed the Class Name as LoginTest

LoginTest(String user, String pass, boolean isSuccess){
this.user=user;
this.pass=pass;
this.isSuccess=isSuccess;
}

为数据提供者创建另一个类

public class SampleFactory {

        @Factory(dataProvider="login")
        public Object[] createInstances((String userName, String password, boolean isSuccess) {
            return new Object[] {new LoginTest(userName, password,isSuccess)};
        }

        @DataProvider(name = "login")
        public static Object[][] usernamePassword() {
            // username, password, isSukses
            return new Object[][] { 
                { "coin", "coin123", true }, 
                { "coin", "coin", false },
                { "username", "password", false } };
        }

    }

配置和运行 TestNG XML

在您的 testng xml 中单独添加 SampleFactory 类并运行您的测试。

【讨论】:

    【解决方案2】:

    您的测试缺少 dataProvider="login"

    @Test(dataProvider="login", description = "执行登录", priority = 3)

    【讨论】:

      猜你喜欢
      • 2023-03-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多