Как регистрировать информацию о запросах и ответах RestAssured в журналах ExtentReports

У меня есть пакет автоматизации на основе Rest Assured-TestNG, и он использует Extent Reports. Мне нужен способ, чтобы все журналы из Rest Assured также регистрировались в Extent Reports.

Я использую log4j для регистрации запросов и ответов Rest Assured в файлы и консоль, можно ли эти журналы передавать в Extent Reports?

Есть ли способ сделать это?


person hemanth    schedule 06.10.2017    source источник
comment
Вы можете просто зарегистрировать ответ со статусом. Библиотека Gson может украсить json для вас.   -  person Karthik    schedule 07.10.2017
comment
Да, я могу это сделать. Но мне нужно зарегистрировать это в отчете об экстенте. Можете ли вы поделиться примером кода, если это можно сделать?   -  person hemanth    schedule 09.10.2017
comment
Я делаю так: test.info(‹textarea› + json + ‹/textarea›); или test.info(‹pre› + json + ‹/pre›);   -  person Karthik    schedule 09.10.2017


Ответы (1)


Следующий пример кода создает отчеты об экстенте и регистрирует подробности. Пожалуйста, не вам также понадобятся следующие зависимости для успешного выполнения.

<dependency>
    <groupId>commons-io</groupId>
    <artifactId>commons-io</artifactId>
    <version>2.4</version>
</dependency>
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>6.14.3</version>
</dependency>
<dependency>
<groupId>com.relevantcodes</groupId>
<artifactId>extentreports</artifactId>
<version>2.41.2</version>
</dependency>

<dependency>
<groupId>io.rest-assured</groupId>
<artifactId>rest-assured</artifactId>
<version>3.0.6</version>
</dependency>

Убедитесь, что приведенные выше зависимости обновлены в файле pom.

import java.io.File;
import java.io.IOException;
import java.io.PrintStream;
import java.io.StringWriter;

import org.apache.commons.io.output.WriterOutputStream;
import org.testng.ITestContext;
import org.testng.ITestResult;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.AfterSuite;
import org.testng.annotations.BeforeSuite;
import org.testng.annotations.Test;

import com.relevantcodes.extentreports.ExtentReports;
import com.relevantcodes.extentreports.ExtentTest;
import com.relevantcodes.extentreports.LogStatus;

import io.restassured.RestAssured;
import io.restassured.filter.log.RequestLoggingFilter;
import io.restassured.response.Response;

/**
 * @author vamsir
 *
 */

public class SampleExtentReport {

    static StringWriter requestWriter;
    static PrintStream requestCapture;
    static ExtentTest test;
    static ExtentReports extentReports;

    @BeforeSuite
    public void init(ITestContext context) {


        extentReports = new ExtentReports(System.getProperty("user.dir") + File.separator + "reports" + File.separator
                +this.getClass().getSimpleName().toString() + ".html");

    }



    @Test
    public static void sampleTest() {

        test = extentReports.startTest("Get Sample Test");

        requestWriter = new StringWriter();
        requestCapture = new PrintStream(new WriterOutputStream(requestWriter));

        Response response = RestAssured.given().filter(new RequestLoggingFilter(requestCapture)).and().baseUri("https://jsonplaceholder.typicode.com").and().basePath("/todos/1").when().get();

        requestCapture.flush();
    System.out.println("Request: "+requestWriter.toString());
    System.out.println("Response: "+response.asString());
    test.log(LogStatus.INFO, "Request : "+ requestWriter.toString());
    test.log(LogStatus.INFO, "Response : " + response.asString());

        extentReports.endTest(test);

    }


    @AfterMethod
    public void getResult(ITestResult result) throws IOException {
        if (result.getStatus() == ITestResult.FAILURE) {
            test.log(LogStatus.FAIL, result.getThrowable());
        }
    }

    @AfterSuite
    public void end() {

        extentReports.flush();
        extentReports.close();

    }

}

Вот пример вывода, который я получил, используя приведенный выше фрагмент кода:

[RemoteTestNG] detected TestNG version 6.14.3
Request: Request method:    GET
Request URI:    https://jsonplaceholder.typicode.com/todos/1
Proxy:          <none>
Request params: <none>
Query params:   <none>
Form params:    <none>
Path params:    <none>
Headers:        Accept=*/*
Cookies:        <none>
Multiparts:     <none>
Body:           <none>

Response: {
  "userId": 1,
  "id": 1,
  "title": "delectus aut autem",
  "completed": false
}
PASSED: sampleTest

===============================================
    Default test
    Tests run: 1, Failures: 0, Skips: 0
===============================================


===============================================
Default suite
Total tests run: 1, Failures: 0, Skips: 0
===============================================
person Vamsi Ravi    schedule 15.03.2019
comment
Пустой запрос отображается, когда я пытаюсь распечатать запрос. - person kkashyap1707; 15.06.2019
comment
@ kkashyap1707, мой ответ обновлен, проверьте еще раз. Ранее я не очищал захваченный запрос. - person Vamsi Ravi; 17.06.2019
comment
Как вы можете создать один HTML-файл ExtentReport для захвата всех заголовков тестовых запросов и ответов? В вашем примере у вас есть один HTML-файл ExtentReport для каждого теста. - person seleniumappiumnewbie; 26.12.2019