2013-07-18 98 views
2

我們的項目中有很多JBehave故事(Java,Selenium)。有時,在語法上相同的不同故事中有步驟,但背後有不同的邏輯。例如:步驟:哪些是編寫/組織JBehave故事的良好實踐?

When saves data 

在一個故事中意味着只需點擊保存按鈕,但在另一種情況下需要更復雜的行爲。 它可以在不同的故事中定義這些步驟是這樣的:

When saves Employee data 
When clicks Save button and confirms save 

但在大項目有很多的故事,這是很難編輯喜歡這些故事。有時商業人士也反對這種故事修改。 您可以在這些情況下推薦一些最佳實踐或代碼示例嗎?可能在技術上定義測試範圍是可能的 - 就像這些將是員工屏幕的故事和方法,但這些是針對項目屏幕?或者還有其他一些想法如何處理?

附加信息:現在測試按文件夾進行組織,如下所示:Organising JBehave stories,但它們被設置爲一個對象。安裝與這些非常相似:http://jbehave.org/reference/stable/developing-stories.html#configuring

回答

2

通常,如果用戶可以分辨出不同,那麼自動化應該能夠做到這一點。

使用您的自動化工具查找能夠顯示您所處環境的內容。例如,如果您有兩個屏幕,一個用於「聯繫人」,另一個用於「員工數據」,則查找該文本並你會知道你在哪個屏幕上。或者,您可以查看URL,或者包含自動化工具將找到的特定隱藏標識符。

這類似於「IsPurchased()」步驟here(我使用DSL而不是JBehave,它是C#,但原理相同)。如果你真的是look at the code for that step,你會看到我在尋找一種付款方式,如果沒有選擇一個有效的付款方式,那麼我選擇一個。

在你的情況下,你的上下文有點大於單選按鈕;這是一個完整的頁面。我建議您將「聯繫人」步驟與「員工數據」步驟以及「共享」步驟分開,並根據您的情況調用適合您的「聯繫人」步驟。

+0

感謝您的回覆。 尋找地址或特定的ID作品,但也許這不是很優雅,如果在代碼中(如果getScreenName()。equals(「Employees」){do methods1 ...})else if(getScreenName()。equals (){do methods2 ...'}? 關於分離 - 這確實是一個問題,我不知道如何在技術上做到這一點。 – Karloss

+0

最好是用一種語言表達凌亂的代碼和乾淨的場景(感謝您堅持這樣做!),你只會有這樣幾個步驟,我認爲,所以它不應該太討厭 – Lunivore

+0

最後,我們有你分開的背景下推薦 技術上我們有重寫的步驟這裏提到的工廠http://stackoverflow.com/questions/16525464/can-one-gtw-story-drive-1-jbhave-steps – Karloss