web-dev-qa-db-fra.com

Comment puis-je mesurer la couverture (dans le système de production)?

Je voudrais mesurer la couverture de mon code Python qui est exécuté dans le système de production.

Je veux une réponse à cette question:

Quelles lignes sont souvent exécutées (points chauds) et quelles lignes ne sont jamais utilisées (code mort)?

Bien entendu, cela ne doit pas ralentir mon site de production.

Je parle pas de mesurer la couverture des tests.

6
guettli

Si je comprends bien, vous voulez savoir quelles parties de votre application sont les plus utilisées par les utilisateurs.


TL; DR;

Utilisez l'un des frameworks de métriques pour python si vous ne voulez pas le faire à la main. Certains d'entre eux sont ci-dessus:


Cela se fait généralement par niveau de fonction et dépend en fait de l'application;

  • S'il s'agit d'une application de bureau avec accès Internet:

    Vous pouvez créer une base de données simple et collecter le nombre d'appels de vos fonctions. Pour l'accomplir, vous pouvez écrire une fonction simple et l'appeler dans chaque fonction que vous souhaitez suivre. Après cela, vous pouvez définir une tâche asynchrone pour télécharger vos données sur Internet.

  • S'il s'agit d'une application Web:

    Vous pouvez suivre quelles fonctions sont appelées à partir de js (principalement préféré pour le suivi du comportement des utilisateurs) ou de l'API Web. C'est une bonne pratique de commencer par l'extérieur pour aller à l'intérieur. Commencez par détecter les points de terminaison fréquemment appelés (si vous utilisez un proxy comme nginx, vous pouvez analyser les journaux du serveur pour collecter des informations. C'est le moyen le plus simple et le plus propre). Après cela, insérez un enregistreur pour chaque autre fonction que vous souhaitez suivre et analysez simplement vos journaux pour chaque semaine ou chaque mois.

Mais vous voulez analyser votre code de production ligne par ligne (c'est une très mauvaise idée) vous pouvez démarrer votre application avec python profileurs. Python en a déjà un) : cProfile .

0