5

TestNGを使用して、JavaでSeleniumベースのテストを実行しています。何度もテストを繰り返しています。一般に、テスト名と1つのパラメーターを除いて、すべて同じように動作します。

生成を自動化したい。工場の利用を考えていました。別の名前のテストを生成する方法はありますか?これに対する最善のアプローチは何でしょうか?

今のところ私は以下のようなものを持っています、そして私は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));
    }

}
  • 私の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 に答える