Testdaten einfach generieren mit Fakerjs

Dienstag, 19.12.2023

Automatische Generierung von plausiblen Testdaten für Entwicklertests mit Fakerjs.

Entwicklertests sind ein wesentlicher Bestandteil moderner Softwareentwicklung. Häufig werden die hierfür benötigten Testdaten vom Entwickler erfunden und sind wenig plausibel.  

Letztens habe ich einen Entwicklertest für eine interne Angular-Anwendung geschrieben. Es ging um die Highscore-Seite einer Anwendung, mit der sich spielerisch viadee-Mitarbeiter:innen einem Foto zuordnen lassen. Wer mehr Mitarbeiter:innen erkennt, bekommt einen höheren Highscore.  

Für die Highscore-Tabelle brauchte ich Testdaten: Spielernamen, Scores, Rankings, E-Mail-Adressen, Ids usw. Die Testdatensätze habe ich mir selbst aus den Fingern gesogen und sie sahen in etwa so aus:  

Man erkennt bereits, dass ich genau wusste, welche Daten plausibel sein mussten und welche nicht. Die E-Mailadressen gehörten nicht dazu. Gleichzeitig sieht man sehr deutlich, dass mir die Kreativität für die Testdaten gefehlt hat, vieles ist nur durchnummeriert. Zu allem Überfluss brauchte ich für meinen Test auch noch mindestens elf Datensätze, zehn die angezeigt werden und einer, der nicht mehr in der Tabelle auftaucht.  

Ich habe den Test so geschrieben und dann nochmals draufgeschaut und mir gedacht: „Das muss doch besser gehen!“.  

Testdatengenerierung mit Fakerjs 

Fakerjs ist ein npm-Paket mit dem Testdaten generiert werden können. Es ist ein JavaScript-Port der Perl-Bibliothek Faker. Das Paket kann per npm installiert werden:

npm install @faker-js/faker --save-dev.

Fakerjs sollte als Dev-Dependency installiert werden, da es nur in Tests verwendet wird und nicht Teil der produktiven Anwendung ist.  

Das faker-Objekt kann ganz einfach importiert und genutzt werden: 

Und schon haben wir unsere ersten Testdaten generiert. Fakerjs ist dabei plattformunabhängig, es lässt sich sowohl in Tests für Node.js-Backends oder einem Frontendframework wie z. B. Angular verwenden. Darüber hinaus bietet die Bibliothek standardmäßig Unterstützung für TypeScript 

Wie sich an dem .person bereits erkennen lässt, bietet Fakerjs jede Menge Möglichkeiten zur Generierung von personenbezogenen Daten. Doch nicht nur personenbezogene Daten können wir generieren lassen, Fakerjs unterstützt jede Menge weitere Typen, wie etwa Produkte, Orte und vieles mehr. Eine komplette Auflistung ist in der Dokumentation zu finden.  

Häufig wollen wir jedoch nicht nur irgendwelche Testdaten haben, sondern diese durch Parameter genauer beschreiben. Dies können wir in Fakerjs tun: Vielen der Funktionen können optionale Parameter übergeben werden, um die gewünschten Testdaten genauer zu spezifizieren. So kann etwa für person.firstName() das Geschlecht der Person übergeben werden. 

Testdaten für komplexe Objekte generieren 

Um mein eingangs beschriebenes Problem zu lösen, habe ich Fakerjs installiert und eine Factory für meine Highscores geschrieben: 

Die Funktion createScore nimmt nur noch die Platzierung der Highscore entgegen und generiert mit Hilfe von Fakerjs den kompletten Highscore-Datensatz.

Reproduzierbarkeit erzwingen 

Da ich in meinem Test nur prüfen möchte, ob die Highscores gerendert werden, ist eine Reproduzierbarkeit der Testdaten nicht unbedingt erforderlich. Soll die Generierung der Testdaten immer dasselbe Ergebnis liefern, kann mit der Funktion seed() ein Seed angegeben werden. Dieser sorgt für reproduzierbare Ergebnisse.  

Hinweis: Dies funktioniert natürlich nur so lange, wie darunterliegenden Datensätze, die Fakerjs verwendet, gleichbleiben. Mit einer neuen Version der Bibliothek können sich die generierten Werte ändern.  

Weitere Informationen zur Reproduzierbarkeit stehen in der Dokumentation.

Lokalisierte Testdaten generieren

Die Daten von Fakerjs werden standardmäßig im englischen Format generiert. Die Daten sind jedoch in über 60 Sprachen verfügbar. So kennt die deutsche Lokalisierung etwa Nachnamen wie Müller oder deutsche Formate für Postleitzahlen. Das folgende Beispiel zeigt die Nutzung der deutschen Lokalisierung:  

Eindeutige Testdaten erzeugen

In der Regel sind die von Fakerjs generierten Datensätze eindeutig genug. Möchte man sicherstellen, dass ein Wert wirklich nur einmal generiert wird, kann man das Package enforce-unique verwenden. Das folgende Beispiel zeigt die Nutzung mit Fakerjs: 

Fazit

Mit Fakerjs lassen sich einfach Testdaten generieren. Allerdings ist eine Nutzung außerhalb von Tests nicht empfehlenswert, da das Paket aufgrund seiner Testdaten eine erhebliche Größe aufweist. Übrigens: Fakerjs ist nur ein Port der Perl-Bibliothek Faker. Es gibt auch Ports für Java, Python und weitere Programmiersprachen. 


 

Sie brauchen Hilfe beim Test Ihrer Webanwendung? Wir helfen Ihnen gerne.

Testen von Frontends für Entwickler:innen - Zum Workshop

 


 


zurück zur Blogübersicht

Diese Beiträge könnten Sie ebenfalls interessieren

Keinen Beitrag verpassen – viadee Blog abonnieren

Jetzt Blog abonnieren!

Kommentare

Christian Siebmanns

Christian Siebmanns

Christian Siebmanns ist Berater bei der viadee IT-Unternehmensberatung. Schwerpunkt seiner Arbeit ist der Einsatz in verschiedenen Kundenprojekten im Webumfeld. Christian ist Experte für Java und TypeScript. Christian Siebmann bei LinkedIn