Каратэ @RunWith (Karate.class) Ошибка метания

Когда я запускаю свои функции с помощью @RunWith (Karate.class), я вижу ошибку ниже.

Я нашел возможность работать с Junit, которая отлично работает, но не генерирует отчеты о карате. Все мои тестовые примеры проходят без каких-либо проблем, однако я хотел бы работать с Karate, чтобы получить хороший отчет.

@RunWith(SpringRunner.class)
@CucumberOptions(tags = "~@ignore")
public class RestServicesDmaTestApplicationTests {

    @Test
    public void testABC(){
        CucumberRunner.runFeature(getClass(), "/features/ABC.feature",new HashedMap(),true);
    }
}

Когда я занимаюсь карате, я получаю сообщение об ошибке ниже.

@RunWith(Karate.class)
@CucumberOptions(tags = "~@ignore",features = {"classpath:com/mastercard/send/features/ABC.feature})
public class KarateJunitTest {

    @BeforeClass
    public static void before() {
        System.setProperty("karate.env", "stage");
    }    
}



java.lang.NoSuchMethodError: ch.qos.logback.classic.encoder.PatternLayoutEncoder.encode(Ljava/lang/Object;)[B

            at com.intuit.karate.cucumber.ReporterLogAppender.append(ReporterLogAppender.java:72)
            at com.intuit.karate.cucumber.ReporterLogAppender.append(ReporterLogAppender.java:38)
            at ch.qos.logback.core.AppenderBase.doAppend(AppenderBase.java:82)
            at ch.qos.logback.core.spi.AppenderAttachableImpl.appendLoopOnAppenders(AppenderAttachableImpl.java:51)
            at ch.qos.logback.classic.Logger.appendLoopOnAppenders(Logger.java:270)
            at ch.qos.logback.classic.Logger.callAppenders(Logger.java:257)
            at ch.qos.logback.classic.Logger.buildLoggingEventAndAppend(Logger.java:421)
            at ch.qos.logback.classic.Logger.filterAndLog_1(Logger.java:398)
            at ch.qos.logback.classic.Logger.info(Logger.java:583)
            at com.intuit.karate.ScriptBridge.log(ScriptBridge.java:164)
            at jdk.nashorn.internal.scripts.Script$Recompilation$5$18$\^eval\_.config(<eval>:7)
            at jdk.nashorn.internal.runtime.ScriptFunctionData.invoke(ScriptFunctionData.java:636)
            at jdk.nashorn.internal.runtime.ScriptFunction.invoke(ScriptFunction.java:229)
            at jdk.nashorn.internal.runtime.ScriptRuntime.apply(ScriptRuntime.java:387)
            at jdk.nashorn.api.scripting.ScriptObjectMirror.call(ScriptObjectMirror.java:110)
            at com.intuit.karate.Script.evalFunctionCall(Script.java:1532)
            at com.intuit.karate.Script.call(Script.java:1489)
            at com.intuit.karate.Script.callAndUpdateConfigAndAlsoVarsIfMapReturned(Script.java:1606)
            at com.intuit.karate.ScriptContext.<init>(ScriptContext.java:131)
            at com.intuit.karate.StepDefs.<init>(StepDefs.java:81)
            at com.intuit.karate.cucumber.KarateObjectFactory.getInstance(KarateObjectFactory.java:80)
            at cucumber.runtime.java.JavaStepDefinition.execute(JavaStepDefinition.java:38)
            at cucumber.runtime.StepDefinitionMatch.runStep(StepDefinitionMatch.java:37)
            at com.intuit.karate.cucumber.CucumberUtils.runStep(CucumberUtils.java:139)
            at com.intuit.karate.cucumber.KarateRuntime.runStep(KarateRuntime.java:80)
            at cucumber.runtime.model.StepContainer.runStep(StepContainer.java:44)
            at cucumber.runtime.model.StepContainer.runSteps(StepContainer.java:39)
            at cucumber.runtime.model.CucumberScenario.run(CucumberScenario.java:44)
            at cucumber.runtime.junit.ExecutionUnitRunner.run(ExecutionUnitRunner.java:102)
            at cucumber.runtime.junit.FeatureRunner.runChild(FeatureRunner.java:63)
            at cucumber.runtime.junit.FeatureRunner.runChild(FeatureRunner.java:18)
            at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
            at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
            at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
            at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
            at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
            at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
            at cucumber.runtime.junit.FeatureRunner.run(FeatureRunner.java:70)
            at com.intuit.karate.junit4.Karate.runChild(Karate.java:118)
            at com.intuit.karate.junit4.Karate.runChild(Karate.java:33)
            at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
            at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
            at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
            at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
            at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
            at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
            at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
            at com.intuit.karate.junit4.Karate.run(Karate.java:127)
            at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
            at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68)
            at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:51)
            at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:237)
            at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)
            at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
            at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
            at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
            at java.lang.reflect.Method.invoke(Method.java:497)
            at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)

