mercredi 18 novembre 2020

KARATE: print statement doesn't write to console with log4j2

I have spring boot application and use karate for testing. I used log4j2 for logging. Karate use logback as a log library. I found this link for basic configuration of log4j2 with karate. But unfortunately print statement in the feature file is not written to console.

This is my Simple test to print to console.

Scenario: Print to Console
    * print 'Hello Word'

Log4j2.properties file

log4j.rootLogger = INFO, CONSOLE
log4j.appender.CONSOLE = org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.layout = org.apache.log4j.PatternLayout

As you see bellow I excluded logback dependecies from karate with this code

testImplementation('com.intuit.karate:karate-junit5:0.9.6') {
        exclude module: "logback-classic"
    }
    testImplementation('com.intuit.karate:karate-apache:0.9.6') {
        exclude module: "logback-classic"
    }

Gradle build file

plugins {
    id 'org.springframework.boot' version '2.3.3.RELEASE'
    id 'io.spring.dependency-management' version '1.0.10.RELEASE'
    id 'java'
    id "org.openapi.generator" version "4.3.1"
    //id 'war'
}
group = 'test'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '11'

configurations {
    compileOnly {
        extendsFrom annotationProcessor
    }
}

repositories {
    mavenCentral()
}

dependencies {
    developmentOnly 'org.springframework.boot:spring-boot-devtools'

    implementation('org.springframework.boot:spring-boot-starter-web') {
        exclude module: "spring-boot-starter-logging"
        exclude module: "logback-classic"
    }
    implementation('org.springframework.boot:spring-boot-starter-data-jpa') {
        exclude module: "spring-boot-starter-logging"
        exclude module: "logback-classic"
    }
    implementation('org.springframework.boot:spring-boot-starter-validation') {
        exclude module: "spring-boot-starter-logging"
        exclude module: "logback-classic"
    }
    implementation('org.springframework.boot:spring-boot-starter-quartz'){
        exclude module: "spring-boot-starter-logging"
        exclude module: "logback-classic"
    }
    implementation("org.springframework.boot:spring-boot-starter-log4j2")

    implementation 'org.mapstruct:mapstruct:1.4.0.Final'
    implementation 'org.zalando:jackson-datatype-money:1.2.0'

    compileOnly 'org.projectlombok:lombok'


    implementation 'javax.validation:validation-api:2.0.0.Final'
    implementation 'com.vladmihalcea:hibernate-types-52:2.9.13'
    implementation group: 'org.openapitools', name: 'jackson-databind-nullable', version: '0.2.1'

    implementation 'io.swagger:swagger-annotations:1.5.9'
    implementation 'org.javamoney:moneta:1.4.2'

    runtimeOnly 'org.postgresql:postgresql'


    annotationProcessor 'org.springframework.boot:spring-boot-configuration-processor'
    annotationProcessor 'org.projectlombok:lombok'
    annotationProcessor 'org.mapstruct:mapstruct-processor:1.4.0.Final'

    testImplementation('org.springframework.boot:spring-boot-starter-test') {
        exclude module: "spring-boot-starter-logging"
        exclude module: "logback-classic"
        exclude group: 'org.junit.vintage', module: 'junit-vintage-engine'
    }

    testImplementation('com.intuit.karate:karate-junit5:0.9.6') {
        exclude module: "logback-classic"
    }
    testImplementation('com.intuit.karate:karate-apache:0.9.6') {
        exclude module: "logback-classic"
    }
    testCompile group: 'com.h2database', name: 'h2', version: '1.4.200'

}

test {

    useJUnitPlatform()
    environment SPRING_PROFILES_ACTIVE: environment.SPRING_PROFILES_ACTIVE ?: "test"
}

bootRun {
    environment SPRING_PROFILES_ACTIVE: environment.SPRING_PROFILES_ACTIVE ?: "dev"
}

sourceSets {
    test {
        resources {
            srcDir file('src/test/java')
            exclude '**/*.java'
        }
    }
}

Test Class:

import com.intuit.karate.junit5.Karate;
import org.junit.jupiter.api.BeforeEach;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.web.server.LocalServerPort;

@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
class RunAllKarateTest  {

    @LocalServerPort
    private int port;

    @BeforeEach
    void setUp() {
        System.getProperties().setProperty("server.port", String.valueOf(port));
    }

    @Karate.Test
    Karate runAll() {
        return Karate.run().relativeTo(getClass());
    }

}

Karate Config

function fn() {

   var port = karate.properties['server.port'];
   if (!port) {
       port = 8080;
     }
    var config = {
        baseUrl : 'http://localhost:'+port,
        uuid: function(){ return java.util.UUID.randomUUID() + '' },
        isoDateTime: function(){ return java.time.OffsetDateTime.now().format(java.time.format.DateTimeFormatter.ISO_DATE_TIME)}
    };


    return config;
}

This is the report screenshot

enter image description here

Aucun commentaire:

Enregistrer un commentaire