2010-04-30 58 views
5

我正在使用TestNG在Java中運行基於Selenium的測試。我有一堆重複的測試。通常,除了測試名稱和一個參數以外,它們都是相同的。如何在TestNG中使用不同名稱生成測試?

我想自動生成它。我正在考慮使用工廠。有沒有辦法用不同的名字生成測試?最好的辦法是什麼?

至於現在我有類似下面,我想創建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代碼。
  • 測試名稱對於記錄哪個鏈接處於活動狀態至關重要,哪些不是。
+0

[名稱爲動態生成的TestNG進行在Eclipse插件(可能重複http://stackoverflow.com/questions/12257387/names-for-dynamically- generated-testng-tests-in-eclipse-plugin) – Nathan 2015-09-02 00:59:24

回答

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

} 
+0

你可以在這裏展示你如何使用Factory類嗎? – djangofan 2014-07-30 15:09:02

+0

@djangofan對不起,但我沒有代碼了。 (4年前回答) – 2014-07-30 15:42:24

+0

好吧,我可以告訴你,你在這裏發佈的答案並不實際。現在,如果你真的顯示了一個工廠生成單獨的類,那麼我相信它會工作。在從DataProvider生成的測試中設置測試名稱不起作用,因爲類實例在類的多個參數化調用之間共享測試名稱。 – djangofan 2014-07-30 18:26:57

8

讓您的測試課程實施org.testng.ITest並覆蓋getTestName()以返回您想要的名稱。

相關問題