2014-01-20 47 views
0

我想知道是否有一種方法可以讓不同的配置方法(比如在類級別,@ Before/AfterClass)讓用戶選擇在測試用例中使用哪種配置方法。 例如:TestNG條件配置方法

@BeforeClass 
public void configuration1() { 
    // Do your configuration1 
} 

@BeforeClass 
public void configuration2() { 
    // Do your configuration2 
} 

我想能夠選擇要使用的配置方法。當然,這可以通過配置方法中的條件來完成,但我想知道是否可以避免運行不包含特定運行中所需配置的方法。

在此先感謝!

+0

運行特定配置的標準是什麼? – Akbar

+0

例如,我可以使用兩個不同的JVM參數值運行我的測試:-Dconfiguration = config1或-Dconfiguration = config2。第一個應該用第一個配置方法運行我的測試,第二個用第二個配置方法運行。 –

回答

2

TestNG提供Listeners來定製默認功能。根據您的要求,IInvokedMethodListener需要實施。我不認爲命令行參數可以傳遞給testng xml,但試試你的運氣。在下面的代碼中,「配置」被假定爲來自testng xml的參數。

示例代碼(未測試)

public class CustomListener implements IInvokedMethodListener { 
    @Override 
    public void beforeInvocation(IInvokedMethod method, ITestResult itr) { 
    if (method.isConfigurationMethod()) { 
     String userPassed = method.getTestMethod().getXmlTest() 
       .getLocalParameters().get("configuration"); 
     if(based on userPassed , call configuration() method){ 

     } 
    } 
    } 

    @Override 
    public void afterInvocation(IInvokedMethod arg0, ITestResult arg1) { 
    // TODO Auto-generated method stub 
    } 
} 

如果你決定從你的java類調用這個監聽器,那麼你可以閱讀CMD行參數,並把它傳遞給CustomListener。只是一個想法。

+0

一旦聽者準備就緒,您可以以不同的方式使用它。有關詳細信息,請參閱上面的聽衆鏈接。 – Akbar

+0

看起來不錯,我會試試!謝謝! –

0

根據您的測試設置你可能只是使用組:

public class Test { 

    @BeforeClass(groups = {"A"}) 
    public void configuration1() {...} 

    @BeforeClass(groups = {"B"}) 
    public void configuration2() {...} 

    @Test(groups = {"A", "B"}) 
public void testFoo() {...} 

    @Test(groups = {"A"}) 
    public void testFoo() {...} 
} 

或者,你可能想參數化你的測試/使用數據提供者。

+0

這個問題是,相同的測試用例可以有不同的配置方法,我需要能夠選擇在執行時使用哪個配置。我不想讓這些組硬編碼,每次需要運行時都要更改它們...... –