Я вижу ниже два JAR в моем пути к классам. И классическая, и кодовая версия одинаковы.

ch\qos\logback\logback-classic\1.1.11\logback-classic-1.1.11.jar;
ch\qos\logback\logback-core\1.1.11\logback-core-1.1.11.jar;

Ниже мой файл POM

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.test.send</groupId>
    <artifactId>rest-services-regression-test</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>rest-services-regression-test</name>
    <description>Demo project for Spring Boot</description>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.9.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web-services</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <!--<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
        </dependency>-->

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>${spring.version}</version>
        </dependency>

        <dependency>
            <groupId>com.intuit.karate</groupId>
            <artifactId>karate-apache</artifactId>
            <version>0.6.2</version>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>ch.qos.logback</groupId>
                    <artifactId>logback-classic</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <dependency>
            <groupId>com.intuit.karate</groupId>
            <artifactId>karate-junit4</artifactId>
            <version>0.6.2</version>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>net.masterthought</groupId>
            <artifactId>cucumber-reporting</artifactId>
            <version>3.14.0</version>
        </dependency>

        <dependency>
            <groupId>com.google.gdata</groupId>
            <artifactId>core</artifactId>
            <version>1.47.1</version>
        </dependency>

        <dependency>
            <groupId>com.fasterxml.jackson.dataformat</groupId>
            <artifactId>jackson-dataformat-xml</artifactId>
            <version>2.8.10</version>
        </dependency>

        <dependency>
            <groupId>com.oracle</groupId>
            <artifactId>ojdbc6</artifactId>
            <version>11.2.0</version>
        </dependency>

        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
            <version>1.2.3</version>
        </dependency>

        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-core</artifactId>
            <version>1.2.3</version>
        </dependency>

    </dependencies>

    <build>
        <testResources>
            <testResource>
                <directory>src/test/java</directory>
                <excludes>
                    <exclude>**/*.java</exclude>
                </excludes>
            </testResource>
        </testResources>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>


</project>

person Sushil Behera    schedule 31.01.2018    source источник
comment
для пользы других - когда вы используете аннотацию @RunWith(Karate.class), никакие методы, помеченные @Test, не будут выполняться, версия 0.7.0 будет регистрировать ПРЕДУПРЕЖДЕНИЕ. также, пожалуйста, не используйте CucumberRunner.runFeature, потому что вы не будете получать отчеты, и это предназначено только для тех, кто хочет использовать Karate в качестве библиотеки для выполнения HTTP-вызовов.   -  person Peter Thomas    schedule 01.02.2018


Ответы (1)


Нашел проблему. Кажется, версия логбэка в карате неверна.

Методы ch.qos.logback.classic.encoder.PatternLayoutEncoder.encode недоступны в версии 1.1.11 logback.

Я исключил баночки логбэка из карате и добавил логбэк версии 1.2.3, и он начал работать.

    <dependency>
            <groupId>com.intuit.karate</groupId>
            <artifactId>karate-apache</artifactId>
            <version>0.6.2</version>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>ch.qos.logback</groupId>
                    <artifactId>logback-classic</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
            <version>1.2.3</version>
        </dependency>

        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-core</artifactId>
            <version>1.2.3</version>
        </dependency>
person Sushil Behera    schedule 01.02.2018
comment
вы все неправильно поняли. Каратэ зависит от последней версии 1.2.3 - проблема в вашем pom, потому что что-то еще в вашем pom.xml было извлечено из более старых версий. то, что вы сделали выше, - это принудительно установить версию 1.2.3, которая сработала. - person Peter Thomas; 01.02.2018
comment
однако ваше решение правильное. Я проголосовал за него, отметьте ответ как принятый - это поможет другим. - person Peter Thomas; 01.02.2018
comment
Спасибо, Питер, за голосование. Цените время, чтобы взглянуть на это. Я обновил свой файл pom в вопросе. Если мы можем определить, что не так, это поможет всем. - person Sushil Behera; 01.02.2018
comment
спасибо, я также хотел сказать вам, что вам не нужно исключать из Каратэ, если у вас есть 2 зависимости для входа в систему в вашем pom, установленном на 1.2.3 - person Peter Thomas; 01.02.2018