AccueilActualités informatiqueFramework de test : pytest 7 offre plus d'annotations de type et...

Framework de test : pytest 7 offre plus d’annotations de type et réduit les charges héritées

Plus d’un an après la dernière version mineure (6.2.0) de décembre 2020, pytest 7.0.0 est maintenant disponible. Les travaux sur la nouvelle version majeure du framework de test Python ont duré plus longtemps, notamment parce que les efforts pour rendre pytest plus indépendant de la bibliothèque py posaient toujours de nouveaux problèmes et que l’équipe de développement a dû prendre des chemins détournés, comme l’explique The-Compiler Florian Bruhin à heise Developer a déclaré

Sommaire

La sortie de pytest 7.0.0, initialement prévue pour le milieu de l’année 2021, a été retardée par de nombreuses étapes nécessaires à l’abandon complet du framework. py s’est séparée. Le développement du py-est remise en question, et il existe désormais un équivalent dans la bibliothèque standard de Python pour de nombreux composants qu’il contient. Alors que pytest était à l’origine issu du pylib-qui, en tant que scission du projet PyPy, devait fournir une « bibliothèque standard supplémentaire » pour Python, des composants essentiels tels que py.code sont désormais directement intégrés dans pytest, pytest._code.

Avec la dernière version de pytest, la dépendance à un autre composant de la bibliothèque py devrait être au moins réduite : py.path sert à simplifier l’utilisation des objets de chemin. Depuis Python 3.4, il existe toutefois depuis longtemps déjà pathlib comme composant équivalent dans la bibliothèque standard de Python. La problématique du détachement de py.path est dû, selon Bruhin, au fait que dans l’API de pytest py.path-sont presque omniprésents : Diverses suites de test utilisent les tmpdir-pour les répertoires temporaires, ainsi que les APIs utilisées par près de 1000 plug-ins s’appuient à divers endroits sur ce type obsolète.

La version 7.0 fait un grand pas en avant en s’éloignant de l’ancienne version. py.pathpresque tous les attributs et arguments exposés par pytest ont été remplacés par pathlib-L’utilisation des anciennes variantes entraîne donc un avertissement de dépréciation. L’utilisation actuelle des API devrait toutefois continuer à fonctionner jusqu’à la suppression définitive, à quelques exceptions inévitables près, ce qui laisse suffisamment de temps aux projets pour migrer, assure Bruhin.

Dans le cadre du PEP 484, le module typing Type Hints a été introduit dans Python 3.5. En ce qui concerne les annotations de type, pytest 7 répond à un souhait souvent exprimé par les utilisateurs, qui promettent un meilleur support IDE lors de l’utilisation du framework de test : il expose maintenant aussi les types des objets internes comme partie de son API. Dans la version précédente, les premiers types étaient déjà disponibles dans l’API, mais 16 autres ont été ajoutés, notamment pytest.Config et pytest.Mark. Ainsi, presque toute l’API de pytest est couverte.

La documentation de pytest a été en grande partie remaniée. Selon un système de Divio, elle est divisée en tutoriels, explications et une section de référence. La nouvelle répartition promet une structure plus claire, en particulier pour les sujets plus vastes comme les explications sur les fixtures. Grâce à des redirections adaptées, les anciens liens et le passage d’une version à l’autre de la documentation devraient continuer à fonctionner sans problème, selon Bruhin.

Une utilisation accidentelle de pytest.mark.skip au lieu de pytest.mark.skipif déclenche désormais une erreur au lieu d’ignorer le test comme auparavant. De même, assert pytest.approx(actual, expected) au lieu de assert actual == pytest.approx(expected) conduit maintenant à une erreur. Lors de l’utilisation, facilement mal interprétée, de pytest.warns(None) les utilisateurs recevront à l’avenir des indications sur les alternatives appropriées.

Enfin, diverses incohérences dans l’API ont été éliminées et les sorties de pytest ont été rendues plus claires à différents endroits. Une liste complète de toutes les modifications se trouve dans le changelog.

Plus d'articles