当前位置: 首页 > 知识库问答 >
问题:

使用Gradle 5和Cucumber-JVM从不同的目录运行Cucumber

夹谷山
2023-03-14

我是Gradle的新手,正在使用5.0版本。我对cucumber相当精通。

我有一个简单的项目,它构建一个jar文件并在上面运行JUnit测试。这一切都很好。现在我想将Cucumber添加到项目中,但我希望我的.feature文件和相关的stepdef位于另一个源树(Gradle术语中的sourceSet)中。

源代码可以在Github上找到,它包含一个示例项目。

我的源代码树应该看起来像这样:

src/
    cucumberTest/
        java/
            /...
        resources/
            /...
    main/
        java/
            /...
        resources/
            /...
    test/
        /java
            /...
        resources/
            /...

当我把。cucumberTest/resources中的特性文件和test/java中的stepdef java文件我的Cucumber测试运行良好。但是当stepdefs在cucumberTest/java中时,Cucumber找不到文件,我得到错误消息说它们没有被定义。

Undefined scenarios:
src/cucumberTest/resources/is_it_saturday_yet.feature:4 # Sunday isn't Saturday

2 Scenarios (1 undefined, 1 passed)
6 Steps (1 skipped, 2 undefined, 3 passed)
0m0.134s

我的build.gradle文件是这样的:

plugins {
    id 'java-library'
    id 'java'
    id 'idea'
}

repositories {
    jcenter()
    mavenCentral()
}

archivesBaseName = "helloworld"
version = '1.0'

dependencies {
    api 'org.apache.commons:commons-math3:3.6.1'

    implementation 'com.google.guava:guava:26.0-jre'

    testImplementation 'junit:junit:4.12'
    testCompile("junit:junit:4.12")
    testCompile('org.junit.jupiter:junit-jupiter-api:5.3.2')
    testCompile('org.junit.jupiter:junit-jupiter-params:5.3.2')

    testRuntime('org.junit.jupiter:junit-jupiter-engine:5.3.2')
    testRuntime("org.junit.vintage:junit-vintage-engine:5.3.2")

    testCompile 'io.cucumber:cucumber-java:4.2.0'
    testCompile 'io.cucumber:cucumber-junit:4.2.0'
}

configurations {
    cucumberRuntime {
        extendsFrom testRuntime
    }
}

test {
    useJUnitPlatform ()
    testLogging {
        events "passed", "skipped", "failed"
    }
}

// Cucumber stuff:

sourceSets {
    cucumberTest {
        compileClasspath += sourceSets.main.output
        runtimeClasspath += sourceSets.main.output
    }
}

configurations {
    cucumberTestImplementation.extendsFrom implementation
    cucumberTestRuntimeOnly.extendsFrom runtimeOnly
}

dependencies {
    testCompile 'io.cucumber:cucumber-java:4.2.0'
    testCompile 'io.cucumber:cucumber-junit:4.2.0'
}

task cucumberTest() {
    dependsOn assemble, compileTestJava
    doLast {
        javaexec {
            main = "cucumber.api.cli.Main"
            classpath = configurations.cucumberRuntime + sourceSets.main.output + sourceSets.test.output + sourceSets.cucumberTest.output
            args = ['--plugin', 'pretty', '--glue', 'stepdefs.hellocucumber', 'src/cucumberTest/resources']
        }
    }
}

wrapper {
    gradleVersion = '5.0'
}

我浏览了整个网页,但我觉得我是唯一一个想在Gradle 5中使用cucumberjvm并将BDD测试(cucumber)与TDD测试(JUnit)分开的人。

我可以采取简单的路线,将它们混合在一起,但除了有点清教徒并且将BDD和TDD分开之外,我还想了解发生了什么以及为什么它不起作用。

感谢帮助。谢谢。

伊万

共有1个答案

南门洋
2023-03-14

在我的好朋友Bart Kors的帮助下,我能够让它按预期工作。我更新了Github库以包含工作代码。克隆TrheeAxis/hello cumber以获得工作代码。

 类似资料:
  • 我是新的黄瓜和学习,并尝试自动化应用程序。我创建了一个新的测试项目。我想把特性文件和Cucumber runner类保存在一个不同的文件夹中,把所有的胶水代码保存在另一个文件夹中。 我尝试给出“@cucumberoptions(features=”project-2/resources/myfeature.feature“),但它抛出了。 谁能帮帮我吗!!

  • 我试图将一个maven插件cucumber-jvm-parallel-plugin合并到我的Cucumber-JVM代码中,但遇到了一些问题...我认为我已经正确地配置了,但是我的cucumber特性仍然是一个接一个地运行,而不是并行地运行。 我遵循了两个教程,但找不到哪里出错了,或者如果这是意料之中的: https://opencredo.com/test-automation-concepts

  • 我对cucumber相当陌生。当我注意到运行单个特性与运行整个套件(从IntelliJ)时的差异时,我只是通过创建几个测试特性来进行试验。 我注意到,当我运行单个特性时,它使用cucumber-jvm选项运行,在本例中,CucumberConfig(定义runner和cucumber选项的空白类)和runner没有被使用。但是,当我运行整个套件时,它作为JUnit测试运行,显然,在本例中,Conf

  • 我试图运行标记功能的顺序,他们提交。 有没有我可以运行这些测试在他们各自的顺序,并有所有的结果包含在同一个报告?

  • 争论严格适用于每个国家。 我不想为所有国家复制粘贴这个场景,我想知道我是否可以有功能/支持文件,这样我就可以取代“巴西”参数,以获得更动态的东西。 也许所有测试都像cucumber一样运行--参数“巴西”

  • 我正试图在Maven中基于cucumber标记运行一套JUnitCucumber特性。我可以让它们按顺序运行,但不能并行运行。我找到了一个名为小胡瓜的软件包,它可以帮我解决这个问题。 然而,我无法让测试运行,我看了github上的示例maven项目,它在Cucumber.class运行良好,但在西葫芦上抛出一个错误。 任何帮助将不胜感激。 我已在pom中包括以下内容 我是在召唤我的跑步者。 我得到