Ceinture noire Karate 🥋 en tests d’API REST

bdxjug

Nico et Benoit

lectra
versalis

Problématique

karate pbk

Solution 1 : JaxRs Client

@Test
public void should_process_order_and_then_cancel() throws Exception {
    // Create new Order
    final String orderId = IntegrationTestCase.newProductOrderId();

    // Process Order
    final Response response = IntegrationTestCase.newClient().path("/product-orders/" + orderId)
            .request()
            .put(Entity.json("{\"reference\" : \"ABTYD\"}"));
    assertThat(response.getStatusInfo()).isEqualTo(Status.OK);

    // Cancel Order
    final Response response = IntegrationTestCase.newClient().path("/product-orders/" + orderId)
            .request()
            .delete();
    assertThat(response.getStatusInfo()).isEqualTo(Status.NO_CONTENT);
}

Maintenance et écriture pénible

Verbeux

Besoin de commentaires

Solution 2 : Rest Assured

@Test
public void lotto_resource_returns_200_with_expected_id_and_winners() {

  when().
    get("/lotto/{id}", 5).
  then().
    statusCode(200).
      body("lotto.lottoId", equalTo(5),
      "lotto.winners.winnerId", containsOnly(23, 54));
}

Plus élégant avec un DSL en java

mais reste du code, et encore un peu verbeux

Une autre solution !

Karate

karate logo
Web-Services Testing Made Simple.
Peter Thomas (Intuit)

@KarateDSL

  • Février 2017 : 1ère release (0.1.2)
  • Juillet 2018 : 0.8.0

Hello Cats

karate hello world

Standalone Runner

start demo
java -jar karate.jar -t pokemon.feature

Tests avec Karate

DSL Gherkin pour écrire des tests d’APIs HTTP MAIS ce n’est pas du BDD !

cucumber
  • ✍️ Facile à écrire et à maintenir
  • 👌 Pas de glue à coder
  • ⏱️ Rapide à exécuter (en parallèle)
  • 📄 JSON first class citizen

Démo dans l’IDE

demo

Documentation

documentation

Retour d’expérience

👍

  • Plus de 70 features pour 139 endpoints couverts
  • ⏱ < 1 min en IC
  • Intégration à l’IDE

⚠️

  • Compatibilité javascript limitée (🦏 Nashorn)
  • 💥 Breaking change lors des montées de version

Pour aller plus loin

kick pain
  • 🤥 Mock Servlet : pas besoin de démarrer un vrai serveur
  • 📑 Intégration à Spring REST Docs
  • 🖥️ Import scenario Postman
  • 🤮 Supporte aussi SOAP (XML)
  • 🔜 Utilisation dans scenario Gatling

Gatling

Utilisation des .feature comme source de scénario Gatling

chunli gatling

Travaux futurs

Questions ?

salute

Le code et les slides : /ncomet/karate-conf2018

qrcode

/