如何向.feature文件添加断点

问题描述 投票:0回答:5

作为开发者 我想在功能文件中放置断点 这样我就可以调试功能/场景/步骤

你们有人用 Behave 或 Cucumber 实现过这个功能吗?

debugging automation cucumber bdd
5个回答
3
投票

您不能在

.feature
文件中放置断点,因为它是纯文本文件。相反,您可以在实现 BDD 步骤的测试步骤中放置断点。

示例

When I click button "save"
Then saved page opened

您需要进入该步骤并看到类似的内容:

public void iClickButton(String buttonName) {
     getButtonByName(buttonName).click();
}

您可以在方法

iClickButton
中放置断点并进行调试。
这就是如何以 BDD 风格调试执行。


2
投票

我不能说我曾经能够在功能文件中放置断点。 相反,我将它们放在步骤文件中,以便当该步骤运行时,您可以验证它是否完成了工作。 在功能和步骤文件之间来回切换很多,但它有效


0
投票

我只是想指出,在 2018 年,功能文件的使用量远多于 Behave 或 Cucumber [即PHP 的代码接收]。 “Gherkin”应该是一个商业可读的 DSL,“断点”的概念实际上并不适用于该领域。我想说,在 Gherkin 功能文件中放置断点绝对是不可能的。如果你愿意的话,你当然可以这样做,那就去做吧,但是没有标准的方法来做到这一点,并且你可能会在大型组织或团队中混淆事情。


0
投票

首先,您需要在步骤定义中添加调试,而不是在功能文件中

现在,您正在通过 Maven 命令运行它,例如:

mvn 全新安装

但是你需要使用junit或testng来运行它。

在步骤定义中放置一个调试点,并在调试部分将项目作为 junit/testng 运行

如果您仍然需要使用maven运行它,您可以尝试maven命令中的以下参数

-Dmaven.surefire.debug test -DforkCount=0 test

0
投票

除了上面所说的之外,还有另一种解决方案。可以随时暂停运行的场景并逐步运行(cucumber 步骤,而不是 java 步骤)。我的E2E测试解决方案是cucumber hook @AfterStep、本地Spark服务器、Chrome扩展和Idea插件。 Hook 用于创建一个循环,等待状态更改,spark 用于接收来自按钮的命令,扩展用于在页面上注入三个按钮(暂停、一步、恢复),而 Idea 插件用于相同的三个按钮。这个想法是向 Spark 发送一个命令,它将命令传输到一个类,该类处理状态更改并等待下一个命令。

由于公司规则,我无法共享代码,但您可以在 habr.ru 上的公司博客文章中找到一些详细信息和代码片段(使用谷歌翻译)。这是链接https://habr.com/ru/companies/mvideo/articles/867178/

下面是处理程序类的关键片段

public static volatile String breakpointState = STATE_RESUME;

public static void handleBreakpointActions(boolean shouldBeStopped) {
     if (shouldBeStopped && isBreakpointFeatureOn()) {
         breakpointState = STATE_PAUSE;
     }
     if (breakpointState.equals(STATE_PAUSE) || breakpointState.equals(STATE_ONE_STEP)) {
         breakpointState = STATE_PAUSE;
         makePause();
     }
     else{
         waitForMs(waitBetweenSteps);
     }
}
© www.soinside.com 2019 - 2024. All rights reserved.