2017-05-16 26 views
0

我們的測試存儲了大量有關每個已執行的測試的信息,這些信息都在一些目錄中排序。如果將來自同一次運行的所有結果一起存儲在例如由date/id命名的目錄中,這將是實際的。這樣就很容易查看歷史記錄並跟蹤什麼是什麼。目前,這是一項手動作業,每次運行後都必須重命名輸出目錄以保存記錄。是否有某種運行ID對於單個「運行」中的所有功能都是相同的?

我們可以很容易地在黃瓜以外的地方編寫腳本來實現自動化,但是我想知道這是否可以通過黃瓜框架完成。一種簡單的方法(如果可能的話)是創建一個runId變量並在同一次運行的所有測試之間傳遞它。然而,據我所知,無法在場景和功能之間傳輸對象/變量。依賴注入似乎只允許步驟之間的相同對象。在黃瓜框架中可能還有其他地方,我們可以啓動一個runId變量並將其傳遞給所有測試?或者也許在黃瓜裏有這樣的東西,我可以從框架的某個地方得到這種東西?

例如,如果我有步驟的定義:

public class StepSy { 
    File runDirectory; 
    DataObject data; 

    @Before 
    public void before() { 
     runDirectory = new File(someObjectPassedDown.getRunId()); 
    } 

    @Given("^Condition (.*)$") 
    public void condition() { 
     /*Some conditions*/ 
    } 

    @When("^I do (.*)$") 
    public void perform(String toDo) { 
     /*Some action*/ 
    } 

    @Then("^I expect (.*)$") 
    public void expect(String expectedValue) { 
     /*Some assertion*/ 
    } 

    @After 
    public void after(Scenario scenario) { 
     data.writeTo(runDirectory, scenario.getName()); 
    } 
} 

還有一個特點:

Feature: Tests 

    Scenario: Test01 
    Given Condition A 
    When I do B 
    Then I expect C 

    Scenario: Test02 
    Given Condition D 
    When I do E 
    Then I expect F 

我可以運行此功能兩次,我會得到兩個目錄:

MyTestRuns 
├── Run_17.05.2017_130156 
│ ├── Test01 
│ └── Test02 
├── Run_16.05.2017_163402 
│ ├── Test01 
│ └── Test02 

回答

1

如果我正確地得到了您的問題,您需要爲每次運行一個唯一的目錄。 在包含目錄初始化狀態的類中設置一個靜態標誌。它會確保在第一個場景運行時創建目錄,而不再是。並創建一個生成運行ID的靜態方法...

public class StepSy { 
    static File runDirectory; 
    private static boolean fileInitFlag = false; 
    DataObject data; 


    @Before 
    public void before() { 
     if(!fileInitFlag) { 
      runDirectory = new File(FileIdGenerator.getRunId()); 
      fileInitFlag= true; 
     } 
    } 



    @After 
    public void after(Scenario scenario) { 
     data.writeTo(runDirectory, scenario.getName()); 
    } 
} 
相關問題