【问题标题】:Continue Execution after step fails in JBehave scenario在 JBehave 场景中步骤失败后继续执行
【发布时间】:2014-10-23 02:39:47
【问题描述】:

我正在使用 Selenium Webdriver 和 JBehave。我的 Jbehave Story 包含一些场景,其中包含一些重复步骤,如下面的步骤所示,我创建了一个通用函数来执行它们。

Scenario: 25. Validate Column from Database 
Given I open application URL 
And I login with username "username1" and password "password1"
Then I validate the "column1" from database
Then I validate the "column2" from database
Then I validate the "column3" from database
Then I Logout of the Portal

这是我从数据库中验证列的常用功能

@Then("I validate the \"$column\" from database")
public void validateColumnFromDB(String column)
{
    if(column.equals("column1"))
       getColumnFromDB(propertiesConfiguration.getString("column1"));
    else if(column.equals("column2"))
       getColumnFromDB(propertiesConfiguration.getString("column2"));
    else if (column.equals("column3"))
       getColumnFromDB(propertiesConfiguration.getString("column3"));
}

我使用了 Junit ErrorCollector(),但在执行后,JBehave 说“所有测试都通过了”,即使有一些失败并且 ErrorCollector() 收集了它们。至少 JBehave 应该说某些步骤失败了。

我的问题是我想在 JBehave 中继续执行,即使在任何一列的验证失败后(场景中提到的步骤之一)。

感谢您的帮助

【问题讨论】:

  • 您不需要在validateColumnFromDB 中使用断言来检查是否成功检索了值,或者这是在getColumnFromDB(..) 中完成的
  • 是的,断言在getColumnFromDB()完成
  • 显示您的嵌入器配置。你使用 jbehave-junit-runner 吗?

标签: java selenium-webdriver jbehave


【解决方案1】:

我会在一个步骤中检查所有列,以这种方式:

Scenario: 25. Validate Column from Database 

Given I open application URL 
Then I validate the following columns: "column1,column2,column3" from database

@Then("I validate the following columns: \"$columns\" from database")
public void then_i_walidate_columns_from_databale( List<String> columns){
    String columnsWithError = "";
    boolean validationResult = true;
    for( String column : columns){
        boolean validationResultOfCurrentColumn = ( null != getColumnFromDB(column));
        validationResult &= validationResultOfCurrentColumn;
        if( ! validationResultOfCurrentColumn ){
            columnsWithError += column + " ";
        }
    }
    Assert.assertTrue("The following columns don't pass the validation: " + columnsWithError, validationResult);
}

【讨论】:

  • 好吧,我只举了一个例子。但我的基本问题是,即使其中一个步骤失败,我也想继续执行。可能存在步骤可能相互独立但流程不会改变的情况。
【解决方案2】:

发生错误时,您是否在 JBehave 步骤中抛出异常? JBehave 依赖于知道您抛出的异常存在错误。我想知道 ErrorCollector 是否正在消耗您抛出的异常,因此您的错误没有到达 JBehave,因此 JBehave 认为没有错误。

【讨论】:

  • 是的,你是对的,我正在使用错误收集器。但是,每当遇到任何错误时,我都想在 output.html 上打印该错误。反正有这样做吗?
  • JBehave 旨在在导致失败的步骤停止执行场景。似乎您希望 JBehave 执行所有步骤,如果多个步骤失败,则报告每个步骤的失败。如果是这样,那么这不是 JBehave 的预期使用方式。让它在可能导致失败的第一步失败。
【解决方案3】:

默认情况下,故事运行器被配置为fail-fast,即执行将在第一个失败的故事中停止(但将首先完成故事中所有场景的执行)。为了生成完整的故事视图(报告有多少故事失败),需要启用运行器以运行将 ignoreFailureInStories 标志设置为 true 的故事。

来源:http://jbehave.org/reference/stable/running-stories.html

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-27
    • 1970-01-01
    • 2020-08-16
    相关资源
    最近更新 更多