Un terrain de jeu Full Stack (1/2) : Composants

  • posté le
  • par ESENS

Adrian, Automaticien chez ESENS, nous présente son environnement d'entraînement pour l'automatisation de test dans le cadre de sa mission chez l'un de nos clients, leader mondial du secteur de l'hospitalité.

Introduction

En tant qu' Automaticien chez ESENS, je travaille en étroite collaboration avec les équipes de développement Web et Mobile de notre client actuel, leader mondial du secteur de l'hospitalité.

Dans ce contexte, je dois être en mesure de comprendre et d'analyser le travail de ces équipes et pour ce faire, j'avais besoin d'un environnement d'entraînement qui me serve d’environnement de test afin d'améliorer mon travail sur site de façon continue.

Pour mettre cet environnement en place, j’ai opté pour des solutions gratuites, faciles à implémenter et accessibles depuis chez moi.

Ces solutions m’ont permis d’avoir accès rapidement à un environnement de développement, de test et d’intégration continue pour des applications Web et Mobiles, et des WebServices comme une API REST JSON.

Ce 'terrain de jeu' m’aide au quotidien. J’apporte des modifications à mon travail depuis la maison, je mets en place et j’optimise les procédés dans mon environnement à moi. Une fois que quelque chose de positif en sort, je l'implémente chez notre client.

Au bout de 6 semaines de mission et 4 semaines de mise en place, j’avais déjà implémenté plusieurs solutions de gestion des rapports de tests et d’optimisation de leur écriture, ainsi que des idées pour l’intégration continue avec GitLab CI.

Dans cet article, rédigé en deux parties, je vous partage dans un premier temps les composants de mon 'terrain de jeu', et nous verrons, dès la semaine prochaine, comment le mettre en place.

Un environnement de développement full stack

Dans mon environnement de développement, j’ai à ma disposition les outils suivants :

  • Un outil de gestion de code source: GitLab.
  • Une base de données NoSQL (MongoDB) locale pour le développement
  • Une base de données NoSQL (MongoDB) gratuite via mLab

Une BDD dédiée pour la recette et une pour la production (comme dans un environnement professionnel)

  • Une API REST JSON écrite en Node.js en local
  • Cette même API hébergée gratuitement sur Heroku

Une version recette et une version production également

Un site web en Node.js également

Aussi en local et sur Heroku (recette + production)

  • Une application Android (locale, avec déploiement prévu bientôt)

L’avantage de cette stack, c’est que pratiquement toute la logique va se faire du côté de l’API. Dans les applications clients Web ou Mobiles, il n'y a plus qu’à gérer l’UX et à faire des appels sur l’API.



Un terrain de jeu pour les tests automatisés


Il s'agit ici d'automatiser trois types de tests :

  • Des tests fonctionnels et end-to-end avec Selenium pour les applications Web
  • Des tests d’appels sur API (tests verticaux et scénarios end to end) avec REST-assured.
  • Des tests fonctionnels et end-to-end avec Appium pour Android.

Web (Selenium)

En utilisant le PAge Object Design PAttern on peut écrire des tests très parlants:

   @Test(
          description = "I can CRUD clack",
          groups = { "e2e", "dev", "rec", "prod" }
  )
  public void testCRUDClack() throws IOException {
      new ClacksCreatePage(getDriver(), getEnv())
              .openPage()
              .createEmpty();
      setClackId(new ClacksListPage(getDriver(), getEnv())
              .getLastClackId());
      new ClacksDetailsPage(getDriver(), getEnv(), getClackId())
              .openPage()
              .verifyContent();
      new ClacksUpdatePage(getDriver(), getEnv(), getClackId())
              .openPage()
              .addFields()
              .submit();
      new ClacksListPage(getDriver(), getEnv())
              .openPage()
              .gotoDeleteLastClack();
      new ClacksDeletePage(getDriver(), getEnv(), getClackId())
              .accept();
  }


Grâce à Selenium on peut écrire des tests système, des tests d’intégration ou des tests fonctionnels sur les pages du site web.






API (REST-assured)


Avec REST-assured, on peut faire des appels sur l’API des GET, des PUT des POST, DELETE et vérifier les réponses.

   @Test(
          groups = {"ep"},
          description = "POST /clacks => 201"
  )
  public void postClacksHasStatusCodeCreated() {
      Clack newClack = new Clack();
      Gson gson = new Gson();
      String json = gson.toJson(newClack);
      given()
          .log().body()
      .with()
          .header("Content-Type", "application/json")
          .body(json)
      .when()
          .post(getAPI_URI() + "/clacks/")
      .then()
          .log().body()
      .and()
          .statusCode(201);
  }


Android (Appium)

Appium est très simple d’utilisation une fois qu’on est passé par Selenium puisqu’il est basé sur les même drivers. On peut aussi définir des Page Objects pour une meilleure maintenance des tests.

@Test(
      groups = {"int"},
      description = "When I click delete I am on Clacks List Page",
      dependsOnMethods = {"toClacksListPageWhenGoingBack"}
)
public void toClackListPageOnClickDelete() {
  new ClacksListPage(mobileDriver)
          .gotoDetailsFirstClack();
  new ClackDetailsPage(mobileDriver)
          .delete();
  String activity = mobileDriver.currentActivity();
  Assert.assertTrue(activity.contains("ClacksListActivity"));
}
@Test(
      groups = {"unit"},
      description = "Clack Details Page have ID text view"
)
public void testDetailsPageHasId() {
  new ClackDetailsPage(mobileDriver)
          .verifyIdIsPresent();
}

Pour lire la suite de cet article, c'est par ici !

Article rédigé par Adrian | Retrouvez tous nos articles sur le Blog ESENS

Vous êtes à la recherche d'un nouveau challenge ? Rejoignez l'équipe ESENS en postulant à nos offres d'emploi !

PARTAGER CET ARTICLE