Facebook
Twitter
Google+
Kommentare
4

Bastelstunde: Testdaten

Gute Testdaten oder Generatoren sind nicht leicht zu finden und öffentlich zugängliche Daten sind für die eher speziellen Anforderungen oftmals nicht ausreichend. Bereits vorhandene, echte Daten sollten hingegen aus Gründen der Sicherheit und des Datenschutzes nur sehr überlegt verwendet werden.

Manche Tests müssen auf unterschiedlichen Systemen durchgeführt und reproduzierbar sein, die zugrunde liegenden Daten gleich sein. Und vielleicht möchte man auch nicht tausende von Dateien via USB-Stick oder FTP verteilen müssen.

GENERATEDATA.COM

Einen Testdaten-Generator kann man unter http://www.generatedata.com finden. Online können bis zu 200 Testdatensätze generiert und in verschiedenen Formaten gespeichert werden. Alternativ kann man sich das Programm herunterladen und arbeitet ohne Beschränkungen lokal, benötigt aber PHP und MySQL mit einem Webserver.

Die Testdaten lassen sich sehr fein konfigurieren, werden zufällig generiert, sind also nicht reproduzierbar und werden standardmäßig in einer einzelnen Datei gespeichert.

Ein einfacher Testdatengenerator

Wer mehr braucht, möglicherweise mit einzelnen Dateien, kann dies mit einem einfachen Programm in PHP erreichen und reproduzierbare Testdaten bei Bedarf generieren. Einzige Voraussetzung ist PHP mit oder ohne Webserver. Ein sehr einfaches Grundgerüst, bewusst “barebone” soll zur individuellen Anpassung soll dargestellt werden – kein Entwickler mag fertige Lösungen.

Die Testdaten

Die Daten sollen sich wesentlich voneinander unterscheiden, müssen aber reproduzierbar, bei einer Wiederholung immer gleich sein. Die Inhalte müssen keine reale Grundlage haben, wohl aber definierte Merkmale aufweisen.

Beispielhaft wollen wir XML erzeugen, CSV-Dateien, Textdateien oder HTML würden ähnlich gebaut.

Um unterschiedliche, aber dennoch reproduzierbare Daten generieren zu können benötigen wir eine feste Basis. Eine gute Basis für umfangreiche Testdaten sind literarische Texte. Als Quelle kann “Project Gutenberg” empfohlen werden, beispielsweise „THE SAILOR’S WORD-BOOK“, eine fast 2MB große Text-Datei mit weit über 10.000 Absätzen, bzw. Passagen.

Drei Schritte zur „Bare Bones“-Lösung

  1. In einem ersten Schritt wird ein Text nach festen Regeln zerteilt, beispielsweise nach Absätzen.
  2. In einem zweiten Schritt werden die so entstandene Passagen weiter aufbereitet indem zusätzliche Informationen nach definierten Regeln daraus generiert werden.
  3. In einem dritten Schritt wird jede Passage mit Ihren Informationen in eine eigene Datei geschrieben.

Jeder der drei Schritte wird durch eine einfache Klasse abgebildet.

Die erste Klasse liest die gesamte Textdatei ein und bricht sie über einen festgelegten regulären Ausdruck, der sich im Text oft genug wiederfinden muss, auseinander und schreibt die Teile in ein Array. Wer mehr auf die Ressourcen achten muss, sollte an dieser Stelle anders vorgehen und die Textdatei beispielsweise zeilenweise auslesen, bis das Kriterium für eine abgeschlossene Passage gefunden ist und in der Bearbeitung dann entsprechend fortfahren.

Der zweiten Klasse wird ein Passage übergeben, die nach einfachen Regeln zu weiteren Informationen “aufgeblasen” wird: Alle Elemente werden gezählt, zu einem Array aufgebrochen, eine Id wird erzeugt, ein Anriss festgelegt. Eigene Anforderungen sind schnell umgesetzt.

Es ist unglaublich wieviel eigentlich sinnlose Daten man aus einem Text erzeugen kann…

Die Daten werden werden nur als Informationen angelegt, eine Struktur als HTML oder XML bekommen sie nicht.
Unbenommen ist es, sich so eine Struktur mit aufbauen zu lassen, man verliert dann aber etwas Flexibilität.

Unsere dritte Klasse erhält “Schlüssel-Wert” oder “Schlüssel-Array” Kombinationen, schreibt diese in ein XML-Objekt und speichert über eine Methode eine gültige XML ab. Ungültige Daten werden einfach verworfen. Natürlich kann man genauso in eine HTML-Datei oder eine Datenbank schreiben und die Klasse beliebig verfeinern.

Zu guter Letzt brauchen wir noch eine Steuerung wie sie in einfacher Form in der Beispieldatei integriert ist, müssen je nach Betriebssystem und Art des Aufrufs auf die Pfade achten und schon können wir unsere Testdaten vor Ort und vor allem “immer frisch” generieren – viel Spaß, vor allem beim weiterbasteln!

Über den Autor

Stephan Elter

Stephan Elters Homepage
Kommentare

4 Comments

  1. Sehr schöner Tipp, danke! Für Namen usw. ist das eine sehr praktische Lösung.

    Richtig spannend wird es m.E., wenn man Zahlen generieren muss, die einer gewissen Verteilung unterliegen. Ein kleines Beispiel: Einkaufskörbe sind halt nicht mt_rand(1,10000), sondern irgendwie verteilt. Da gibt es eine Menge Literatur zu.

    Das Thema Generierung von realistischen Pseudodaten wird dann zur Wissenschaft.

    Reply

Leave a Comment.

Link erfolgreich vorgeschlagen.

Vielen Dank, dass du einen Link vorgeschlagen hast. Wir werden ihn sobald wie möglich prüfen. Schließen