JBehave - невозможно ли иметь несколько результатов в истории?

Разве в истории не может быть одновременно и УСПЕХ, и НЕУДАЧА?

Lifecycle:
After:
Outcome: FAILURE 
Given I capture page screenshot
Given I close browser
Outcome: SUCCESS
Given I close browser

Scenario: Sample one
Given I open browser
When I do something

Scenario: Sample two
Given I open browser
When I do another thing

Например, при сбоях я хочу сделать скриншот перед закрытием браузера. В случае успеха я просто хочу закрыть браузер.

Я знаю, что могу просто закрыть браузер в конце всех моих сценариев, и останется только результат сбоя. Я хотел бы знать, есть ли способ сделать это в Lifecycle After. Спасибо.


person tic    schedule 17.10.2018    source источник
comment
Я думаю, что вы решаете это неправильным путем. Используете ли вы Selenium для запуска тестов?   -  person Xwris Stoixeia    schedule 22.10.2018
comment
Да. Я использую Selenium с JBehave.   -  person tic    schedule 24.10.2018


Ответы (1)


Цитирую ОП:

Например, при сбоях я хочу сделать скриншот перед закрытием браузера. В случае успеха я просто хочу закрыть браузер.

Теперь интересный вопрос будет заключаться в том, какую структуру вы используете для своих утверждений? Я предполагаю, что вы используете Junit, который поставляется в комплекте с JBehave, поскольку JBehave полагается на знание того, что JUnit выдает исключение, об ошибке.

Идея состоит в том, чтобы: а) выдать исключение при возникновении ошибки (поэтому нужно проверять каждый шаг) б) сделать снимок экрана в) продолжить тестирование (т.е. закрыть браузер)

Таким образом, чтобы создать исключение, вам действительно не нужно много делать, поскольку это делается автоматически при использовании оператора JUnit Assert.

так например

Assert(username.equals("expected_user").isTrue();

Если вышеуказанное не удается, будет выдано исключение. Вы можете захватить его как таковой:

public class RunnerExtension implements AfterTestExecutionCallback {

    @Override
    public void afterTestExecution(ExtensionContext context) throws Exception {
        Boolean testResult = context.getExecutionException().isPresent();
        System.out.println(testResult); //false - SUCCESS, true - FAILED
    }
}

@ExtendWith(RunnerExtension.class)
public abstract class Tests {

}

Взято из этого ответа: JUnit5 - Как получить результат теста в AfterTestExecutionCallback

Таким образом, в основном вы переопределяете стандартное поведение после выполнения каждого утверждения. В приведенном выше случае вы можете добавить (когда выдается исключение --> сделать снимок экрана).

Вот код скриншота для Selenium-Java:

WebDriver driver = new FirefoxDriver();
driver.get("http://www.google.com/");
File scrFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
// Now you can do whatever you need to do with it, for example copy somewhere
FileUtils.copyFile(scrFile, new File("c:\\tmp\\screenshot.png"));

Надеюсь, вышеизложенное поможет!

person Xwris Stoixeia    schedule 24.10.2018