2014-12-02 42 views
2

我有很多應用程序需要測試,它們具有很多重疊的功能。這裏有一個場景的一個過於簡單的例子,我可能有:行爲 - 應用程序之間的共同特徵,避免重複

Given <name> is playing a game, 
When they shoot at a <color> target 
Then they should <event> 

Examples: 
| name | color | event | 
| Alice | red | hit | 
| Alice | blue | miss | 
| Bob | red | miss | 
| Bob | blue | hit | 
| Bob | green | hit | 

這是一個愚蠢的例子,但假設我真的有很多球員不同的命中/缺失的條件下,我想運行只是場景一個給定的名字?說,我只想運行Alice的測試。在單個場景大綱中進行所有命中/未命中測試仍然具有優勢(因爲畢竟它們都是密切相關的)。

一種方法是隻重複測試每一個名稱和標記他們,所以是這樣的:

@Alice 
Given Alice is playing a game 
When she shoots at a <color> target 
Then she should <event> 

Examples: 
| color | event | 
| red | hit | 
| blue | miss | 

這樣我可以運行behave --tags @Alice,但後來我重複相同的情況下爲每個用戶,這是很多重複。是否有一種很好的方法可以將所有示例壓縮到一個場景中 - 但只能有選擇地運行其中的一些場景?這裏有什麼正確的方法?

+0

如果不同的球員有不同的命中/不命中條件,那麼爲這些球員設置不同的場景可能是一個好主意。這樣你就不會混合期望/玩家行爲。不過,我同意你會有重複。 +1爲有趣的問題,我會繼續仔細考慮這一個。 – 2014-12-09 23:48:04

回答

2

版本1.2.5引入了更好的方法來區分場景輪廓。現在可以唯一地區分它們,從而在命令行中選擇從--name=的大綱生成的獨特場景。例如,假設以下功能文件:

Feature: test 

Scenario Outline: test 
Given <name> is playing a game, 
When they shoot at a <color> target 
Then they should <event> 

Examples: 
    | name | color | event | 
    | Alice | red | hit | 
    | Alice | blue | miss | 
    | Bob | red | miss | 
    | Bob | blue | hit | 
    | Bob | green | hit | 

比方說,我只想運行測試Bob,red,miss。它在第一排,第三排。因此:

behave --name="@1.3" 

將選擇此測試。在版本1.2.5和後續版本中。生成的場景名稱中包含"@<table number>.<row number>",其中<table number>是表格的編號(從1開始),<row number>是該行的編號。

這不會輕易讓您選擇與單個用戶相關的所有場景。但是,您可以用另一種方式實現它。你可以一分爲二的例子:

Examples: Alice 
    | name | color | event | 
    | Alice | red | hit | 
    | Alice | blue | miss | 

Examples: Bob 
    | name | color | event | 
    | Bob | red | miss | 
    | Bob | blue | hit | 
    | Bob | green | hit | 

表名稱將出現在生成的場景名稱,你可以問的行爲來運行一個表相關聯的所有測試:

behave --name="Alice" 

我不知道如何通過步驟訪問示例名稱,從而擺脫第一列。

完整的詳細信息在1.2.5的發行說明中。