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

cucumber的前后钩在哪里

蔡修远
2023-03-14

我有一个相当简单的Cucumber测试框架,包括一个功能文件、一个步骤定义文件和一个测试运行器类,如下所示:

@RunWith(Cucumber.class)
@CucumberOptions(features = "src/test/java/com/tests/cucumber/features/ui/ExampleTest.feature", 
                 glue = { "com.tests.cucumber.stepdefinitions" },
                 )
public class ExampleTestRunner {

}

这在功能文件中运行了一个场景。现在我想添加一个前后钩子来进行一些设置和拆卸,但对于我这样的人来说,我无法让钩子运行。我曾尝试将钩子添加到ExampleTestRunner和StepDefinition类中,但它们从未运行过。我应该把这些钩子放在哪里?目前,钩子看起来就像这样,但一旦我解决了这个问题,我会给它们添加内容!

package com.tests.cucumber.stepdefinitions;

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

public class StepDefinitions {

    @Before
    public void before() {
        System.out.println("starting before()");
    }
}

谢谢你的帮助。

共有2个答案

颜嘉誉
2023-03-14

我这样使用;

跑步者类:

@RunWith(Cucumber.class)
@CucumberOptions(

    features = {"src\\test\\features\\ui_features"},
    glue = {"com\\base\\tm\\auto_reg\\tests\\ui_tests\\price_features"},
    plugin = {"com.cucumber.listener.ExtentCucumberFormatter:"}
)

public class PriceFeatureRunner {
@BeforeClass
public static void setup() {
    RunnerUtil.setup(PriceFeatureRunner.class);
}

@AfterClass
public static void teardown() {
    RunnerUtil.teardown();
}

}

RunnerUtil。爪哇:

public class RunnerUtil {
public static void setup(Class<?> clazz) {
    String reportPath = "target/cucumber-reports/" + clazz.getSimpleName().split("_")[0] + "_report.html";

    ExtentProperties extentProperties = ExtentProperties.INSTANCE;
    extentProperties.setReportPath(reportPath);

}


public static void teardown() {
    UiHooks uiHooks = new UiHooks();
    uiHooks.afterScenario();
    ExtentReportConfiguration.configureExtentReportTeardown();
}
}

UiHooks.java

public class UiHooks implements HookHelper {


public static final String BASE_URL = "https://www.stackoverfow.com/";

private Scenario scenario;

@Override
@Before
public void beforeScenario(Scenario scenario) {
    this.scenario = scenario;

    Reporter.assignAuthor(System.getProperty("user.name"));
}

@Override
@After
public void afterScenario() {

   if (HookUtil.driver != null) {
        HookUtil.driver.quit();
    }
    if (HookUtil.seleniumBase != null) {
        HookUtil.seleniumBase.stopService();
    }

}

@Override
@After
public void afterTest() {
   if (HookUtil.driver != null) {
        HookUtil.driver.quit();
    }
    if (HookUtil.seleniumBase != null) {
        HookUtil.seleniumBase.stopService();
    }
}

}

好帮手。JAVA

public interface HookHelper {

@Before
void beforeScenario(Scenario scenario);

@After
void afterScenario();

void afterTest();
}
翟鹏
2023-03-14

我有点犹豫是否要回答这个问题,尽管我成功地做到了这一点。据我所知,问题是我在被其他类扩展的类中添加了Before和After方法。在这种情况下,测试不会运行。我不得不将Before和After方法添加到一个未扩展的类中。

感觉这类似于这样的情况,如果你在一个类中指定了一个由另一个类扩展的步骤定义,那么步骤定义就被认为有一个重复的定义。我这里有正确的诊断吗?

 类似资料:
  • 我想在几种情况下保持浏览器打开,但在钩子方法<code>rb_language之后。rb/end_scenario其中,是object的一部分。 因此,即使我不调用<code>浏览器。在hook之后关闭,对象是,当浏览器窗口仍然打开时,我不能再使用它了。 有没有办法将打开的浏览器窗口用于多种方案?

  • 我尝试在cucumber中执行特性后执行一个脚本来清理数据库。我使用前后挂钩的方式如下: 对于before,我可以避免使用静态变量在每个场景之前调用脚本。但不知道如何为后钩子做: 有没有办法捕获最后一个方案是否已经执行,并且仅在满足该条件时才触发 clearData()?有没有更优雅的方法?

  • 我在我的Maven项目中使用cucumber和JUnit。当我试图用@之后或@之前注释创建cucumber钩并导入cucumber.api.java.之前;包时,它不起作用。它说这是不建议使用的。有人能告诉我在每个场景之前运行步骤时可以使用什么注释,或者我是否应该导入cucumber钩的任何其他包吗?我也尝试导入io.cucumber.junit.cucumber选项。它不起作用。 我在用io。c

  • 如何在hook前读cucumber中例子的标签名? @feature_tag功能:功能描述 @outline_tag场景大纲:给定场景细节的大纲描述 我想在输出中打印“@example_tag”。 使用java代码作为 但是得到错误作为 "在钩子之前失败:step definitions . before scenario(scenario outline)消息:cucumber . runtim

  • 现在我正试图从当前场景中获取信息(描述、文件路径、名称等)。我试着像这样在before hook中获取场景信息 然而,像scenario.description这样的东西不能使用。这是因为当在之前和之后钩子中运行时,场景被称为,而不是核心AST模块的一部分,如功能。我希望能够从和访问场景,其中像当前场景描述这样的值是可用的。是否可以访问中的前后钩子,而不是,或者另一种方式来获取信息,如场景名称,描

  • 我使用的是commercehub oss/gradle cucumber jvm插件。希望实现自动设置和拆卸的挂钩。就像在junit RunCuketTests中,@BeforeClass和@AfterClass 如何在此插件的自动化中实现这些? https://github.com/commercehub-oss/gradle-cucumber-jvm-plugin