如何在TestNG中生成具有不同名称的测试?

Urs*_*lek 5 java testng factory

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

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

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

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

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

}
Run Code Online (Sandbox Code Playgroud)
  • 我的XML套件是从Java代码自动生成的.
  • 测试名称对于记录哪个链接处于活动状态以及哪个链接不活动至关重要.

Ced*_*ust 8

让测试类实现org.testng.ITest并覆盖getTestName()以返回所需的名称.


Urs*_*lek 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));
}
Run Code Online (Sandbox Code Playgroud)

在监听器中

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"));
    }
  }

}
Run Code Online (Sandbox Code Playgroud)