0

私はGradleで構築されたスプリングブートマイクロサービスプロジェクトを持っています。Jenkinsや他のCIサーバーのGradleプラグインから実行されているSpringブートサーバーとキュウリ統合テストを実行

コードチェックイン直後にJenkinsまたはCIサーバーでキュウリ統合テストを実行したいとします。 CIサーバー上のビルドジョブは、すべてのコードチェックイン後に自動的に起動されます。この仕事は私のgradle buildと呼んでいます。

私は、STSまたはEclipseから通常のJUnitテストケースとしてキュウリのテストケースを実行でき、組み込みのTomcatサーバーが起動し、キュウリテストケースが実行された後、サーバーが停止します。

は、これは私がGradleのビルドを通じてたい正確に何である:

キュウリの統合テストがgradle.buildにより、サーバ組み込み実行されている春のブート時に実行されますどのように?

現在の挙動はです:gradle.buildは、その後、キュウリ統合テストは、単にターゲットなしスプリングブートサーバーと呼ばなっているCIサーバー上で呼び出されたとき。行動期待

gradle.buildした後は、CIサーバー上で呼び出された、キュウリのテストが実行されている春のブート組み込みサーバー上で実行されるはずですとキュウリのテストケースが実行された後、それ自体で止める取得する必要があります。

注:私はこのプロジェクトでそれを特別なcucumber-testプロファイルを作成し、独自の設定ファイルを持っている

マイgradle.buildは、次のようになります。

buildscript { 
    ext { 
     springBootVersion = '1.4.2.RELEASE' 
    } 
    repositories { 
     mavenCentral() 
     jcenter() 
    } 
    dependencies { 
     classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}") 
    } 
} 

apply plugin: 'java' 
apply plugin: 'eclipse' 
apply plugin: 'idea' 
apply plugin: 'org.springframework.boot' 

jar { 
    manifest { 
     attributes 'Main-Class': 'com.pa.omas.Main' 
    } 
    baseName = 'omas' 
    version = '' 
} 
sourceCompatibility = 1.8 
targetCompatibility = 1.8 

repositories { 
    mavenCentral() 
    maven { url "https://repo.spring.io/snapshot" } 
    maven { url "https://repo.spring.io/milestone" } 
    maven { url "http://smartbearsoftware.com/repository/maven2" } 
} 

sourceSets { 
    integrationTest { 
     java { 
      compileClasspath += main.output + test.output 
      runtimeClasspath += main.output + test.output 
      srcDir file('src/integration-test/java') 
     } 
     resources.srcDir file('src/integration-test/resources') 
    } 
} 

configurations { 
    integrationTestCompile.extendsFrom testCompile 
    integrationTestRuntime.extendsFrom testRuntime 
    cucumberRuntime { 
     extendsFrom testRuntime 
    } 
} 

task copyScripts(type: Copy) { 
    from("scripts") 
    into("build/libs") 
} 

task copyReports(type: Copy) { 
    from("reports") 
    into("build/libs/reports") 
} 

task integrationTest(type: Test) { 
    testClassesDir = sourceSets.integrationTest.output.classesDir 
    classpath = sourceSets.integrationTest.runtimeClasspath 
    outputs.upToDateWhen { false } 
} 

check.dependsOn integrationTest 
integrationTest.mustRunAfter test 

tasks.withType(Test) { 
    reports.html.destination = file("${reporting.baseDir}/${name}") 
} 

bootRun { 
    args = ["--spring.profiles.active=cucumber-test"] 
} 

task cucumber(){ 
    dependsOn assemble, compileTestJava 

    doLast { 
     javaexec { 
      main = "cucumber.api.cli.Main" 
      classpath = configurations.cucumberRuntime + sourceSets.main.output + sourceSets.test.output 
      args = ['-p', 'pretty', '--monochrome', '-p', 'html:reports/cucumber/cucumber-html-reports', '-p', 'junit:reports/cucumber-junit/cucumber-junit-report.xml', 
        '-p', 'html:reports/cucumber', '--glue', 'src/integration-test/java/com/pa/omas/cucumber', 'src/integration-test/resources'] 
     } 
     copyReports 
    } 
} 

