Herzlich willkommen auf dem Blog der exensio GmbH

exensio ist ein unabhängiges Software-Unternehmen von erfahrenen IT Beratern und Architekten. Zu unseren Kunden zählen namhafte deutsche Großunternehmen.

exensio verbessert das Kommunikations- und Informationsmanagement von Unternehmen. Auf Basis sinnvoller und zweckmäßiger Technologien erarbeiten wir flexible und übergreifende Lösungen für webbasierte Informationssysteme. Abhängig von den Kundenanforderungen realisieren wir Web Applikationen sowie Lösungen auf Basis von Web Content Management- und Portalsystemen. Integrativ, wirtschaftlich und anwenderfreundlich!

Hier gelangen Sie zur exensio GmbH.

Mittwoch, 6. Januar 2016

REST API testen mit Node.js, Mocha und Chakram - auch für Java Entwickler

In diesem Blog-Post möchte ich aufzeigen, wie man Node.js [1], Mocha [2] und Chakram [3] für das Testen von REST APIs benutzt und warum Selbiges auch für Java-Entwickler, die eigentlich gar nichts mit Node.js am Hut haben, interessant sein kann.

So benutzen wir JUnit für Unit-Tests und das Gespann Geb / Spock für Integrations- bzw. Funktionale Tests. Diese werden entweder während der Programmierung innerhalb von IntelliJ gestartet oder über den täglichen Build mittels Jenkins (Continuous Integration) ausgeführt.

Sollen die Tests jedoch direkt in der Infrastruktur des Kunden laufen, so scheitert dieser Ansatz. Die funktionalen Tests des Web-Frontends kann man noch per Testspezifikation und manuellen Tests abdecken, aber wie sieht es bei einer REST API aus? Wollte man hier händisch vorgehen, könnte man dies mit vorbereiteten Testdaten bewerkstelligen, die zusammen mit cURL Aufrufen benutzt werden. Geht das nicht auch automatisiert?

Folgende Eigenschaften sollte ein automatisiertes Framework erfüllen:
  • Das Framework sollte nicht aus dem Java-Stack kommen. Hierdurch kann man sicherstellen, dass sich nicht potentielle Java-Fehler in die REST-Schnittstelle »einschleichen«.
  • Es sollte auf unterschiedlichen Betriebssystemen unkompliziert installierbar sein. So fand ich für Python Lösungen, diese waren jedoch unter Windows nicht einfach aufzusetzen.
  • Eine Validierung von komplexen Datentypen wie UUIDs oder Datumswerte nach ISO 8601 [4] sollte möglich sein.
  • Die Formulierung der Testfälle sollte simpel und deklarativ sein. 
  • System-Tests sollen möglich sein, sprich die REST-API sollte nicht nur innerhalb des Tomcats getestet werden, sondern auch über den als Load-Balancer vorgeschalteten Apache-Web-Server.
Schließlich bin ich bei Chakram im Kontext von Node.js und Mocha fündig geworden. Eigentlich wollte ich nicht mit Node.js und Javascript arbeiten, aber nach einer kurzen Einarbeitungszeit fand ich das Ganze nicht mehr so schlecht und das Validator-Package [5] von Node.js nahm mir schlussendlich sehr viel Arbeit bei der Validierung ab.

Die Modularisierung und Wiederverwendung von Javascript-Code innerhalb von Node.js kostete mich dann doch etwas Zeit, deshalb folgt im Souce-Code unten meine Utility-Methode validateHTTPMethods().


Mittels require wird die utility.js dann in den Test-Cases benutzt. Des Weiteren sieht man in folgendem Source-Code sehr schön wie einfach und deklarativ Test-Cases geschrieben werden können:

Fazit

Meines Erachtens eignet sich das Gespann Node.js, Mocha und Chakram sehr gut für das Aufsetzen von deklarativen und kompakten Testcases. Vor allem das Validator-Plugin ermöglicht die einfache Validierung von unzähligen Datentypen.

Links

[1] https://nodejs.org/en/
[2] https://mochajs.org/
[3] http://dareid.github.io/chakram/
[4] https://en.wikipedia.org/wiki/ISO_8601
[5] https://www.npmjs.com/package/validator

Keine Kommentare:

Kommentar veröffentlichen