[英]Need to execute a step (each feature may have diff step) only once before a Cucumber feature file
[英]Want to execute Background only once in Cucumber feature files for multiple scenarios
我想在多個場景的每個 cucumber 功能文件中只執行一次后台。 我怎樣才能在步驟文件中做到這一點?
特點:用戶可以驗證............
背景:給定輸入特定邏輯的測試數據
場景:驗證............ 1 當 A1 和 B1 然后 C1
場景:驗證............ 2 當 A2 和 B2 然后 C2
場景:驗證............ 2 當 A3 和 B3 然后 C3
后台被設計為在每種情況之前每次都運行。 破解背景也不是很好而且標准。
測試應該隔離 。 這就是Cucumber的設計方式,並且有充分的理由。 除非您絕對需要,否則我強烈建議不要這樣做。
如果您需要在整個測試套件之前執行某些操作,請考慮使用@BeforeAll掛鈎。
就是說,我以前遇到過。 我們曾經進行過一些測試,這些測試將啟動一個耗時的過程(例如,配置VM,一次將花費10分鍾..),但是如果已經完成,則可以在其他測試中跳過。
因此,您可能需要按照以下步驟設計步驟。
“鑒於.. X已經完成”
然后在該步驟中檢測X是否已完成,如果沒有,則執行X。如果已完成,則跳過它。 例如,說創建用戶是一個絕對需要時間的過程。 那我們可以做..
Given that user "Joe Bloggs" has been created
步驟定義將首先嘗試確定Joe是否存在,然后如果不存在,則創建用戶。 您最初有啟動問題,但隨后的其他測試將可以安全地假定Joe存在。
為什么您不應該這樣做
如果這樣做,您的測試很有可能會相互沖突。
假設您有許多使用Joe Bloggs用戶的測試。 也許有些人會將他從系統中刪除。 有些可能會暫時停用用戶,添加角色,更改其名稱..各種各樣的事情。 所有測試都假設他們正在測試的系統有某些問題,並且您有意破壞關於環境的測試假設。
如果您正在運行並行測試,那就特別糟糕。 也許您的系統有一個限制,即只有一個人才能以Joe身份登錄。 或每項測試都在改變有關Joe的工作量,並且任何測試都無法假設任何有關Joe用戶狀態的信息。 然后,您將陷入一片混亂。
最好的解決方案通常是為您運行的每個測試創建全新的數據。 打開這些API並為每次測試運行創建一次性數據。 這是一篇關於它的好博客文章: https : //opencredo.com/test-automation-concepts-data-aliases/
如果您只希望后台運行一次。 您可以使用實例變量ex添加條件,i == 0,然后執行邏輯並在方法末尾遞增i。
在下一個場景中,i值為1,不等於0,它將不會執行邏輯。
我們有類似的問題,無法為多種情況的背景找到任何解決方案。 后台設計為在所有方案都將運行“背景”之后針對所有方案運行。 如果您在這種情況下有示例,它將在每個示例之后運行。
我們必須選擇解決此問題。
1)使用junit的@BeforeClass注釋2)創建安裝方案,它將始終首先執行。
例如:在API測試中,您只需登錄一次,然后每次都使用該會話訪問其他API
功能:給定客戶的設置數據以系統管理員身份登錄
場景:驗證......... 1當A1和B1然后C1
場景:驗證......... 2當A2和B2然后C2
場景:驗證......... 2當A3和B3然后C3
在第一個方案之后,它將執行所有方案,並且您不需要使用背景。
我想說,每次必須將后台作為業務需求的一部分時,否則會創建不需要的測試數據並在測試環境上加載,並可能導致測試執行時間變慢。
如果您找到其他解決方案,請告訴我。
也可以通過創建標記的@Before方法並將Scenario對象作為參數來實現在每組場景或場景大綱之前運行一些步驟( 后台 )。 在before方法中,僅當方案名稱與上一個方案不同時才執行邏輯。
以下是您的操作方法:
Feature:Setup Data Given Customer logs in as System Admin
@BeforeMethodName
Scenario Outline: Verify ......... 1
When <Variable1> And <Variable2>
Then <Variable3>
Examples:
| Variable1 | Variable2 | Variable3 |
| A1 | B1 | C1 |
| A2 | B2 | C2 |
| A3 | B3 | C3 |
| A4 | B4 | C4 |
@BeforeMethodName
Scenario Outline: Verify ......... 2
When <Variable1> And <Variable2>
Then <Variable3>
Examples:
| Variable1 | Variable2 | Variable3 |
| X1 | Y1 | Z1 |
| X2 | Y2 | Z2 |
| X3 | Y3 | Z3 |
| X4 | Y4 | Z4 |
並定義如下的@BeforeMethodName:
private static String scenarioName = null;
public className BeforeMethodName(Scenario scene) {
if(!scene.getName().equals(scenarioName)) {
// Implement your logic
scenarioName = scene.getName()
}
return this;
}
這樣,將在每個方案之前調用BeforeMethodName,但每個方案大綱僅執行一次邏輯。
舊問題,但添加以防其他人發現此問題。
如前所述,黃瓜只應用於構建代碼。
您可以使用標記的掛鈎創建用於子測試集的項目。 此外,您可以將代碼隔離到Helpers中,然后在ruby步驟中有條件地調用這些helper。
可能需要更清晰地做出判斷
我們可以在單個功能文件中同時包含場景和場景大綱。 此方案僅運行一次,方案大綱將根據示例表中給出的數據運行
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.