簡體   English   中英

只想在 Cucumber 功能文件中針對多個場景執行一次后台

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM