当前位置: 首页 > 知识库问答 >
问题:

如何为Cucumber-JVM中的所有步骤设置一次后注释方法

谭锐藻
2023-03-14

我使用Cucumber JVM,并尝试在每一步之后拍摄屏幕截图(如果出现故障)。问题是,我不知道如何设置在每个步骤之前和之后执行的方法。

我用过https://github.com/cucumber/cucumber-java-skeleton作为参考。我加入了runnerhttps://github.com/cucumber/cucumber-java-skeleton/blob/master/src/test/java/skeleton/RunCukesTest.javaBeforeClass和AfterClass(JUnit adnotations)以及为我提供webrdiver启动和停止(在每个场景之前和之后)的方法。我知道我可以使用Before/After注释(cucumber注释),但是带有这些注释的方法必须放在包含步骤定义的同一个类中。问题是我有很多带有步骤的类,所以我不想把这些带注释的方法放在每个步骤类中,我需要定义它们一次。

请告诉我怎么做。

[编辑]

这是我的跑者

package example;



import cucumber.api.CucumberOptions;
import cucumber.api.junit.Cucumber;

import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.runner.RunWith;



@RunWith(Cucumber.class)
    @CucumberOptions(
        features = "src/test/resources/"
    )
public class TodoTest {


    @BeforeClass
    public static void beforeClass() {

        System.setProperty("browser", "chrome");


        System.setProperty("remote", "http://localhost:4444/wd/hub");

    }

    @AfterClass
    public static void afterClass() {

    }

}

我需要定义将在整个项目的每个步骤之前和之后执行的方法,类似于场景中的方法。

共有1个答案

岳嘉容
2023-03-14

带注释的Before/After方法不必驻留在同一个类中。编辑:创建如下示例项目:将StepDef类保存在名为cukes的包中,比如src/test/java/cuckes

import cucumber.api.java.en.Given;

public class StepDef
{
    @Given("^order$")
    public void order()
    {
        System.out.println("Test hook");
    }
}

将您的Hook类保持在与上述相同的包中

import cucumber.api.Scenario;
import cucumber.api.java.After;
import cucumber.api.java.Before;

public class Hook {

    @Before
    public void before(Scenario scenario)
    {
        System.out.println("running scenario: "+scenario.getName());
    }

    @After
    public void after(Scenario scenario)
    {
        scenario.write("Test string to output in reports.");
        System.out.println("Finished running scenario: "+scenario.getName());
    }
}

让你的跑步者(在本例中是JUnitRunner)保持在同一包中。

import org.junit.runner.RunWith;

import cucumber.api.CucumberOptions;
import cucumber.api.junit.Cucumber;

@CucumberOptions(features={"src/test/resources/test.feature"},glue={"cukes"},plugin={"pretty","html:target/report"})
@RunWith(Cucumber.class)
public class JUnitRunner
{

}

在src/test/Resources文件夹下创建一个cukes命名文件夹并保留test.feature文件

Feature: Test feature
Scenario: To test scenario
Given order

现在运行您的JUnitRunner,您应该在控制台上看到以下输出:

Feature: Test feature
passed
Test hook
To test scenario

看看这个github回购协议。它在cucumber方面有很好的例子:cucumber。普拉迪普先生做得很好。这应该能回答你所有的问题

 类似资料:
  • TL:DR控制台不显示缺少步骤的步骤正则表达式 编辑:添加功能文件

  • 我很残酷地注意到,在cucumber-JVM中,当您定义步骤名称看似相同的特性时,它们被认为是可以互换的。 我用cucumber运行这个功能(使用 mvn/intelliJ 插件/日食插件/神奇水晶球/其他荒谬的媒介) 我收到以下消息: 还有其他一些无关紧要的台词,我会饶恕你的。 cucumber似乎没有区别,和(和和我真的不知道它们最初是为了什么,因为这些只是“和我刚刚做的一样”的语法糖) 但是

  • 问题内容: 为了在步骤之间传递变量,我有步骤方法属于同一类,并使用该类的字段作为传递的信息。 下面是一个示例,如下所示: 带有步骤定义的Java类: 我的问题是在步骤之间共享信息是否是一个好习惯?或者将功能定义为: 问题答案: 为了在步骤之间共享共同点,您需要使用World。在Java中,它没有在Ruby中那么清晰。 引用黄瓜的创建者。 “世界”的目的是双重的: 隔离方案之间的状态。 在场景中的步

  • 我正在寻找一种方法来设置测试步骤的状态,然后使用范围报告在HTML报告中显示场景。我现在用的是cucumberJava TestNG assert的问题是他抛出了Assertion Exceptions,而我没有找到抑制异常的方法,所以我想使用extent来设置状态,如: 这里的问题是,您需要创建功能/场景/测试,我没有找到任何留档。

  • 我对Cucumber JVM无法获取步骤定义有问题。我在Runner文件中确实有@CucumberOptions。我的功能文件也有@SmokeTest标签。这个问题仍然存在。请帮助!我已经尝试解决这个问题几天了。 Maven 和 Java 版本: Apache Maven 3.0.4Java版本:1.6.0_65,供应商:Apple Inc. 项目结构: 演示-- 运行器文件: 包com.smok

  • 我将硒与cucumber一起使用(使用JAVA,但不太相关) 假设我有以下场景: 功能:示例功能 场景:在网站上执行操作A给定网站已打开,用户输入正确的登录名并传入字段,用户按“登录”,然后执行操作A 场景:在网站上执行操作A给定网站已打开,用户输入正确的登录名并传入字段,然后用户按“登录”,然后执行操作B 现在,将有数百个场景,网站总是需要登录到网站,所以我假设对于每个测试场景,我必须重复登录步