1

在这一点上,标题可能有点令人困惑;希望我能把它清理干净。

是)我有的

我正在使用 Selenium WebDriver 运行 Cucumber JVM 来自动化我们的系统测试用例。这些测试用例当前使用 XRay 测试管理插件存储在 JIRA 中。XRay 还提供 API 来获取特征文件并将结果上传回 JIRA。

我创建了一个自定义 JIRA 实用程序类来将测试作为功能文件下载,并将测试结果从 JIRA 上传到 JIRA - 并证明它确实有效。它们分别在 Cucumber Runner 类的 @BeforeClass 和 @AfterClass 中运行。

我还证明了开发的测试框架确实可以通过手动运行在我的计算机上创建的功能文件来工作。

我想要的是

我希望能够(最终)使用我们的 CI 工具自动运行自动化测试框架。除此之外,它还会从 JIRA 中提取已定义的自动化测试并将测试结果推送回 JIRA。

我不希望功能文件与代码一起存储。在我看来,这违背了它是动态的目的,因为我们执行的测试会随着时间的推移而变化(执行的数量和步骤本身)。

发生了什么(或更具体地说,没有发生)

当我尝试在框架中没有任何功能文件的情况下执行 Cucumber Runner 类时,Cucumber 说“在 [src/test/resources/features/] 上找不到任何功能”。这是可以理解的,因为(还)没有功能文件。

但是,它不运行@BeforeClass;因此它不会下载要运行的功能文件。我已经在跑步者类中尝试过使用标签和不使用标签。

代码

@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 代码以便下载功能文件?

有没有可能实现我想要的?还是我必须承认失败,只是将所有功能文件与代码一起存储?

4

1 回答 1

0

这是使用 JUnit 时的预期行为。测试套件不会调用@BeforeClass@AfterClass或者@ClassRule当套件中没有测试或所有测试都被忽略时[1]。这避免了执行可能代价高昂的设置。

这确实意味着您不能使用类规则来引导您的测试。您也不应该尝试这样做。在构建过程中,最好在编译之前获取所有源和资源。

如果您使用的是 maven,则可以编写一个 maven 并将其附加到generate-test-sources阶段[2]。创建一个 maven 插件比 JUnit 规则要复杂一些,但并非如此。查看开发 Java 插件指南

我认为 Gradle 也有类似的选项。

于 2017-11-11T23:04:36.087 回答