Java 在IDE中运行.feature文件不会读取cucumber runner类
问题的核心是,在我的IDE(IntelliJ)中,我可以右键单击单个.feature文件,它运行良好,但不从Runner类读取任何参数。在命令行中,它可以正常工作。Java 在IDE中运行.feature文件不会读取cucumber runner类,java,maven,intellij-idea,cucumber-jvm,Java,Maven,Intellij Idea,Cucumber Jvm,问题的核心是,在我的IDE(IntelliJ)中,我可以右键单击单个.feature文件,它运行良好,但不从Runner类读取任何参数。在命令行中,它可以正常工作。 mvn干净编译测试-Dcucumber.options=“--tags@calculator” 我使用一个框架来处理多个web应用程序。因此,每个应用程序都位于单独的子文件夹中 +---test +---java +---com +---company
mvn干净编译测试-Dcucumber.options=“--tags@calculator”
我使用一个框架来处理多个web应用程序。因此,每个应用程序都位于单独的子文件夹中
+---test
+---java
+---com
+---company
+---app
¦ +---app1
¦ ¦ +---common
¦ ¦ +---page
¦ ¦ +---step
¦ +---app2
¦ +---common
¦ +---page
¦ +---step
+---core
该框架将使用PageObject模型,因此页面
将包含每个页面的详细信息,通用
将用于整个应用程序的通用功能,步骤
用于给定的、何时、然后是步骤
在resources文件夹中,我有一个类似的布局
+---resources
+---com
+---company
+---app
+---app1
¦ +---feature files go here
+---app2
+---feature files go here
runner类位于主app
文件夹中
package com.company.app;
import com.company.core.Browser;
import com.company.core._Start;
import cucumber.api.CucumberOptions;
import cucumber.api.SnippetType;
import cucumber.api.junit.Cucumber;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.runner.RunWith;
import java.io.File;
import java.net.InetAddress;
import java.net.UnknownHostException;
@RunWith(Cucumber.class)
@CucumberOptions(
plugin = {"pretty",
"html:target/cucumber",
"json:report/report.json",
"com.cucumber.listener.ExtentCucumberFormatter:"
},
tags = {"~@ignore"},
snippets = SnippetType.CAMELCASE
)
public class _RunnerTest extends _Start {
private static String reportFile = "report.html";
private static String configFile = "extent-config.xml";
@BeforeClass
public static void setup() {
// Stuff
}
@AfterClass
public static void teardown() {
// Stuff
}
}
因此,通过Maven命令行运行,一切都按预期运行。如果我右键单击.feature文件(或其场景),测试将运行,但不使用runner类,因此没有报告,@BeforeClass和@AfterClass将被忽略
有什么我遗漏的吗 当您直接运行要素文件时,它不会使用运行程序运行。如果希望测试使用在运行程序中定义的@BeforeClass和@AfterClass,则必须运行运行程序 还请注意,尽管Cucumber支持JUnits
@ClassRule
、@BeforeClass
和@AfterClass
注释,但不建议使用这些注释,因为它们限制了不同运行程序之间的可移植性;
使用命令行或IDE时,它们可能无法正确执行
相反,建议在
和
之后的钩子。对于直接从IDE运行.feature文件,您应该在相同的路径中提供步骤定义。如果它们不在同一路径中,并且由包分隔,则必须使用Runner文件,在该文件中可以提供粘合代码和功能文件的路径。在我的末尾尝试过。遇到同样的问题。但是我想知道,@BeforeClass
和@AfterClass
是在runner类还是StepDefinition类中?另外,请注意,由于我们直接运行功能文件,因此与runner类没有交互,因此代码不会执行。@AshishDeshmukh,如图所示,@BeforeClass
和@AfterClass
是runner的一部分。目前他们所包含的只是报告电话。理想情况下,我想把浏览器启动和关闭在那里了。但由于在IDE中运行时不会调用runner,这将是毫无意义的。我认为要实现您所说的(启动和关闭浏览器),我们可以为相同的功能创建单独的功能,并使用嵌套步骤来实现使用runner类的相同效果。