Есть ли какой-то идентификатор запуска, одинаковый для всех функций в одном запуске?

Наши тесты хранят большое количество информации о каждом выполненном тесте, отсортированном по некоторым каталогам. Было бы целесообразно, если бы все результаты одного запуска хранились вместе, например, в каталоге, названном по дате/идентификатору. Таким образом, легко просматривать исторические записи и отслеживать, что к чему. В настоящее время это ручная работа, при которой выходной каталог необходимо переименовывать после каждого запуска, чтобы сохранить записи.

Мы могли бы легко написать сценарий вне огурца для достижения автоматизации, однако мне интересно, можно ли это сделать с помощью структуры огурца. Один простой способ (если это возможно) — создать переменную 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

person EJS    schedule 16.05.2017    source источник


Ответы (1)


Если я правильно понял ваш вопрос, вам нужен уникальный каталог для каждого запуска. Установите статический флаг в классе, который содержит состояние инициализации каталога. Это обеспечит создание каталога при запуске первого сценария, а не больше. И создайте статический метод для генерации идентификатора запуска...

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());
    }
}
person Grasshopper    schedule 16.05.2017