Comparaison de captures d'écran Fuzzy avec Selenium
Je suis en utilisant le Sélénium pour automatiser la page web de test fonctionnel. Il est important pour nous de faire un pixel-par-pixel de comparaison lorsque nous rouler de nouveau code, nous utilisons le Sélénium pour prendre des captures d'écran et en comparant les chaînes codées en base64 pour voir si quelque chose a changé.
Nous constatons que, dans la pratique, il est difficile d'obtenir des pixels de la cohérence, en particulier avec des images. Je voudrais mineur flou /rendu des artefacts à compter comme un "pass" au lieu d'un "échec", alors je me demandais si il y a moyen de faire une comparaison floue pour faire nos tests, un peu moins fragile.
Je pensais peut-être à la recherche à la distance de Levenshtein entre le base64 les chaînes de caractères comme un point de départ, mais je ne sais pas vraiment si c'est une bonne approche, ou ce que les tolérances doivent être que la distinction "quelque chose a bougé sur la page" à partir de "rendu artefact". Toutes les idées /approches?
source d'informationauteur josh | 2013-01-11
Vous devez vous connecter pour publier un commentaire.
J'ai donc fini par aller avec ImageMagick outil de ligne de commande (car pourquoi ré-inventer de comparaison d'image). Le "Sommet de l'Erreur Absolue" métrique de "comparer" outil vous indique combien vous avez à brouiller les pixels de deux images sont identiques. Cela semble bien fonctionner... pour une image avec une légère graphique distorsions, il y a beaucoup de pixels qui ne correspondent pas, mais une légère fuzzing est assez pour les faire correspondre, mais pour les deux images qui sont en fait différents, même si la plupart des pixels peut correspondre, ceux qui n'ont pas tendance à être très différents. Droit maintenant, je suis à la recherche d'une PAE de moins de 15% pour voir si les images doivent être comptés comme identiques. Ligne de commande que j'utilise est:
Documentation sur ImageMagick est un outil de comparaison est ici: http://www.imagemagick.org/script/compare.php
J'ai été en utilisant perceptualdiff qui utilise un modèle du système visuel humain pour essayer d'éviter les rapports imperceptible changements (les auteurs ont utilisé pour le moteur de rendu de tests de régression). L'utilisation est très simple:
(où
diff.ppm
est un PPM format d'image mettant en évidence les domaines de la différence)La aiguille framework de tests de régression a en charge l'utilisation de pdiff de comparer les captures d'écran:
http://needle.readthedocs.org/en/latest/#engines
Utiliser un format d'image qui ne permet pas de créer des artefacts (comme BMP ou PNG) ensuite, vous pouvez faire pixel par pixel comparaison.
Je pense que vous pouvez vérifier chaque pixel avec une commune La Distance Euclidienne.
Pour améliorer les performances un peu, ne pas calculer la racine carrée mais vérifiez les carrés des distances
N'ai pas testé le code C#, mais il devrait vous donner l'idée. Donner quelques essais et d'ajuster la
maxDistanceAllowed
à vos besoins.Si quelqu'un d'autre est à la recherche de quelque chose de similaire il y est Représenté-dpxdt. Il est conçu pour être utilisé dans le cadre du CI/CD processus.
Il combine de perception diff avec le serveur, en ligne de commande outil de, papier d'emballage pour phantom js.
Il dispose de fonctionnalités démontré comme ramper ensemble du site et de comparer les pages des différences.