JBehave-一个故事中不可能有多个结果吗?

时间:2018-10-17 18:02:28

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

1 个答案:

答案 0 :(得分:0)

引用OP:

  

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

现在,有趣的问题将是您使用哪个框架进行断言? 我假设您使用的是与JBehave捆绑在一起的Junit,因为JBehave依赖于JUnit引发的异常会导致错误。

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

因此,要抛出异常,您实际上不需要做很多事情,因为使用JUnit的Assert语句时,这是自动完成的。

例如

import Vue, {CreateElement, RenderContext} from "vue";

export default Vue.extend({
  name: "SomeComponent",
  functional: true,
  render(h: CreateElement, {children, data}: RenderContext) {
    const doStuff = () => console.log("Hello there!");

    return (
      <router-link
        {...data}
        nativeOnClick={doStuff}
      >
        {children}
      </router-link>
    );
  }
});

如果以上操作失败,则将引发异常。 您可以这样捕获它:

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

从此答案中得出: JUnit5 - How to get test result in AfterTestExecutionCallback

因此,基本上,在执行每个断言之后,您将覆盖标准行为。在上述情况下,您可以添加(抛出异常时->截屏)。

以下是Selenium-Java的屏幕截图代码:

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 {

}

希望以上帮助!