2011-12-13 122 views
2

所以這是我的困境。我一直在使用Selenium,TestNG和iText從自動化測試運行的結果中生成漂亮的PDF報告,但最近我被告知他們不希望競爭庫TestNG與JUnit競爭,並被告知開始使用JUnit 。JUnit參數化測試在測試後獲取參數

我正在運行這些JUnit測試的參數,我想知道有沒有辦法在測試運行後/期間訪問參數?參數是帶有瀏覽器名稱的字符串,用於告訴Selen WebDriver可以獲取哪些內容,並且很高興知道測試在某個瀏覽器中通過/失敗。一旦測試運行完成,JUnit在您可訪問的信息中似乎非常有限。

我有一個類,它擴展了junit.framework.TestListener,它偵聽每個測試的開始/停止,這裏是我可以收集測試信息的地方。

currentTest是類型BaseTestResult這是我寫的一個類,只是將測試結果存儲在列表中。

import junit.framework.AssertionFailedError; 
import junit.framework.Test; 
import junit.framework.TestListener; 
import junit.framework.TestResult; 
import utilities.reporting.BaseReporting; 
import utilities.reporting.BaseTestResult; 
import utilities.reporting.ResultsPerSuite; 

public class BaseListener implements TestListener { 

    private ResultsPerSuite resultsPerSuite; 
    private BaseReporting baseReporter; 
    private BaseTestResult currentSuite; 
    private BaseTestResult currentTest; 
    private long startTime; 
    private long endTime; 
    private long suiteStartTime; 
    private long suiteEndTime; 

    public BaseListener() { 
     baseReporter = new BaseReporting(); 
     resultsPerSuite = new ResultsPerSuite(); 
     currentTest = new BaseTestResult(null, null); 
    } 

    public void startSuite(Test suite) { 
     suiteStartTime = System.currentTimeMillis(); 
     currentSuite = new BaseTestResult(suite); 
    } 

    @Override 
    public void startTest(Test arg0) { 
     startTime = System.currentTimeMillis(); 
     currentTest = new BaseTestResult(arg0);  
    } 

    @Override 
    public void addError(Test arg0, Throwable arg1) { 
     currentTest.addError(new BaseTestResult(arg0, arg1)); 

    } 

    @Override 
    public void addFailure(Test arg0, AssertionFailedError arg1) { 
     currentTest.addFailed(new BaseTestResult(arg0, arg1)); 

    } 

    @Override 
    public void endTest(Test arg0) { 
     endTime = System.currentTimeMillis(); 
     currentTest.setRuntime(startTime - endTime); 
     // If both empty, then test passed, so add to passed results. 
     if (currentTest.getFailed().isEmpty() 
       && currentTest.getErrors().isEmpty()) { 
      resultsPerSuite.addPassed(currentTest); 
     } else { 
      resultsPerSuite.addFailed(currentTest); 
     } 
    } 

    public void endSuite(TestResult testEventDriver) { 
     suiteEndTime = System.currentTimeMillis(); 
     currentSuite.setRuntime(suiteEndTime - suiteStartTime); 
     resultsPerSuite.setSuite(currentSuite); 

     baseReporter.printToConsole(resultsPerSuite); 

    } 

    /** 
    * @return the allTestResults 
    */ 
    public ResultsPerSuite getAllTestResults() { 
     return resultsPerSuite; 
    } 

} 
+0

我無法幫助您解決您的問題,但我讚賞您使用這些工具。 –

+0

大聲笑,謝謝,一點鼓勵總是讚賞。 = P –

+0

這很奇怪。爲什麼使用TestListener,它是JUnit 3,而不是RunListener,它是JUnit 4?您有使用JUnit 3的原因嗎?這意味着你無法訪問JUnit 4中的所有新東西。 –

回答

1

我不知道如何得到它做你是從TestListener裏面找什麼不平凡創建自己Runner。但是你可以用TestRule來處理它。

由於您似乎在使用監聽器將結果發送到外部服務,因此您可能會有更好的運氣,特別是通過與自己的監聽器進行通信的TestWatcher進行綁定。它可以訪問本地類成員變量,並可以很容易地報告它們。

+0

感謝您的幫助,我不得不介紹一個靜態變量,我不是靜態變量的粉絲,但它的工作原理。 –