2
votes

Obtenez l'opération "CURL" de chaque test Rest Assured et imprimez dans la console lorsque vous ne réussissez pas le test

J'ai besoin d'obtenir l'opération "CURL" de chaque test Rest Assured et de l'imprimer dans la console lorsque je ne réussis pas le test. C'est possible?

Par exemple, convertissez:

curl --user name:passwoed -k -X POST \
https://test_url/oauth/token \
-H 'cache-control: no-cache' \
-H 'content-type: application/x-www-form-urlencoded' \
-d grant_type=client_credentials

en

 given().relaxedHTTPSValidation().
   auth().basic("name", "password").
   param("grant_type","client_credentials").
 when().
   post("https://test_url/oauth/token").
 then().
   statusCode(200);


1 commentaires

Ce n'est pas quelque chose que j'ai essayé, mais les détails dans le lien sont assez similaires à votre demande - github.com/ dzieciou / curl-logger


3 Réponses :


4
votes

Incluez les dépendances suivantes.

Maven:

[main] DEBUG curl - **
curl 'https://jsonplaceholder.typicode.com/posts' 
-H 'Accept: */*' 
-H 'Content-Type: application/json; charset=UTF-8' 
-H 'Host: jsonplaceholder.typicode.com' 
-H 'Connection: Keep-Alive' 
-H 'User-Agent: Apache-HttpClient/4.5.3 (Java/1.8.0_181)' 
--data-binary '{"emailAddress":"sample@domain.com"}' 
--compressed 
-k 
-v**

PASSED: sampleAPITest

Une fois configuré, utilisez le morceau de code suivant pour enregistrer la requête curl dans la sortie de la console.

package com.api.test;

import static org.hamcrest.CoreMatchers.is;

import org.json.JSONObject;
import org.testng.annotations.Test;

import com.sample.model.EnrollEmail;
import com.github.dzieciou.testing.curl.CurlLoggingRestAssuredConfigFactory;

import io.restassured.RestAssured;
import io.restassured.config.RestAssuredConfig;
import io.restassured.http.ContentType;
import io.restassured.path.json.JsonPath;
import io.restassured.response.Response;
import io.restassured.response.ValidatableResponse;

/**
 * @author vamsiravi
 *
 */
public class Sample {

    @Test(enabled=true)
    public void sampleAPITest() {

        RestAssuredConfig config = CurlLoggingRestAssuredConfigFactory.createConfig();  

        EnrollEmail email = new EnrollEmail();
        email.setEmailAddress("sample@domain.com");
        RestAssured.given().config(config).contentType(ContentType.JSON).body(email).when().post("https://jsonplaceholder.typicode.com/posts").then()
        .assertThat()
        .statusCode(201);   

    }
}

Résultat:

<dependency>
  <groupId>com.github.dzieciou.testing</groupId>
  <artifactId>curl-logger</artifactId>
  <version>1.0.4</version>
</dependency>
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>1.6.6</version>
</dependency>
<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-classic</artifactId>
    <version>1.0.9</version>
</dependency>


0 commentaires

1
votes

Une alternative consiste à analyser la sortie du log (). all () comme vu dans mon article .

Remarque: je n'ai pas partagé le code ici, car il s'agit d'une licence Apache 2.0, ce qui est différent de la licence par défaut de Stack Overflow .


0 commentaires

1
votes

Basé sur la réponse de @ vamsi , il s'agit de la mise en œuvre complète de ce qui a fonctionné pour nous.

POM p >

<?xml version="1.0" encoding="UTF-8"?>
<configuration>

<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
        <pattern>%-4relative [%thread] %-5level %logger{35} - %msg %n</pattern>
    </encoder>
</appender>

<appender name="FILE" class="ch.qos.logback.core.FileAppender">
    <file>mylog.log</file>
    <append>true</append>
    <encoder>
        <pattern>%d{HH:mm:ss.SSS} [%-5level] %logger{15} - %msg%n%rEx</pattern>
    </encoder>
</appender>

<logger name="curl" level="DEBUG">
    <appender-ref ref="FILE"/>
</logger>

Et

public class Requests {
    public String baseUrl;
    public RequestSpecification getRequestSpecification(String authorizationToken) {
        /** Enables printing request as curl under the terminal as per https://github.com/dzieciou/curl-logger */
        Options options = Options.builder()
                .printMultiliner()
                .updateCurl(curl -> curl
                        .removeHeader("Host")
                        .removeHeader("User-Agent")
                        .removeHeader("Connection"))
                .build();
        RestAssuredConfig config = CurlLoggingRestAssuredConfigFactory.createConfig(options);
        baseUrl = Constants.getEndpoint();
        RestAssured.baseURI = baseUrl;
        RequestSpecification rq = given()
                .config(config)
                .contentType(ContentType.JSON)
                .contentType("application/json\r\n")
                .header("Accept", "application/json").and()
                .header("Content-Type", "application/json")
                .header("Authorization", authorizationToken)
                .when()
                .log()
                .everything();
        return rq;
    }
}

Génère ce bit sur le terminal d'exécution:

 entrez la description de l'image ici

Si vous ne pouvez pas le voir tout de suite sur votre terminal d'exécution après avoir déclenché vos tests, ou si vous avez besoin de le consigner dans la sortie système standard ou dans un fichier .log, créez un Le fichier logback.xml dans le dossier test / resources comme indiqué ci-dessous peut vous aider.

<http.client.version>4.5.3</http.client.version>
<curl.logger.version>1.0.5</curl.logger.version>

<dependency>
   <groupId>org.apache.httpcomponents</groupId>
   <artifactId>httpclient</artifactId>
   <version>${http.client.version}</version>
</dependency>
<dependency>
   <groupId>com.github.dzieciou.testing</groupId>
   <artifactId>curl-logger</artifactId>
   <version>${curl.logger.version}</version>
</dependency>

PS: Le changement entre la sortie système ou le fichier .log se fait en fonction de celui vous passez comme référence pour l'appender enregistreur "curl".

entrez la description de l'image ici


0 commentaires