Blogdevphp

Faker : Génération de données de test

2014-06-07 php

Dans chaque projet, on passe par une phase de test. Normal me direz-vous! Pour tester, il faut bien des données selon la nature de l'application. 

Il faut bien, les créer ces données et ce n'est pas la partie, la plus interessante. Si vous pouviez trouver, une petite librairie, assez complète en PHP, pour faire cela. Eh ben, ça tombe bien, je vais vais parler de Faker. Vous avez sûrement entendu cette expression "c'est un fake", du bluff quoi! En effet, cette librairie va vous permettre de générer des données factices. Ah ça vous intéresse là! On va faire appel à l'autoloader et instancier l'objet Faker.

String

J'ai une base de données et  j'ai besoin de remplir certaines d'entre elles avec des noms, prénoms, adresses et ville! Pour cela, on va procéder de cette manière:

<?php

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

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


for ($i=0; $i < 15; $i++) {
  echo $faker->name, "<br/>";
  echo $faker->address, "<br/>";
  echo $faker->city, "<br/>";
}

?>

Cette boucle for va me générer mes quinze données avec les paramètres choisis :

Mr. Alessandro Kutch
032 Kiehn Estate Suite 139 Port Annie, DE 64698-8473
West Johnathanbury
Odell Toy
9945 Jordyn Forge Suite 777 Langoshstad, OH 46495-5241
South Leanna
Prof. Elias Beahan V
21432 Block Drives Apt. 892 South Nora, WY 20292
Magnuston
Maximus Ratke
4930 Nat Manors New Rosetta, PA 84383-1470
North Colemanborough
Vella Armstrong
6256 Abbott Tunnel West Jany, SC 69775
Abrahamburgh
Mr. Dereck Krajcik
606 Doyle Path Lake Serenityshire, AL 87054
Kayceebury
Jess Streich
98662 Mueller Islands Suite 436 Kreigerburgh, TX 64139
Trompstad
Alphonso Heathcote
7254 Schumm Field Apt. 697 North Lilafort, AR 98270-2147
Smithview
Sadye Padberg
9959 Kunde Wells East Romatown, WI 03279-7298
Cummingsmouth
Ms. Wava Ryan DDS
89024 Toy Trail Lake Lavinia, VA 58396
Watersstad

C'est bien tout cela, mais j'aimerai franciser ces informations et c'est prévu :

<?php

$faker = Faker\Factory::create('fr_FR'); 
for ($i=0; $i < 10; $i++) {
  echo $faker->name, "<br/>";
  echo $faker->address, "<br/>";
  echo $faker->city, "<br/>";
}

?>

Alors, cela donne quoi en ayant ajouté le paramètre de la langue :

Valentine Raynaud
84, chemin Emmanuel Mendes 55382 Perrin-sur-Guillet
Rodrigues-sur-Mer
Chantal Grondin
1, rue François Briand 03711 Hoarau-sur-Mer
Pagesdan
Laure Meyer
6, boulevard André Boulay 83 401 Schmitt-sur-Mer
Bourgeois
Dorothée Marchal
853, rue de Meyer 09 717 GilletBourg
Peron
Sébastien Auger
73, chemin Marchal 53660 Perrin
Da Costa
Lucie Pons-Renaud
boulevard de Moreno 12786 LebonBourg
Marchal
Emmanuelle Fontaine
8, boulevard Letellier 98331 Martel-sur-Legrand
Marechal
Denis du Courtois
33, rue Brunet 05530 Bouchet
Remy
Stéphanie Morvan
rue Delaunay 27 039 Legendre
Ferreira
Louis Valette
439, rue Georges Weber 19 584 Samsondan
Berthelot-les-Bains

On peut également générer du texte, sans souci :

<?php

echo $faker->text;

?>

 

Voluptas magnam sint quisquam ut aperiam fuga consequatur. 
Ab consectetur similique maxime et atque dicta dignissimos.

Par rapport, au texte, vous pouvez limiter le nombre de caractères, générer n paragraphes...

Vous pouvez également générer des emails, des numéros de téléphone, des URL, des chemins d'images... avec pour chacun de ces types de données, un certain nombre d'options.

 

Integer et Datetime

On peut générer des entiers, nombres décimaux.. Voyons quelques exemples :

<?php

// génére 15 entiers entre 10 et 50
for ($i=0; $i < 15; $i++) {
  echo $faker->numberBetween($min = 10, $max = 50), "<br/>";
}

//génère un nombre décimal entre 0 et 50
echo $faker->randomFloat($nbMaxDecimals = NULL, $min = 0, $max = 50)

?

En terme de date, la librairie fournit des méthodes :

<?php

//génère une date avec le format jour-mois-année
echo $faker->date($format = 'd-m-Y', $max = 'now');

//génère un timezone
echo $faker->timezone;

?>

 

02-01-1983

Africa/Lubumbashi

 

Conclusion

Faker est un bonne librairie, pour générer des données, de test car très complète. J'ai fait un rapide survol de ce qu'elle peut faire. La documentation est très bien faite. Elle peut être également l'utilisée avec des ORM comme Doctrine2 et des ODM. Vous pourrez également personnaliser vos données par rapport à la langue mise en paramètre.

comments powered by Disqus
Copyright © 2018 blogdevphp.fr - Tous droits réservés