2017-05-31 42 views
0

我有10個測試,要在黃瓜中運行,我使用紅寶石來編寫我的代碼。測試中的應用程序設計,迫使我進行相互依賴的測試。再次運行黃瓜場景,直到通過

因此,直到前面的情況是通過,下一個失敗。如果第二種情況失敗,我添加了cucumber_wants_to_quit,以避免等待只獲取失敗報告。現在,我正在尋找類似的東西,再次運行第二個場景,並繼續運行它直到pass,然後再繼續執行第三個場景。

我知道命令cucumber re-run,但不想使用它,因爲這基本上運行所有場景並在第一次完整運行完成後運行失敗的案例。

我的要求基本上是,當第二個場景失敗時,在轉到第三個場景之前,運行第二個場景直到通過。在編碼語言類似

After do |scenario.name| 
    if scenario.name == failed? 
     status = scenario.name.run_again until scenario.name == passed 
     if !status 
      Cucumber.wants_to_quit = true 
     end 
    end 
end 

對此有什麼幫助?

+0

如果第二種情況失敗,如何再次運行它使其通過? – grizzthedj

+0

在第二次測試中頻繁出現間歇性錯誤。但是,當您將其作爲一般問題時。有沒有可能這樣做?雖然我同意這不是最佳做法 –

回答

2

我認爲你正在攀登一個滑坡,有相互依賴的測試通過。這種方法可能會持續出現問題。

我會推薦編寫你的測試,使它們互不依賴,並使用像Factory Girl這樣的框架來存放測試對象等。這裏有很大的靈活性,並且與黃瓜很好地集成在一起。

更新:根據您的意見,OTP的測試應該是在您的TEST環境以外完成的集成測試。例如,當您將新代碼部署到您的DEV環境中時,您的集成測試(即測試OTP)應該在部署的代碼上運行。

在您的TEST環境中,您可以使用OTP(帶有Factory Girl)fake。這將消除間歇性故障,並使測試彼此獨立,這使您的測試套件更加乾淨和可維護。

在短期內,也許您可​​以創建一個全局狀態變量來保存測試運行的狀態。缺點是你必須在每個測試中檢查一下。

+0

我同意這不是他的最佳做法..還有,如果我想測試個人功能。我的應用程序通過註冊過程,在開始強制註冊時接收OTP。在2-5分鐘內每次觸發一次OTP使得OTP接收時間非常高,並且由於未收到OTP,所以一半或更多測試失敗。因此,爲了消除對OTP的完全依賴性,我只進行了第一次測試,並且其他人已經登錄。我會看看您提到的框架。 把我的問題作爲一個普遍的問題,我想知道它的可能性嗎? –

+0

'在排序術語中,也許可以創建一個全局狀態變量來保存測試運行的狀態。缺點是你必須在每次測試中檢查一下。「好吧!我想我得到你在說什麼...... –

+0

OTP的測試應該是一個在你的測試環境之外完成的集成測試。您可以在您的測試環境中(使用Factory Girl)「僞造」OTP,因爲它使測試套件變得複雜。這將消除間歇性故障,並使測試彼此獨立,這使您的測試套件更加乾淨和可維護。 – grizzthedj