build { 
    dependsOn copyScripts 
} 

dependencies { 
    compile('org.springframework.boot:spring-boot-starter-actuator') 
    compile('org.springframework.cloud:spring-cloud-starter-stream-kafka') 
    compile('org.springframework.boot:spring-boot-starter-data-jpa') 
    compile('org.projectlombok:lombok') 
    compile('org.springframework.boot:spring-boot-starter-web') 
    compile('ch.qos.logback:logback-classic') 
    compile('org.mariadb.jdbc:mariadb-java-client:1.5.4') 
    compile('org.hibernate:hibernate-java8') 
    compile 'com.puppycrawl.tools:checkstyle:8.3' 
    compile group: 'net.masterthought', name: 'cucumber-reporting', version: '3.11.0' 
    compile group: 'net.masterthought', name: 'maven-cucumber-reporting', version: '3.11.0' 

    compile group: 'com.zaxxer', name: 'HikariCP', version: '2.6.3' 
    compile('com.fasterxml.jackson.datatype:jackson-datatype-jsr310') 
    compile group: 'io.springfox', name: 'springfox-swagger2', version: '2.7.0' 
    compile group: 'io.springfox', name: 'springfox-swagger-ui', version: '2.7.0' 

    testCompile('com.h2database:h2') 
    testCompile('org.springframework.boot:spring-boot-starter-test') 
    testCompile group: 'junit', name: 'junit', version: '4.12' 
    testCompile group: 'org.mockito', name: 'mockito-all', version: '2.0.2-beta' 
    testCompile group: 'info.cukes', name: 'cucumber-junit', version: '1.2.5' 
    testCompile group: 'info.cukes', name: 'cucumber-spring', version: '1.2.5' 

    integrationTestCompile('com.h2database:h2') 
    integrationTestCompile('org.springframework.boot:spring-boot-starter-test') 
    integrationTestCompile 'info.cukes:cucumber-java:1.2.5' 
    integrationTestCompile 'junit:junit:4.12' 
    integrationTestCompile group: 'info.cukes', name: 'cucumber-junit', version: '1.2.5' 
    integrationTestCompile group: 'info.cukes', name: 'cucumber-spring', version: '1.2.5' 
    integrationTestCompile group: 'info.cukes', name: 'cucumber-java', version: '1.2.5' 
    integrationTestCompile group: 'info.cukes', name: 'cucumber-core', version: '1.2.5' 
    integrationTestCompile group: 'info.cukes', name: 'cucumber-html', version: '0.2.6' 
    integrationTestCompile group: 'info.cukes', name: 'cucumber-jvm-deps', version: '1.0.5' 
    integrationTestCompile group: 'info.cukes', name: 'gherkin', version: '2.12.2' 
    integrationTestCompile group: 'io.cucumber', name: 'gherkin', version: '5.0.0' 
    integrationTestCompile group: 'info.cukes', name: 'cucumber-java8', version: '1.2.5' 
    integrationTestCompile group: 'org.webjars.npm', name: 'gherkin', version: '4.1.3' 
} 

dependencyManagement { 
    imports { 
     mavenBom "org.springframework.cloud:spring-cloud-dependencies:Camden.SR3" 
    } 
} 

マイproject structureがどのように見えます

Project Structure

StepsDefinitionAnnotations

StepsDefinitionAnnotations

CucumberTest CucumberTest

どうもありがとうございました!!

答えて

0

最後に、私はこの問題を解決しました。

cucumber cliメインクラスは、stepsDefinitionファイルが配置されたtestRuntimeを見つけることができませんでした。したがって、単にキュウリのテストケースを呼び出すだけで、実行することはありませんでした。

私がしたすべては、Gradleのファイルにメイン&テスト用sourceSetsを含め、以下のリンケさ:

sourceSets { 
    main { 
     java { 
      srcDirs = ["src/main/java"] 
     } 
    } 
    test { 
     java { 
      srcDirs = ["src/test/"] 
     } 
    } 
} 

そして、それは私のためにうまく働きました。

ありがとうございます。これが他の人にも役立つことを願っています!

関連する問題