TestNG,ITestContext - getIncludedGroups returns 空

TestNG, ITestContext - getIncludedGroups returns Null

有几个不同测试组的测试。我正在尝试 运行 通过在内部使用带有 ITestContext 的 @DataProvider 来使用不同的数据集。我得到 NullPointerException。这是我的代码:

String url = "http://google.com";
FirefoxDriver driver = new FirefoxDriver();

@BeforeTest(groups={"A","B"})
public void launchOfBrowser(){
    driver.get(url);
}

@Test(dataProvider="Search", groups="A")
public void searchByUser(String author, String key) throws InterruptedException{
    System.out.println("Welcome " + author + ", your search value is: " + key);
    String enteredValue;
    driver.findElement(By.name("q")).sendKeys(key);
    Thread.sleep(3000);
    enteredValue = driver.findElement(By.name("q")).getAttribute("value");
    Assert.assertEquals(enteredValue, key);
    driver.findElement(By.name("q")).clear();
}

@Test(dataProvider="Search", groups="B")
public void searchByIncognito(String key) throws InterruptedException{
    System.out.println("Your search value is: " + key);
    String enteredValue;
    driver.findElement(By.name("q")).sendKeys(key);
    Thread.sleep(3000);
    enteredValue = driver.findElement(By.name("q")).getAttribute("value");
    Assert.assertEquals(enteredValue, key);
    driver.findElement(By.name("q")).clear();
}

@AfterTest(groups={"A","B"})
public void closeSessions(){
    driver.quit();
}

@DataProvider(name="Search")
public static Object[][] getDataFromDataprovider(ITestContext c){

    Object[][] groupArray = null;

    for(String group : c.getIncludedGroups()){
        if (group.equalsIgnoreCase("A")){
            groupArray =  new Object[][] {
                { "Guru99", "India" },
                { "Krishna", "UK" },
                { "Bhupesh", "USA" }
            };
        }
        else{
            groupArray =  new Object[][] {
                { "India" },
                { "UK" },
                { "USA" }
            };
        }   
    }
    return groupArray;
}
  • 如果您直接 运行 您的 testng class,它将首先调用无法获取组信息的数据提供程序,因为组不可用。但是,如果您通过 testng.xml 调用此 class,它将具有可用于 ITestContext 的组信息。

  • 你需要通过 TestNG xml.

下面是示例 xml:-

<!DOCTYPE suite SYSTEM "http://beust.com/testng/testng-1.0.dtd" >
<suite name="test-parameter">

  <test name="example1">

    <groups>
        <run>
            <include name="A" />
        </run>
    </groups>

    <classes>
       <class
        name="com.package123.ParameterByITestContextInDataprovider" />
    </classes>

  </test>


  <test name="example2">

    <groups>
        <run>
            <include name="B" />
        </run>
    </groups>

    <classes>
       <class
        name="com.package123.ParameterByITestContextInDataprovider" />
    </classes>

  </test>

</suite>