Faker – kleines Tool mit großer Wirkung

Avatar von Diana Hartmann

 

Es sind oft die kleinen Dinge, die einem das Leben so viel einfacher machen können. Bei Faker ist es ebenso. Richtig eingesetzt, kann einem der Einsatz dieser PHP-Bibliothek einiges erleichtern.
Dabei lehnt sich die Bibliothek an Data::Faker von Perl und faker für ruby an. Das PHP-Framework Laravel liefert Faker gleich mit. Für Faker wird mindestens PHP 5.3.3 benötigt.

Warum Faker?

Wer hat das nicht selbst schon einmal erlebt: Die Anwendung für den Kunden ist fertig, die Entwicklungsarbeit gemacht. Nun fehlt es noch an letzten Tests mit großen Datenmengen. Die Datenbank ist noch leer, die Datenmassen fehlen und gerade bei größeren Konzernen dauert es mitunter länger, bis die Fachabteilungen alle zu Rande kommen und brauchbare Datenmengen liefern mit denen getestet werden können. Und jetzt einzelne Inhalte nach und nach manuell einzupflegen, verschlingt wertvolle Zeit.

Was nun?

Mit Faker lassen sich alle möglichen Platzhalter erstellen und bequem über verschiedenste Parameter beeinflussen. Lange Texte, kurze Texte, einzelne Wörter, Dateien insbesondere Bilddateien, Barcodes, personenbezogene Daten wie z.B. Adressen, Telefonnummern, Datumswerte, URLs, E-Mail-Adressen und noch Einige mehr liefert Faker zur Auswahl.

Was sind die ersten Schritte?

Über Composer kann Faker ganz bequem installiert werden:

composer require fzaninotto/faker

Man kann dann entweder den mitgelieferten Autoloader benutzen

require_once '/path/to/Faker/src/autoload.php';

oder einen anderen Autoloader eines Frameworks wie Symphony2 beispielsweise benutzen, vorausgesetzt dieser ist kompatibel zum PSR-0 Standard.
Mit Hilfe der Factory lässt sich eine Faker-Instanz erzeugen:

$faker = Faker\Factory::create();

Nun lässt sich mit Aufrufen wie

echo $faker->name;
echo $faker->email;

beispielsweise direkt ein zufälliger Name oder Text erzeugen.

Packt man diese Aufrufe dann in eine Schleife über x Iterationen und befüllt damit zum Beispiel noch eine Datenbanktabelle, erhält man ganz fix eine fertig befüllte Datenbank, die valide, zufällige Testdaten enthält!

Localization

Nun erstellt Faker nicht nur zufällige Daten, sondern man kann die Daten passend für ein jeweiliges Land erhalten. Hierzu übergibt man einfach bei der Erzeugung ein passendes Locale:

$faker = Faker\Factory::create(‘de_DE’);

Hier sind teilweise echte länderspezifische Inhalte, wie z.B. eine Reihe deutscher Städtenamen (Beispiel: ‘Berlin’) hinterlegt, sowie bestimmte Formatierungen, die im jeweiligen Land gängig sind, wie z.B. ‘Straße’ in der Langform und ‘str.’ als Suffix oder ein 5-stelliger Postleitzahlencode in Deutschland. Auch gängige Abkürzungen zur Bildung eines Firmennamens oder Vereins, wie ‘GmbH’ oder ‘e.V.’ sind zu finden. Wichtig sind natürlich vor allem gültige Formatierungen für Telefonnummern oder auch E-Mail-Adressen etc.

Erweiterungen

Und wie sieht es mit Spezialfällen aus? Faker lässt sich sehr einfach erweitern und an die eigenene Bedürfnisse anpassen. Man kann z.B. die Basis-Provider-Klasse folgendermaßen erweitern:

class Superheld extends \Faker\Provider\Base {
    
    protected static $superheld = array(
        ‘Superman’,
        ‘Batman’,
        ‘Flash’
    );

    public function superheld() {

        return static::randomElement(static::$superheld);
    }
}

Wurde die Datei Superheld.php dann an der selben Stelle wie die des Autoloaders eingebunden

require_once 'Superheld.php';

kann man folgendermaßen vorgehen:
Zuerst wird ein Faker Generator erzeugt

$faker = new Faker\Generator();

dem dann alle benötigten Provider hinzugefügt werden können, z.B.:

$faker->addProvider(new Faker\Provider\Lorem($faker));
$faker->addProvider(new Faker\Provider\Superheld($faker));

Damit kann an benötigter Stelle einfach

$faker->superheld;

aufgerufen werden.

Anmerkung:

Die obige Erzeugung der Instanz über die Faker-Factory entspricht der Erzeugung eines Generators mit Standard-Providern!

Modifikatoren

Desweiteren gibt es noch folgende spezielle Modifikatoren, die Faker anbietet: unique(), optional() und valid().
Mit unique() werden Dopplungen vermieden, z.B. kommt hierbei keine Zahl doppelt vor:

for ($i=0; $i < 10; $i++) { 

    echo $faker->unique()->randomDigit;
}

Bei optional() kann auch ein NULL-Wert vorkommen:

for ($i=0; $i < 10; $i++) { 

    echo $faker->optional()->randomDigit;
}

Und mit Hilfe von valid() werden nur valide Werte akzeptiert, die durch einen übergebenen Validator beeinflusst werden können, wodurch ein solcher Aufruf stattfindet:

$faker->valid($evenValidator)->randomDigit;

Dies sind aber nur die einfachsten Anwendungen der Modifikatoren. Sie können durch weitere Übergabeparameter noch eine gute Reihe von Anwendungsfällen abdecken.

Weitere Infos

Wen der Einsatz von Faker noch detaillierter interessiert, dem sei das Github Repo empfohlen, hier wird auch sehr viel dokumentiert: https://github.com/fzaninotto/Faker

Fazit

Die Einstiegshürde für Faker ist durch die einfache Installation über Composer und den sehr simpel gehaltenen Grundaufbau sehr niedrig, so dass man äußerst schnell zu sehr effizienten und validen Testdaten in großen Mengen kommen kann. Auch Datenbanken sind hierüber fix befüllt. Somit eignet sich die kleine Bibliothek für große Tests sehr gut. Auch durch die breite Erweiterbarkeit lassen sich viele Szenarien und eigene Spezialfälle durch ein paar Anpassungen sehr schnell und gut abbilden.

Links:

https://github.com/fzaninotto/Faker

http://search.cpan.org/%7Ejasonk/Data-Faker-0.07/

https://rubygems.org/gems/faker

https://laravel.com

In eigener Sache …

Mit WebAssembly die Kosten für die Wartung Deiner Cloud-Anwendung sparen und die Wirtschaftlichkeit und Effizienz des Unternehmens steigern?

Am 26. September 2024 um 11:30 Uhr bieten Dir unsere Experten einen tiefen Einblick in ein spannendes R&D-Projekt.

Melde Dich jetzt kostenlos an!

Avatar von Diana Hartmann

Kommentare

Eine Antwort zu „Faker – kleines Tool mit großer Wirkung“

  1. Frisch im Blog: Faker – kleines Tool mit großer Wirkung https://t.co/nObIeQ6L7c

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert


Für das Handling unseres Newsletters nutzen wir den Dienst HubSpot. Mehr Informationen, insbesondere auch zu Deinem Widerrufsrecht, kannst Du jederzeit unserer Datenschutzerklärung entnehmen.