2013-03-08 81 views
2

即使其中一個步驟失敗,是否有任何方法可以繼續執行Cucumber步驟。在我目前的設置,當一步失敗,黃瓜跳過剩餘的步驟....我不知道是否有某種方法來扭轉黃瓜亞軍安裝..在失敗後繼續運行黃瓜步驟

我可以註釋掉失敗的步驟,但它不實用,當你不知道哪個步驟將失敗...如果我可以繼續剩下的步驟,我會知道一次完整的失敗測試集......而不是循環過週期...

環境:Cucumber JVM,R,Java ,Ibatis,Spring Framework,Maven

回答

3

在步驟失敗後繼續執行步驟並不是一個好主意,因爲步驟失敗可能會使世界處於不變的違規狀態。更好的策略是增加場景的粒度。不要用幾個「Then」語句編寫單個場景,而要使用示例列表分別測試每個後置條件。有時場景大綱和示例列表可以合併類似的故事。 https://cucumber.io/docs/reference#scenario-outline

有一些關於添加特徵來標記特定步驟以在故障後繼續的討論。 https://github.com/cucumber/cucumber/issues/79

+0

我看到這是從幾年前,但如果你可以,請你更新斷開的鏈接? – pelican 2016-09-26 14:15:01

0

一種方法是捕獲所有斷言錯誤,並在最後一步中決定是否失敗或通過測試用例。在這種情況下,您可以調整它,比如說,檢查任何步驟,看看是否有超過n個錯誤並且通過測試,如果是的話。

這裏是我做了什麼:

  1. 在@Before初始化一個StringBuffer爲誤差的測試案例
  2. 漁獲的斷言錯誤,並加入到StringBuffer的,所以,他們不拋出並終止測試用例。
  3. 檢查StringBuffer以確定測試用例是否失敗。

    StringBuffer verificationErrors; 
    
    // Initialize your error SringBuffer here 
    
    @Before 
    public void initialize() { 
        verificationErrors = new StringBuffer(); 
    } 
    // The following is one of the steps in the test case where I need to assert  something 
    
    @When("^the value is (\\d+)$") 
    public void the_result_should_be(int arg1) { 
        try { 
         assertEquals(arg1, 0); 
        } 
        catch(AssertionError ae) { 
         verificationErrors.append("Value is incorrect- "+ae.getMessage()); 
        } 
    

檢查的StringBuffer在@After或測試用例的最後一步,以確定是否可以通過它還是失敗,如下所示:

if (!(verificationErrors.size()==0)) { 
    fail(verificationErrors.toString()); 
} 

唯一的問題是在報告中,所有步驟看起來都很綠,但測試用例看起來失敗了。然後,您可能需要查看錯誤字符串以瞭解哪些步驟失敗。只要存在斷言錯誤,您就可以向該字符串添加額外信息,以幫助您輕鬆找到該步驟。

+1

「唯一的問題是,在報告中,所有步驟看起來都很綠,但測試用例看起來失敗。」這正是你不想這樣做的原因。 – Ariejan 2014-04-16 08:25:29

相關問題