Skip to content

Latest commit

 

History

History
197 lines (139 loc) · 5.1 KB

slides.adoc

File metadata and controls

197 lines (139 loc) · 5.1 KB

Ceinture noire Karate 🥋 en tests d’API REST

devfesttoulouse

Nico et Benoit

[twitter] @NicolasComet
[github] https://github.com/ncomet
[twitter] @binout
[github] https://github.com/binout

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);
}

Boring

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));
}

Boring

Plus élégant avec un DSL en java

mais reste du code, et encore un peu verbeux

Karate Large

Une autre solution !

Karate

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

[twitter] @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

@KarateDSL as a UI automation framework ?

I think this may *actually* work ! pic.twitter.com/6j47L3kLQo

— Peter Thomas (@ptrthomas) 24 septembre 2018

working through the "Cucumber Exit" for @KarateDSL code-named CUKEXIT :Phttps://t.co/fao8Fn5qRM

— Peter Thomas (@ptrthomas) 29 juillet 2018

Merci

salute

Le code et les slides : [github]/ncomet/karate-conf2018

qrcode