Primeros pasos con Allure Java HTTP Client
Enriquece tus reportes de pruebas de Allure Report con información detallada sobre las solicitudes HTTP realizadas mediante el Java HTTP Client incorporado, java.net.http.HttpClient.
Allure Java HTTP Client está disponible en Allure Java 3.0.0 y versiones más recientes, que requieren Java 17 o una versión más reciente.
Allure Java HTTP Client es compatible con todas las integraciones de Allure basadas en JVM, incluyendo Allure JUnit Jupiter, Allure TestNG, Allure Cucumber-JVM y más.
Para habilitar la integración en tu proyecto:
Asegúrate de tener habilitada la integración de Allure Report para el framework de pruebas que uses.
Consulta las instrucciones en la documentación de la integración en Frameworks.
Agrega la integración de Allure Java HTTP Client a las dependencias de tu proyecto.
xml<!-- Define la versión de Allure que deseas usar mediante la propiedad allure.version --> <properties> <allure.version>VERSION</allure.version> </properties> <!-- Agrega allure-bom a la gestión de dependencias para garantizar que se usen las versiones correctas de todas las dependencias --> <dependencyManagement> <dependencies> <dependency> <groupId>io.qameta.allure</groupId> <artifactId>allure-bom</artifactId> <version>${allure.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <dependencies> <dependency> <groupId>io.qameta.allure</groupId> <artifactId>allure-java-httpclient</artifactId> <scope>test</scope> </dependency> </dependencies>ktsval allureVersion = "VERSION" dependencies { testImplementation(platform("io.qameta.allure:allure-bom:$allureVersion")) testImplementation("io.qameta.allure:allure-java-httpclient") }groovydef allureVersion = "VERSION" dependencies { testImplementation platform("io.qameta.allure:allure-bom:$allureVersion") testImplementation "io.qameta.allure:allure-java-httpclient" }Envuelve el cliente HTTP que usan tus pruebas con
AllureHttpClient.wrap(), y usa el cliente devuelto para todas las solicitudes.El ejemplo a continuación muestra el uso de Allure Java HTTP Client en una prueba de JUnit Jupiter.
javaimport io.qameta.allure.javahttpclient.AllureHttpClient; import org.junit.jupiter.api.Test; import java.net.URI; import java.net.http.HttpClient; import java.net.http.HttpRequest; import java.net.http.HttpResponse; import static org.junit.jupiter.api.Assertions.assertEquals; class TestMyWebsite { static HttpClient httpClient = AllureHttpClient.wrap(HttpClient.newHttpClient()); @Test void testSomeRequest() throws Exception { HttpRequest request = HttpRequest.newBuilder(URI.create("https://jsonplaceholder.typicode.com/todos/1")) .GET() .build(); HttpResponse<String> response = httpClient.send(request, HttpResponse.BodyHandlers.ofString()); assertEquals(200, response.statusCode()); } }El cliente envuelto se puede crear una sola vez y compartirse entre pruebas.
Ejecuta tus pruebas y genera un reporte de pruebas de la forma habitual.
Qué muestra el reporte
Cada solicitud realizada con send() o sendAsync() durante una prueba o un fixture se agrega a los resultados de prueba como un único adjunto de intercambio HTTP llamado “HTTP exchange”. Contiene:
- el método, la URL, los encabezados y el cuerpo de la solicitud;
- el estado, los encabezados y el cuerpo de la respuesta;
- la hora de inicio y fin de la solicitud;
- los detalles del error, si la solicitud falla, por ejemplo, porque no se puede alcanzar el servidor.
Las solicitudes asíncronas se agregan cuando se completan, incluso si la prueba no espera la respuesta.
El cuerpo de la respuesta se captura tal como lo recibe tu body handler. Con body handlers de streaming, como BodyHandlers.ofInputStream() o BodyHandlers.ofLines(), el adjunto contiene solo la parte del cuerpo que se recibió en el momento en que send() retornó.
Las conexiones WebSocket creadas mediante newWebSocketBuilder() no se agregan al reporte. Las solicitudes realizadas mientras no se está ejecutando ninguna prueba o fixture se pasan al cliente envuelto sin cambios y no se agregan al reporte.
Configuración
Configurar el adjunto de intercambio HTTP
configureHttpExchange(Consumer<HttpExchange.Builder> exchangeCustomizer)
Usa configureHttpExchange() para controlar qué contiene el adjunto de intercambio HTTP. El método devuelve el cliente, por lo que puedes llamarlo justo después de wrap(). Si lo llamas de nuevo, la nueva configuración reemplaza a la anterior.
Los siguientes métodos están disponibles en el builder:
redactHeader(String name)- reemplaza el valor del encabezado de solicitud o respuesta indicado con un marcador de posición. El nombre no distingue entre mayúsculas y minúsculas.redactCookie(String name)- reemplaza el valor de la cookie indicada con un marcador de posición. Allure muestra las cookies de los encabezadosCookieySet-Cookiepor separado de los demás encabezados.setMaxBodySize(long maxBodySize)- el número máximo de bytes de un cuerpo de solicitud o respuesta que se conservará. Los cuerpos más largos se truncan y se marcan como truncados en el reporte. El valor predeterminado es 1 MiB.
Por defecto, los valores de los encabezados Authorization y Proxy-Authorization se reemplazan con un marcador de posición.
import io.qameta.allure.javahttpclient.AllureHttpClient;
import java.net.http.HttpClient;
static HttpClient httpClient = AllureHttpClient.wrap(HttpClient.newHttpClient())
.configureHttpExchange(exchange -> exchange
.redactHeader("X-Api-Key")
.redactCookie("SESSION")
.setMaxBodySize(64 * 1024));