运行 没有功能文件的 Cucumber JVM @BeforeClass
Run Cucumber JVM @BeforeClass Without Feature Files
此时标题可能有点混乱;希望我能把它清理干净。
我有什么
我正在 运行将 Cucumber JVM 与 Selenium WebDriver 结合起来以自动化我们的系统测试用例。这些测试用例目前使用 XRay 测试管理插件存储在 JIRA 中。 XRay 还提供 API 来获取特征文件以及将结果上传回 JIRA。
我创建了一个自定义 JIRA 实用程序 class 以将测试下载为功能文件并将测试结果从 JIRA 上传到 JIRA - 并证明它确实有效。这些分别是 Cucumber Runner class 中的 @BeforeClass 和 @AfterClass 中的 运行。
我还证明了开发的测试框架确实可以通过在我的计算机上手动创建 运行 个功能文件来工作。
我想要的
我希望能够(最终)使用我们的 CI 工具自动 运行 自动化测试框架。与此同时,它将从 JIRA 中提取定义的自动化测试并将测试结果推送回 JIRA。
我不想将功能文件与代码一起存储。在我看来,这违背了动态的目的,因为我们执行的测试会随着时间而改变(执行的数量和步骤本身)。
发生了什么(或者更具体地说,没有发生)
当我尝试在框架中没有任何功能文件的情况下执行 Cucumber Runner class 时,Cucumber 说 "No features found at [src/test/resources/features/]"。这是可以理解的,因为还没有功能文件。
但是,它没有运行@BeforeClass;因此它不会将特征文件下载为 运行。我在 运行ner class.
中尝试过使用和不使用标签
代码
@RunWith(Cucumber.class)
@CucumberOptions(
tags={"@smoketests"},
features= {"src/test/resources/features/"},
plugin={"json:target/reports/cucumber.json"},
monochrome=true)
public class RunCucumberTest {
@BeforeClass
public static void executeBeforeTests() {
JiraUtil.getFeatureFiles();
//String browser = "firefox";
String browser = "chrome";
//String browser = "safari";
//String browser = "edge";
//String browser = "ie";
DriverUtil.getInstance().setDriver(browser);
}
@AfterClass
public static void executeAfterTests() {
DriverUtil.getInstance().resetDriver();
JiraUtil.uploadTestResults();
}
}
回到我的问题
如何执行 JIRA Util 代码以便下载功能文件?
是否可以达到我想要的效果?还是我必须承认失败,然后将所有功能文件与代码一起存储?
这是使用 JUnit 时的预期行为。当套件中没有测试或所有测试都被忽略时,测试套件将不会调用 @BeforeClass
、@AfterClass
或 @ClassRule
[1]。这避免了徒劳地执行可能昂贵的设置。
这意味着您不能将 class 规则用于 bootstrap 您的测试。您也不应尝试这样做。在构建过程中,最好在编译之前获取所有源和资源。
如果您使用的是 maven,可以改为编写一个 maven 并将其附加到 generate-test-sources
阶段 [2]. Creating a maven plugin is a bit more involved then a JUnit Rule but not prohibitively so. Check the Guide to Developing Java Plugins。
我假设 Gradle 也有类似的选项。
此时标题可能有点混乱;希望我能把它清理干净。
我有什么
我正在 运行将 Cucumber JVM 与 Selenium WebDriver 结合起来以自动化我们的系统测试用例。这些测试用例目前使用 XRay 测试管理插件存储在 JIRA 中。 XRay 还提供 API 来获取特征文件以及将结果上传回 JIRA。
我创建了一个自定义 JIRA 实用程序 class 以将测试下载为功能文件并将测试结果从 JIRA 上传到 JIRA - 并证明它确实有效。这些分别是 Cucumber Runner class 中的 @BeforeClass 和 @AfterClass 中的 运行。
我还证明了开发的测试框架确实可以通过在我的计算机上手动创建 运行 个功能文件来工作。
我想要的
我希望能够(最终)使用我们的 CI 工具自动 运行 自动化测试框架。与此同时,它将从 JIRA 中提取定义的自动化测试并将测试结果推送回 JIRA。
我不想将功能文件与代码一起存储。在我看来,这违背了动态的目的,因为我们执行的测试会随着时间而改变(执行的数量和步骤本身)。
发生了什么(或者更具体地说,没有发生)
当我尝试在框架中没有任何功能文件的情况下执行 Cucumber Runner class 时,Cucumber 说 "No features found at [src/test/resources/features/]"。这是可以理解的,因为还没有功能文件。
但是,它没有运行@BeforeClass;因此它不会将特征文件下载为 运行。我在 运行ner class.
中尝试过使用和不使用标签代码
@RunWith(Cucumber.class)
@CucumberOptions(
tags={"@smoketests"},
features= {"src/test/resources/features/"},
plugin={"json:target/reports/cucumber.json"},
monochrome=true)
public class RunCucumberTest {
@BeforeClass
public static void executeBeforeTests() {
JiraUtil.getFeatureFiles();
//String browser = "firefox";
String browser = "chrome";
//String browser = "safari";
//String browser = "edge";
//String browser = "ie";
DriverUtil.getInstance().setDriver(browser);
}
@AfterClass
public static void executeAfterTests() {
DriverUtil.getInstance().resetDriver();
JiraUtil.uploadTestResults();
}
}
回到我的问题
如何执行 JIRA Util 代码以便下载功能文件?
是否可以达到我想要的效果?还是我必须承认失败,然后将所有功能文件与代码一起存储?
这是使用 JUnit 时的预期行为。当套件中没有测试或所有测试都被忽略时,测试套件将不会调用 @BeforeClass
、@AfterClass
或 @ClassRule
[1]。这避免了徒劳地执行可能昂贵的设置。
这意味着您不能将 class 规则用于 bootstrap 您的测试。您也不应尝试这样做。在构建过程中,最好在编译之前获取所有源和资源。
如果您使用的是 maven,可以改为编写一个 maven 并将其附加到 generate-test-sources
阶段 [2]. Creating a maven plugin is a bit more involved then a JUnit Rule but not prohibitively so. Check the Guide to Developing Java Plugins。
我假设 Gradle 也有类似的选项。