Générer des données de sécurité fictives avec Python et faker-security
Michael Aquilina
26 avril 2022
0 minutes de lectureSnyk a récemment publié en open source son package Python faker-security pour aider toutes les personnes qui travaillent avec des données de sécurité. Dans cet article, nous présentons brièvement ce package Python et expliquons comment l’utiliser. Mais avant cela, voyons comment le package Python factory_boy peut être utilisé avec faker-security pour améliorer votre expérience de rédaction de tests pendant le développement.
Remarque : Quelques connaissances en Python vous aideront à tirer le meilleur parti de cet article.
Tester avec Faker et factory_boy
Avant d’aborder faker-security, commençons par découvrir factory_boy et Faker, ainsi que la manière dont nous les utilisons chez Snyk.
Chez Snyk, nous sommes convaincus que les tests automatisés contribuent à la maintenabilité de notre code. Ils nous permettent de développer et de faire évoluer rapidement des fonctionnalités, et d’apporter des modifications à notre code en toute confiance, sans craindre de casser involontairement des fonctionnalités existantes.
Notre engagement en faveur des tests nous pousse à chercher de nouvelles façons de simplifier leur rédaction et leur lecture au sein de nos équipes. Faker et factory_boy comptent parmi nos packages préférés pour tester des projets Python. Ensemble, ils génèrent de fausses instances des modèles que nous utilisons dans nos tests.
Faker est un package Python qui permet de générer des données fictives pour de nombreux types de champs, comme les noms d’utilisateur, les dates et les URL. factory_boy est un autre package Python qui facilite l’intégration de la génération de données de Faker dans votre code en définissant des classes de fabrique.
Ce que nous apprécions particulièrement avec factory_boy, c’est qu’il permet à la personne qui écrit un test de se concentrer sur les données importantes pour ce test, tout en laissant Faker générer les autres données, qui n’ont pas d’importance pour celui-ci. Les tests gagnent ainsi considérablement en lisibilité : le code comporte moins de lignes et les champs dont vous n’avez pas à vous soucier ne viennent plus l’encombrer.
Pour voir concrètement la différence, comparez dans les exemples suivants un test écrit avec factory_boy à un test qui ne l’utilise pas.
Sans fabriques :
Avec des fabriques :
Le test qui importe UserFactory est exactement équivalent à celui qui ne l’importe pas. Il est toutefois plus court, plus facile à lire et met clairement en évidence les champs importants pour le test. À l’inverse, le test sans fabrique est plus long et rend difficile l’identification des champs qui comptent vraiment pour le test. L’exemple est assez simple, mais l’écart devient encore plus marqué à mesure que la complexité des tests augmente.
La classe UserFactory peut être définie une seule fois dans tests/factories.py, puis réutilisée dans tous vos tests :
Lorsqu’il s’agit de données de sécurité, nous devons souvent générer des données pour des champs comme les vecteurs CVSSv3 et les identifiants CVE. Par défaut, Faker ne permet pas de générer directement ces données. En revanche, il vous permet d’ajouter vos propres fournisseurs, ce qui est précisément le rôle de faker-security.
Qu’est-ce que faker-security ?
faker-security est un package Python qui sert de fournisseur pour Faker et vous permet de générer aléatoirement des données liées à la sécurité pour vos projets. À l’heure actuelle, faker-security prend en charge la génération des données suivantes :
Vecteurs CVSSv3
Vecteurs CVSSv2
Versions semver
Plages de versions semver NPM
CVE
CWE
À l’avenir, nous espérons prendre en charge d’autres méthodes de génération et types de plages de versions, comme le semver de Maven.
En reprenant nos exemples précédents, si nous voulons créer une classe VulnerabilityFactory pour générer des données fictives, nous la définirions comme suit :
Comment utiliser faker-security
Vous pouvez installer faker-security avec pip :
Pour l’utiliser dans votre projet, ajoutez-le au fichier de dépendances de votre choix. Il s’agit généralement du fichier requirements.txt de votre projet. Si vous utilisez un gestionnaire de packages de plus haut niveau, comme poetry ou pipenv, suivez ses instructions pour ajouter de nouveaux packages.
Une fois faker-security installé, il vous suffit de configurer Faker ou factory_boy pour l’utiliser.
Si vous exécutez vos tests avec pytest, nous vous recommandons de configurer faker-security pour factory_boy dans votre fichier conftest.py comme suit :
La suite pour faker-security
Utiliser factory_boy et Faker est un excellent moyen de simplifier vos tests. Avec faker-security, vous disposez désormais d’une solution simple et rapide pour générer des données de sécurité fictives dans tous vos projets !
Nous espérons que ce package vous sera aussi utile qu’à nous, et nous serions ravis de vous compter parmi nos contributeurs ! Ajoutez une étoile à notre dépôt GitHub et envoyez-nous vos demandes de fusion et vos contributions. Bon courage pour vos tests !
