【问题标题】:JBehave - not possible to have multiple Outcome in a Story?JBehave - 在一个故事中不可能有多个结果?
【发布时间】:2018-10-17 18:02:27
【问题描述】:

故事中不可能同时出现成功和失败的结果吗?

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 中是否有办法做到这一点。 谢谢。

【问题讨论】:

  • 我认为你处理这个问题的方式是错误的。您是否使用 Selenium 运行测试?
  • 是的。我将 Selenium 与 JBehave 一起使用。

标签: java gherkin jbehave


【解决方案1】:

引用 OP:

例如,对于失败,我想在关闭浏览器之前截屏。如果成功我只想关闭浏览器。

现在,有趣的问题是您使用哪个框架进行断言? 我假设您使用与 JBehave 捆绑在一起的 Junit,因为 JBehave 依赖于知道 JUnit 抛出的异常存在错误。

这个想法是: a) 发生错误时抛出异常(因此需要检查每一步) b) 截图 c) 继续测试(即关闭浏览器)

所以为了抛出异常,你真的不需要做太多事情,因为这是在使用 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 - How to get test result in 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"));

希望以上内容有所帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-31
    • 1970-01-01
    • 2011-05-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多