ChatGPT peut vous aider à générer des tests d’API dans REST Assured !
ChatGPT est un type d’IA qui peut comprendre et répondre à l’entrée humaine, comme un robot très intelligent avec lequel vous pouvez avoir une conversation. Ouvrez simplement un compte gratuitement et commencez à discuter avec lui comme avec un ami.
Commençons par demander à ChatGPT de générer une spécification d’API afin que nous puissions montrer comment il peut également créer les tests ultérieurement.
Moi à ChatGPT : « Créez une spécification OpenAPI pour une API de suivi d’une nouvelle société de transport appelée FoxShipping. »
Il génère un exemple de spécification OpenAPI pour notre nouvelle API de suivi FoxShipping :
openapi: 3.0.
info:
title: FoxShipping Tracking API
version: 1.0.0
description: This API allows customers to track their shipments with FoxShipping.
contact:
name: FoxShipping Support
email: support@foxshipping.com
url: https://www.foxshipping.com
servers:
- url: https://api.foxshipping.com/tracking
paths:
/:
post:
summary: Track a shipment with FoxShipping
operationId: trackShipment
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
trackingNumber:
type: string
example: 1234567890
apiKey:
type: string
example: YOUR_API_KEY
responses:
200:
description: Successful tracking request
content:
application/json:
schema:
type: object
properties:
trackingNumber:
type: string
example: 1234567890
status:
type: string
example: "Delivered"
estimatedDelivery:
type: string
format: date-time
example: "2022-01-01T12:00:00Z"
401:
description: Unauthorized request
404:
description: Tracking number not found
Maintenant, nous pouvons lui demander de créer les tests d’API pour lui.
Moi à ChatGPT : « Écrivez un test d’API pour l’API de suivi FoxShipping à l’aide de RestAssured. »
import io.restassured.RestAssured
import io.restassured.response.Response;
import org.junit.BeforeClass;
import org.junit.Test;
public class FoxShippingTrackingAPITest {
private static final String API_KEY = "YOUR_API_KEY";
@BeforeClass
public static void setup() {
RestAssured.baseURI = "https://api.foxshipping.com/tracking";
}
@Test
public void testTrackShipment() {
String trackingNumber = "1234567890";
String requestBody = "{\"trackingNumber\":\"" + trackingNumber + "\",\"apiKey\":\"" + API_KEY + "\"}";
Response response = RestAssured.given().
contentType("application/json").
body(requestBody).
when().
post();
int statusCode = response.getStatusCode();
assertEquals(200, statusCode);
String responseBody = response.getBody().asString();
assertTrue(responseBody.contains(trackingNumber));
assertTrue(responseBody.contains("status"));
assertTrue(responseBody.contains("estimatedDelivery"));
}
}
Cela semble correct, mais nous devons également couvrir les cas d’erreur. Nous suivons.
Moi à ChatGPT : « Veuillez également ajouter les tests pour le scénarios d’erreur. »
import io.restassured.RestAssured
import io.restassured.response.Response;
import org.junit.BeforeClass;
import org.junit.Test;
public class FoxShippingTrackingAPITest {
private static final String API_KEY = "YOUR_API_KEY";
@BeforeClass
public static void setup() {
RestAssured.baseURI = "https://api.foxshipping.com/tracking";
}
@Test
public void testTrackShipment() {
String trackingNumber = "1234567890";
String requestBody = "{\"trackingNumber\":\"" + trackingNumber + "\",\"apiKey\":\"" + API_KEY + "\"}";
Response response = RestAssured.given().
contentType("application/json").
body(requestBody).
when().
post();
int statusCode = response.getStatusCode();
assertEquals(200, statusCode);
String responseBody = response.getBody().asString();
assertTrue(responseBody.contains(trackingNumber));
assertTrue(responseBody.contains("status"));
assertTrue(responseBody.contains("estimatedDelivery"));
}
@Test
public void testUnauthorizedRequest() {
String trackingNumber = "1234567890";
String requestBody = "{\"trackingNumber\":\"" + trackingNumber + "\",\"apiKey\":\"INVALID_API_KEY\"}";
Response response = RestAssured.given().
contentType("application/json").
body(requestBody).
when().
post();
int statusCode = response.getStatusCode();
assertEquals(401, statusCode);
String responseBody = response.getBody().asString();
assertTrue(responseBody.contains("Unauthorized request"));
}
@Test
public void testTrackingNumberNotFound() {
String trackingNumber = "INVALID_TRACKING_NUMBER";
String requestBody = "{\"trackingNumber\":\"" + trackingNumber + "\",\"apiKey\":\"" + API_KEY + "\"}";
Response response = RestAssured.given().
contentType("application/json").
body(requestBody).
when().
post();
int statusCode = response.getStatusCode();
assertEquals(404, statusCode);
String responseBody = response.getBody().asString();
assertTrue(responseBody.contains("Tracking number not found"));
}
}
Avec cela, nous avons maintenant 3 scénarios de test qui couvrent les 3 scénarios décrits dans la spécification OpenAPI du service de suivi FoxShipping. Celles-ci constituent une base solide que vous pouvez utiliser comme point de départ et développer en ajoutant vos propres personnalisations et des cas de test supplémentaires.
Sur quels autres sujets liés à l’utilisation de ChatGPT dans les tests aimeriez-vous en savoir plus ? S’il vous plaît laissez vos suggestions dans les commentaires ci-dessous et je vais écrire à leur sujet.
N’hésitez pas à me suivre sur Développeurweb.com et sur LinkedIn pour plus de contenu comme celui-ci.
PS J’ai généré l’image de cet article que vous avez vu dans l’en-tête en utilisant DALL-E 2 d’OpenAPI en lui demandant « une programmation de paire d’entités AI avec un développeur humain ». C’est plutôt bon!
Veuillez noter qu’il n’est pas recommandé de coller le code propriétaire privé de votre entreprise dans ChatGPT pour des raisons de sécurité, sauf si vous avez une bonne raison et la permission de le faire ! Le but de cet article est de démontrer la puissance de la nouvelle technologie d’IA qui pourrait perturber le paysage des tests. Si vous recherchez des recettes spécifiques de génération de tests pour votre équipe, n’hésitez pas à me contacter directement.