作为开发者 我想在功能文件中放置断点 这样我就可以调试功能/场景/步骤
你们有人用 Behave 或 Cucumber 实现过这个功能吗?
您不能在
.feature
文件中放置断点,因为它是纯文本文件。相反,您可以在实现 BDD 步骤的测试步骤中放置断点。
示例
When I click button "save"
Then saved page opened
您需要进入该步骤并看到类似的内容:
public void iClickButton(String buttonName) {
getButtonByName(buttonName).click();
}
您可以在方法
iClickButton
中放置断点并进行调试。 我不能说我曾经能够在功能文件中放置断点。 相反,我将它们放在步骤文件中,以便当该步骤运行时,您可以验证它是否完成了工作。 在功能和步骤文件之间来回切换很多,但它有效
我只是想指出,在 2018 年,功能文件的使用量远多于 Behave 或 Cucumber [即PHP 的代码接收]。 “Gherkin”应该是一个商业可读的 DSL,“断点”的概念实际上并不适用于该领域。我想说,在 Gherkin 功能文件中放置断点绝对是不可能的。如果你愿意的话,你当然可以这样做,那就去做吧,但是没有标准的方法来做到这一点,并且你可能会在大型组织或团队中混淆事情。
首先,您需要在步骤定义中添加调试,而不是在功能文件中
现在,您正在通过 Maven 命令运行它,例如:
mvn 全新安装
但是你需要使用junit或testng来运行它。
在步骤定义中放置一个调试点,并在调试部分将项目作为 junit/testng 运行
或
如果您仍然需要使用maven运行它,您可以尝试maven命令中的以下参数
-Dmaven.surefire.debug test -DforkCount=0 test
除了上面所说的之外,还有另一种解决方案。可以随时暂停运行的场景并逐步运行(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);
}
}