Как сгенерировать html-отчет cucumber с прикрепленным неудачным скриншотом и файлом cucumber.json, используя проект на основе gradle

#java #gradle #build.gradle

#java #gradle #build.gradle

Вопрос:

Используя gradle, я пытаюсь сгенерировать html-отчет cucumber с прикрепленным к нему неудачным снимком экрана по соображениям безопасности, у меня не может быть онлайн-плагинов в файле build.gradle, поэтому мне приходится загружать необходимые jar и плагины, а также внедрять и настраивать библиотеку вручную в файле build.gradle.

Пожалуйста, подскажите, как настроить файл TestRunner в build.gradle и сгенерировать HTML-отчет cucumber с помощью файла cucumber.json

файл build.gradle

 plugins {
    id 'java'
    id 'idea'
}

group 'org.example'
version '1.0-SNAPSHOT'


configurations {
    cucumberRuntime.extendsFrom testRuntime
}

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



repositories {

    mavenCentral()
}
dependencies {
    implementation fileTree(dir:System.getProperty("user.dir") '/Plugin',include:['*.jar'])
    implementation files('junit-4.12')
    implementation files('testng-6.7.jar')
    implementation files('junit-jupiter-api-5.6.2')
    implementation files('hamcrest-all-1.3')
    .....................


  

Файл TestRunner

 package TestRunner;

import io.cucumber.junit.Cucumber;
import io.cucumber.junit.CucumberOptions;
import org.junit.runner.RunWith;

@RunWith(Cucumber.class)
@CucumberOptions(
        features = "src/test/resources",
        glue = "StepDefs",
        plugin = {
                "pretty", "html:target/cucumber-html-report", "json:target/cucumber.json", "pretty:target/cucumber-pretty.txt"
        }
)

public class TestRunner {

}
  

Комментарии:

1. Переименовать target/cucumber-html-report в target/cucumber-html-report.html .

2. Не удалось выполнить задачу ‘: cucumber’. > Обработать ‘command’C:UsersAdministratorDocumentsEnvironmentopenjdk-13 33_windows-x64_binjdk-13binjava.exe «завершено с ненулевым значением выхода 1

3. @M.P.Korstanje если я запускаю простой функциональный файл, выполняется выполнение, но отчеты не генерируются, но если я запускаю эту задачу gradle, она выдает указанную выше ошибку

Ответ №1:

Что бы StepDefs ни было…

Запуск с gradle cucumber --info может быть полезен для отладки… поскольку в сообщении об ошибке finished with non-zero exit value 1 просто указывается «ошибка» или «безуспешно».

Для начала вам, вероятно, понадобятся эти зависимости Java:

 testImplementation 'io.cucumber:cucumber-java:6.5.0'
testImplementation 'io.cucumber:cucumber-junit:6.5.0'
  

И, возможно, придется добавить gradle.cucumber в качестве --glue в аргументы args , как предлагает документация. Скорее compileTestJava должна быть testClasses зависимость от задачи.

html обычно это плагин, который ожидает выходной каталог, поэтому это должно выглядеть примерно так:

 task cucumber() {
    dependsOn assemble, testClasses
    doFirst {

    }
    doLast {
        javaexec {
            main = 'io.cucumber.core.cli.Main'
            classpath = configurations.cucumberRuntime   sourceSets.main.output   sourceSets.test.output
            args = [
                '--plugin', 'pretty', 'html:target/reports',
                '--glue', 'gradle.cucumber',
                'src/test/resources'
            ]
        }
    }
}
  

Они args также могут быть аннотированы на Java; не уверен, какой из них имеет приоритет.
Вероятно, это не имеет смысла и только создает беспорядок при повторном определении аргументов.

Обязательно следуйте инструкции # 4:

Добавьте .feature файлы функций и связанные классы отображения шагов .java в src/test/resources и src/test/java gradle.cucumber соответственно в,, пакет.

-g , --glue ПУТЬ, откуда загружается код клея (определения шагов, хуки и плагины).

При запуске с JUnit также можно передавать параметры с junit-platform.properties файлом.


Самым простым может быть начать с cucumber-java-skeleton (известно, что он работает).

Ответ №2:

У меня это не сработало, если я запускаю эту задачу cucumber, она выдает мне ошибку

Задача: ошибка cucumber FAILED: не удалось найти или загрузить основной класс io.cucumber.api.cli.Main

Вызвано: java.lang.ClassNotFoundException: io.cucumber.api.cli.Main

Ошибка: Не удалось найти или загрузить основной класс io.cucumber.api.cli.Main

Я создал одну задачу cucumberRunner, которая выполняет TestRunner.java файл, он создает файл cucumber.json и html-отчет, но отчет htlm, но HTML-отчет не ожидается, странный, без графики и бесцветный, бесцветный

build.gradle, который я использую:

 ```
configurations {
    cucumberRuntime {
        extendsFrom testRuntime
    }
}

task cucumber() {
    dependsOn assemble, testClasses
    doFirst {

    }
    doLast {
        javaexec {
            main = 'io.cucumber.api.cli.Main'     // tried with  io.cucumber.core.cli.Main
            classpath = configurations.cucumberRuntime   sourceSets.main.output   sourceSets.test.output
            args = [
                    '--plugin', 'pretty', 'html:target/reports',
                    '--glue', 'gradle.cucumber',
                    'src/test/resources'
            ]
        }
    }
}
task cucumberRunner(type: Test) {
    include '**/**TestRunner.class'
}
  
        Also I have added jars
           implementation files('junit-4.12')
           implementation files('testng-6.0.jar')
           implementation files('cucumber-core-6.0.0')
           implementation files('cucumber-java-6.0.0')
           implementation files('cucumber-plugin-6.0.0')
           implementation files('cucumber-junit-6.0.0')
           implementation files('cucumber-testng-6.0.0')
           implementation files('cucumber-jvm-deps-1.0.5')
           implementation files('cucumber-gherkin-6.0.0')
           implementation files('cucumber-java8-6.0.0')
           implementation files('cucumber-html-0.2.3')
       ```