Slide 1

Slide 1 text

Comment nous utilisons Kotlin et Gradle pour faire évoluer la communauté WireMock

Slide 2

Slide 2 text

Source: Holy Grail des Monty Python Attention Oleg va parler français!

Slide 3

Slide 3 text

3 https://instagram.com/asciidwarf

Slide 4

Slide 4 text

> whoami @oleg_nenashev oleg-nenashev Dr. Nenashev / Mr. Jenkins Architecte de communauté Bricoleur d'automatisation #RussiansAgainstPutin #StandWithUkraine 1.x

Slide 5

Slide 5 text

5 Developer Productivity Engineering (DPE)

Slide 6

Slide 6 text

6 gradle.com/developer-productivity-engineering Developer Productivity Engineering (DPE)

Slide 7

Slide 7 text

Les Trois “Moque-taires” - Tous comme un, un comme tous (sic!)

Slide 8

Slide 8 text

wiremock.org wiremock.org

Slide 9

Slide 9 text

wiremock.org IF func(requête) THEN func(réponse) * * La réalité est BIEN plus compliquée WireMock JSON: Client library réponse requête Client App Serveur de l’API HTTP/2

Slide 10

Slide 10 text

WireMock en Java wiremock.org/docs/stubbing

Slide 11

Slide 11 text

Capacités de WireMock wiremock.org/docs

Slide 12

Slide 12 text

No content

Slide 13

Slide 13 text

13

Slide 14

Slide 14 text

Écosystème de WireMock wiremock.org/docs

Slide 15

Slide 15 text

Écosystème de WireMock & JVM ● Java ● Kotlin ● Scala ● Groovy ● Clojure ● (?)Android ● JUnit 4/5 ● Testcontainers ● Sprint Boot ● Spring Cloud Contract ● Quarkus ● Maven/Gradle ● Spock ● Pact

Slide 16

Slide 16 text

Plugin WireMock pour Gradle 16 William-Hill-Online/wiremock-gradle-plugin

Slide 17

Slide 17 text

wiremock.org/docs/solutions/kotlin

Slide 18

Slide 18 text

DSL Bindings pour Kotlin 18 wiremock/kotlin-wiremock par Marcin Ziolo wiremock.get { url equalTo "/users/1" } returns { statusCode = 200 header = "Content-Type" to "application/json" body = """ { "id": 1, "name": "Bob" } """ }

Slide 19

Slide 19 text

Adaptateur pour Kotest 19 kotest/kotest-extensions-wiremock class SomeTest : FunSpec({ val customerServiceServer = WireMockServer(9000) listener(WireMockListener(customerServiceServer, ListenerMode.PER_SPEC)) test("let me get customer information") { customerServiceServer.stubFor( WireMock.get(WireMock.urlEqualTo("/customers/123")) .willReturn(WireMock.ok()) ) val connection = URL("http://localhost:9000/customers/123") .openConnection() as HttpURLConnection connection.responseCode shouldBe 200 } // ... }) https://kotest.io

Slide 20

Slide 20 text

Plugins de WireMock 20 wiremock/ecosystem

Slide 21

Slide 21 text

21

Slide 22

Slide 22 text

Les Trois “Moque-taires” - Tous comme un, un comme tous

Slide 23

Slide 23 text

23 Notre d'Artagnan Gradle peut vous aider

Slide 24

Slide 24 text

Nous utilisons Gradle dans WireMock ● build.gradle dans WireMock Java ○ wiremock/wiremock/blob/master/build.gradle ● la majorité des plugins ● la majorité des intégrations JVM ● outils de développement 24

Slide 25

Slide 25 text

Et Kotlin! La Déclaration d'Expérience des Développeurs, l'île de Kotlin, 2023 25 blog.gradle.org/kotlin-dsl-is-now-the-default -for-new-gradle-builds ● 2023 - Kotlin est le langage par défaut pour les définitions Gradle ● Scripts, Plugins, Convention Plugins

Slide 26

Slide 26 text

26 docs.gradle.org/current/samples/ sample_convention_plugins.html Encapsulation et partage pour les projets Gradle

Slide 27

Slide 27 text

Convention Plugins en Gradle Vous pouvez partager la logique ● Dans votre project multi-repo 27 docs.gradle.org/current/samples/ sample_publishing_convention_plugins.html

Slide 28

Slide 28 text

Convention Plugins en Gradle Vous pouvez partager la logique ● Dans votre projet multi-repo ● … ou entre l’autres repositories 28 plugins.gradle.org

Slide 29

Slide 29 text

Convention Plugins en Gradle Vous pouvez partager la logique ● Dans votre projet multi-repo ou entre les repositories ● En DSL Kotlin/Groovy 29 D S L

Slide 30

Slide 30 text

Convention Plugins en Gradle Partagez la logique ● Dans votre projet multi-repo ou entre les repositories ● En DSL Kotlin/Groovy ● Le libraire Kotlin plein github.com/zapzombies/gradle-convention-plugins

Slide 31

Slide 31 text

WireMock Convention Plugin wiremock/gradle-wiremock-extension-plugins ● Processus Gradle unifié ● Gestion des dépendances unifié ● Shading pour la bibliothèque WireMock et WireMock Standalone ● Generation des POMs Maven ● Automatisation des releases vers Maven Central 31

Slide 32

Slide 32 text

Definition minimal 32 build.gradle.kts:

Slide 33

Slide 33 text

Configuration du plugin 33 wiremock/gradle-wiremock-extension-plugins gradle.properties

Slide 34

Slide 34 text

Customisation du plugin 34 wiremock/gradle-wiremock-extension-plugins build.gradle.kts:

Slide 35

Slide 35 text

Pipeline unifié dans GitHub Actions 35 wiremock/gradle-wiremock-extension-plugins

Slide 36

Slide 36 text

Examples ● github.com/wiremock/gradle-wiremock-extension-plugins ● WireMock Faker Extension ● WireMock State Extension 36

Slide 37

Slide 37 text

37

Slide 38

Slide 38 text

Les conclusions ● Kotlin est bon pour encapsuler la complexité de votre automatisation ● Gradle peut être simple pour les utilisateurs finaux ● Considérez les plugins de convention et les catalogues de versions 38

Slide 39

Slide 39 text

References ● wiremock.org/docs/solutions/kotlin/ ● github.com/wiremock/gradle-wiremock-extension-plugins ● Démos: retrouvez-moi au stand Gradle! 39

Slide 40

Slide 40 text

40

Slide 41

Slide 41 text

41 Discutez la productivité des développeurs avec @jbaruch! Stand 39

Slide 42

Slide 42 text

GitHub: oleg-nenashev Twitter: @oleg_nenashev Questions? Booth, #B01 Gradle or WireMock Community Slacks