5

我正在使用 TestNG 在 Java 中运行基于 Selenium 的测试。我有一堆重复的测试。通常,除了测试名称和一个参数之外,它们的作用都相同。

我想自动生成它。我正在考虑使用工厂。有没有办法生成不同名称的测试?最好的方法是什么?

至于现在我有类似下面的东西,我想创建 10 个测试,比如 LinkOfInterestIsActiveAfterClick

@Test(dependsOnGroups="loggedin")
public class SmokeTest extends BrowserStartingStoping{

public void LinkOfInterestIsActiveAfterClick(){
        String link = "link_of_interest";
        browser.click("*",link);
        Assert.assertTrue(browser.isLinkActive(link));
    }

}
  • 我的 XML 套件是从 Java 代码自动生成的。
  • 测试名称对于记录哪个链接处于活动状态以及哪个链接不处于活动状态至关重要。
4

2 回答 2

8

让您的测试类实现org.testng.ITest并覆盖getTestName()以返回您想要的名称。

于 2010-04-30T16:40:41.617 回答
2

所以我将 Factory 与 DataProvider 连接起来,并使用了上下文的属性。

@DataProvider(name = "DP1")
public Object[][] createData() {
  Object[][] retObjArr={
  {"Link1","link_to_page"},
  {"Link2","link_to_page"},
  return retObjArr;
}

@Test (dataProvider = "DP1")
public void isActive(String name, String link){
  this.context.setAttribute("name", name);
  browser.click(link);
  Assert.assertTrue(browser.isLinkActive(link));
}

在监听器中

public class MyListener extends TestListenerAdapter{
  @Override
  public void onTestSuccess(ITestResult tr){
    log("+",tr);
  }
  //and similar

  private void log(String string, ITestResult tr){
    List<ITestContext> k = this.getTestContexts();
    String testName = tr.getTestClass().getName();      
    for (ITestContext i: k)
    {
      if (i.getAttribute("name") != null)
        logger.info(testName+"."+i.getAttribute("name"));
    }
  }

}
于 2010-05-07T10:38:37.083 回答