2012-08-30 24 views
3

如何在運行時在我的測試用例中獲取當前運行的套件名稱?我正在使用下面顯示的代碼來獲取當前的套件名稱。在運行時在TestNG中獲取套件名稱

監聽器類:

public class SuiteListener implements ISuiteListener{ 

private static ThreadLocal<ISuite> ACCESS = new ThreadLocal<ISuite>(); 

public static ISuite getAccess() { 
     return ACCESS.get(); 
    } 

@Override 
public void onFinish(ISuite suite) { 
    ACCESS.set(null); 
} 

@Override 
public void onStart(ISuite arg0) { 
    ACCESS.set(arg0); 
} 

} 

測試類:

@Listeners({ SuiteListener.class }) 
public class Practise { 

    @DataProvider(name = "getXlsPath") 
    public Object[][] createData() throws Exception { 
     String [][] testCasesPaths=null; 
     ISuite suiteListner = SuiteListener.getAccess(); 
     String runningSuite=suiteListner.getName(); 
     System.out.println(runningSuite); 
     testCasesPaths[0][0]="1.xls"; 
     testCasesPaths[1][0]="2.xls"; 
     return testCasesPaths; 
    } 

    @Test(dataProvider="getXlsPath") 
    public void test2(String xlsPath){ 
     System.out.println(xlsPath); 
    } 
} 

TestNG的XML:

<suite name="tables" > 
<test name="vendor" > 
    <classes> 
     <class name="Practise" ></class> 
    </classes> 
</test> 

代碼工作完美,直到我指定的parallel="tests"套件中的屬性:

<suite name="tables" parallel="tests" > 

在這種情況下,我無法獲取套件名稱 - 它沒有執行。 有人可以幫助我,獲取套件名稱?

回答

9

您可以訪問來自ITestContext的XML文件和當前XML測試,它可以測試方法注入:在調用onStart

@Test 
public void f(ITestContext ctx) { 
    String suiteName = ctx.getCurrentXmlTest().getXmlSuite().getName(); 
0

()就可以得到當前運行的套件的套件名稱,您可以使用記錄器或系統輸出進行打印。

public void onStart(ISuite suite) { 
      suite.getName(); 
     } 
0

您可以從ITestContext

public static String getSuiteName(ITestContext context){ 
    return context.getCurrentXmlTest().getSuite().getName(); 
} 
閱讀
相關問題