开发者

How to generate tests with different names in TestNG?

I'm using TestNG to run Selenium based tests in Java. I h开发者_如何学Goave a bunch of repeated tests. Generally, they do all the same except of test name and one parameter.

I want to automate generation of it. I was thinking about using factory. Is there a way to generate tests with different name? What would be the best approach to this?

As for now I have something like below and I want to create 10 tests like 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));
    }

}
  • My XML suite is auto-generated from Java code.
  • Test names are crucial for logging which link is active, and which one is not.


Have your test class implement org.testng.ITest and override getTestName() to return the name you want.


So I connected Factory with DataProvider and used attributes of contexts.

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

And in the Listener

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

}
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