Générer des données factices avec faker


faker fait partie de ses libs que j’ai toujours voulu écrire sans jamais prendre le temps de le faire. Comme arrow par exemple. Et puis un jour quelqu’un le fait, et je suis à la fois soulagé de ne pas avoir tenté de le faire (au risque de ne pas réussir aussi bien) et un peu déçu d’être passé à côté de la bonne idée.

Le principe de la lib est très simple : générer des données bidons. Noms, numéros de téléphone, adresses physiques ou email… C’est utile pour tout un tas de choses :

  • Faire des tests, évidement.
  • Créer des bots, des crawlers et tout autre programme qui doit se faire passer pour un utilisateur.
  • Remplir une base de données vide en attendant que les utilisateurs réels remplissent le site. Cela évite le sentiment d’arriver sur un service désert. Tous les sites de rencontre font ça.
  • Générer un contexte artificiel, par exemple pour un jeu vidéo.

Faker est déjà très simple à utiliser :

>>> from faker import Faker
>>> f = Faker()
>>> f.phone_number()
u'+69(4)8833689405'
>>> f.phone_number()
u'1-201-240-9452'
>>> f.phone_number()
u'+95(8)7680219065'
>>> f.phone_number()
u'754-833-9664x654'
>>> f.email()
u'bentley.gaylord@batz.org'
>>> f.email()
u'ludwig.rohan@adamskoch.info'

Et surtout déjà très riche. Il y a plus d’une centaine de choses que vous pouvez générer. Quelques exemples :

  • f.city
  • f.company
  • f.credit_card_number
  • f.date_time_this_decade
  • f.geo_coordinate
  • f.hex_color
  • f.ipv4
  • f.language_code
  • f.md5
  • f.mime_type
  • f.month_name
  • f.paragraph
  • f.password
  • f.postcode
  • f.ssn
  • f.street_address
  • f.url
  • f.user_agent
  • f.word

faker est très flexible. En effet, beaucoup d’éléments existent en plusieurs versions ou de manière composée et utilisables séparément. Ainsi, on peut prendre l’IPV4 ou V6, choisir l’adresse entière ou le code postal seul, récupérer le nom complet, ou juste le prénom :

>>> f.name()
u'Olin McCullough'
>>> f.first_name()
u'Brandie'

Mais en plus, faker est localisé :

>>> f = Faker(locale="fr_FR")
>>> f.name()
u'Martine de la Petitjean'

Enfin, on peut créer ses propres générateurs et fournisseurs de données au besoin.

Comme dirait Max, c’est d’la balle baby !

12 thoughts on “Générer des données factices avec faker

  • Lujeni

    Je trouve ca dommage qu’on ne puisse pas lui passer un fichier (yml/json) à l’image des fixtures Django.

  • Romain G.

    Intéressant !!
    Ça m’a fait penser au module Django de Florent Lebreton pour “faker” une base de données pour ses tests.

  • maethor

    Il faut demander Sam, on peut t’aider pour ces choses là, on connait des trucs aussi ! :)

    Jusqu’ici j’utilisais ForgeryPy qui premet de faire la même chose, mais Faker a l’air de proposer beaucoup plus de méthodes. Merci.

  • yuiio

    Raaah encore un article qui tombe a point nommé … merci les gars

  • jihbed

    Merci pour ce poste. il semblerais que f.ipv4() ne marche pas (use Faker-0.0.4) .

    —-> 1 f.ipv4()

    AttributeError: ‘Faker’ object has no attribute ‘ipv4’

    aussi pour f.md5()

  • Sam Post author

    Il faut installer le package fake-factory, pas le package faker (desinstalle ce dernier AVANT l’installation du premier).

    Je vais rajouter ça dans l’article au cas où d’autres personnes se retrouvent dans la même situation que toi.

Comments are closed.

Des questions Python sans rapport avec l'article ? Posez-les sur IndexError.