Cucumber 失败后继续运行步骤

Cucumber 失败后继续运行步骤,cucumber,gherkin,cucumber-jvm,cucumber-junit,Cucumber,Gherkin,Cucumber Jvm,Cucumber Junit,是否有任何方法可以在其中一个步骤失败时继续执行这些步骤。在我目前的设置中,当一个步骤失败时,cucumber会跳过剩下的步骤……我想知道是否有什么方法可以改变cucumber runner的设置 我可以注释掉失败的步骤,但当你不知道哪一步会失败时,这是不实际的…如果我可以继续剩下的步骤,我会一次性知道一整套失败的测试…而不是一个周期一个周期地进行 环境:cumber-JVM、R、Java、Ibatis、Spring-Framework、Maven在步骤失败后继续执行步骤不是一个好主意,因为步骤失

是否有任何方法可以在其中一个步骤失败时继续执行这些步骤。在我目前的设置中,当一个步骤失败时,cucumber会跳过剩下的步骤……我想知道是否有什么方法可以改变cucumber runner的设置

我可以注释掉失败的步骤,但当你不知道哪一步会失败时,这是不实际的…如果我可以继续剩下的步骤,我会一次性知道一整套失败的测试…而不是一个周期一个周期地进行


环境:cumber-JVM、R、Java、Ibatis、Spring-Framework、Maven

在步骤失败后继续执行步骤不是一个好主意,因为步骤失败可能会导致一个不变的冲突。更好的策略是增加场景的粒度。不要用几个“Then”语句编写一个场景,而是使用一系列示例分别测试每个后置条件。有时,场景大纲和示例列表可以合并类似的故事


有一些讨论是关于添加一个特性来标记某些步骤,以便在失败后继续

一种方法是捕获所有断言错误,并在最后一步决定是失败还是通过测试用例。在这种情况下,您可以定制它,比如说,在任何步骤检查是否有超过n个错误,如果有,则测试失败

以下是我所做的:

  • 为测试用例的@Before中的错误初始化StringBuffer
  • 捕获断言错误并添加到StringBuffer中,这样它们就不会被抛出并终止测试用例
  • 检查StringBuffer以确定测试用例是否失败

    StringBuffer verificationErrors;
    
    // Initialize your error SringBuffer here
    
    @Before
    public void initialize() {
        verificationErrors = new StringBuffer();
    }
    // The following is one of the steps in the test case where I need to assert     something
    
    @When("^the value is (\\d+)$")
    public void the_result_should_be(int arg1) {
        try  {
            assertEquals(arg1, 0);
        }
        catch(AssertionError ae) {
            verificationErrors.append("Value is incorrect- "+ae.getMessage());  
        }
    
  • 在测试用例的最后一步或之后检查@StringBuffer中的StringBuffer,以确定是否可以通过它,如下所示:

    if (!(verificationErrors.size()==0)) {
       fail(verificationErrors.toString());
    }
    

    唯一的问题是,在报告中,所有步骤看起来都是绿色的,但测试用例看起来失败了。然后,您可能需要查看错误字符串以了解哪些步骤失败。每当出现断言错误时,您可以向字符串中添加额外信息,以帮助您轻松定位步骤。

    用于累积所有断言失败。然后将步骤定义类标记为@ScenarioScoped,并在步骤定义类中添加一个标记为@mySoftAssert.assertAll()的方法

    i、 e


    “唯一的问题是,在报告中,所有步骤看起来都是绿色的,但测试用例看起来是失败的。”这正是你不想这样做的原因。我知道这是多年前的事了,但如果可以,你能更新断开的链接吗?“因为步骤失败会让世界保持不变的冲突”。这一假设是正确的,但并非总是如此。在很多情况下,我需要检查一个值,仅仅因为该值不正确,并不意味着场景的其余部分无法运行。
    import io.cucumber.guice.ScenarioScoped;
    import io.cucumber.java.After;
    import io.cucumber.java.Before;
    import io.cucumber.java.en.Then;
    
    @ScenarioScoped
    public class MyStepDefinitions {
    
    SoftAssert mySoftAssert=new SoftAssert();
    
        @Then("check something")
        public void checkSomething() {
           mySoftAssert.assertTrue(actualValue>expectedMinValue);
        }
    
        @After
        public void afterScenario(Scenario scenario) throws Exception {
            mySoftAssert.assertAll();
        }
    }