Je viens d'implémenter une couche de mise en cache dans mon application Web et je me demande maintenant comment le contrôle qualité est censé la tester, car la mise en cache est transparente pour l'utilisateur.
Une de mes idées est de consigner les méthodes qui appellent le code qui remplit le cache et d’enregistrer quand un objet est extrait du cache et qu’il nécessite une reconstitution à partir de la base de données. Les testeurs pourraient alors consulter les journaux pour voir si, Par exemple, un certain objet est rechargé à partir de la base de données toutes les 10 minutes, au lieu de chaque affichage de page.
Mais peut-on suggérer de meilleures pratiques pour cette situation?
Réponses:
Une question est de savoir si le cache lui-même est vraiment une exigence qui devrait être testée par QA. La mise en cache améliore les performances, ce qui leur permet de tester la différence de performances pour s'assurer qu'elles répondent à certaines exigences.
Mais bonne idée de faire des tests sur la mise en cache, quel que soit le responsable. Nous avons utilisé des compteurs de performance. Si votre système de cache en profite, ils sont simples. S'il existe un moyen d'obtenir un nombre à partir du cache lui-même, c'est une autre option.
Utiliser votre approche est bien aussi. Si l'un d'entre eux est encapsulé dans des tests automatisés qui vérifient les résultats, personne ne doit consulter les journaux pour trouver des réponses.
la source
Vous avez implémenté un cache (je suppose) car le système ne fonctionnait pas assez bien. C'est quelque chose qui est pertinent pour l'utilisateur. Voici les points que QA peut vérifier:
N'oubliez pas que les utilisateurs (et, par extension, le contrôle qualité) ne se soucient pas de la façon dont vous avez résolu un problème. Ils se soucient seulement que le problème a été résolu et n'a pas créé de nouveaux problèmes. Cela est vrai que vous ayez implémenté la mise en cache, amélioré l'analyse de chaîne, effectué une mise à niveau matérielle ou saupoudré de poussière de fée magique sur le serveur.
la source
Enfouir une logique métier ou un état système important dans une boîte noire rend difficile la vérification du comportement correct du système. Il est plus facile de tester de manière exhaustive le comportement d'un seul composant du système que de l'ensemble du système. Je préfère exposer de telles choses explicitement par un mécanisme afin que les tests d'unité / de régression / d'intégration / d'assurance de la qualité soient testés de manière significative.
Une option avec un cache serait d'exposer une page spéciale donnant des détails sur le cache (contenu, état, etc.). Cela peut aider au débogage en développement et potentiellement en production. Le contrôle qualité peut également utiliser cette page pour créer des scénarios de test pour le cache s'ils reçoivent des détails sur le comportement attendu du cache. L'utilisation de compteurs de performance et / ou de fichiers journaux pour documenter explicitement le comportement du cache est une autre approche moins visible mais viable.
Notez que cette approche ne remplace pas les tests de performances de bout en bout. Il s'agit d'un mécanisme permettant de s'assurer que le cache se comporte correctement. Les tests de performances doivent être utilisés pour déterminer si la mise en cache a l'effet escompté sur les performances.
Notez également que l'échange de composants du système avec de nouveaux composants mettant en œuvre la même interface, comme l'introduction d'un cache, peut constituer un changement déstabilisant et complexe. Avec l'exemple de cache, vous introduisez state dans ce qui était auparavant sans état, ce qui peut créer des bogues plus difficiles à trouver ou à reproduire. Un tel changement doit toujours être accompagné d'un test de régression complet pour vérifier le comportement attendu du système.
la source
Les performances du test, comme indiqué dans la réponse d'Andy.
J'ai constaté que le plus gros obstacle à la mise en œuvre de la mise en cache (et des performances) dans de nombreuses organisations est de disposer d'un environnement dans lequel vous pouvez effectuer de bons tests de performances et effectuer des tests pour différents tests de charge et de performances dans le monde réel.
Pour cela, vous devez mettre en place un environnement de test de performance qui reflète le plus fidèlement possible la production, tout en tenant compte des coûts. Ce ne sera probablement pas votre environnement de développement actuel, qui devrait être plus petit et plus autonome pour permettre un développement rapide des applications. Les environnements de développement ont également tendance à utiliser moins la mise en cache et ne représentent donc pas bien la production pour les tests de performances.
Dans l'environnement de test des performances, l'application devrait être exécutée en «mode» de production. Si vous êtes en production, vous devez avoir plusieurs serveurs. Le pool de connexion à la base de données et la mise en cache doivent être définis pour un environnement de production, etc.
Vous voudrez également envisager un outil pour aider aux tests de charge.
Jmeter est très populaire bien que je le trouve assez hostile et primitif à utiliser.
Une autre voie que j’ai utilisée est celle d’URL
curl
avec un script ruby.Pour être clair
Vous pouvez également trouver les liens suivants utiles:
la source
N'oubliez pas de demander aux testeurs de redémarrer les serveurs et de vérifier que les données qu'ils ont entrées sont toujours présents. J'ai vu un système qui a eu plusieurs mois de tests, échoue lorsque cela a été fait!
La partie la plus difficile à tester est que cependant les données sont mises à jour, il n'y a jamais aucun résultat hors-date de retour du cache.
Cela peut être partiellement aidé en utilisant toujours les données dans le cache pour remplir la page de confirmation qu'un utilisateur voit après avoir apporté une modification. Par exemple, n'utilisez pas l'objet que vous avez utilisé pour mettre à jour la base de données, mais demandez les données à partir du cache, qui les demande ensuite à la base de données. Un peu plus lent, mais beaucoup plus susceptible de présenter des bugs plus rapidement.
la source
Celui-ci a en fait une réponse très simple et elle est liée au niveau de mise en cache. Ce que vous allez observer lorsque la mise en cache est correcte, c'est l'absence de demandes à la cible des demandes. Donc, cela revient à la phrase QA usée de «résultats escomptés».
Si vous implémentez un cache au niveau Web, alors je m'attendrais à ce que les éléments soumis à la mise en cache n'apparaissent qu'une fois pour chaque session d'utilisateur testée (si vous implémentez le cache client) ou une fois pour plusieurs utilisateurs (si vous implémentez un cache de style CDN). Si vous implémentez un cache au niveau des données pour des résultats communs, je m'attendrais à voir un taux de réussite élevé dans le cache avec une absence de requêtes dans le journal de profil du niveau de données.
etc...
la source
Certaines choses sont mieux testées par un programmeur, peut-être celui qui a écrit le code, en utilisant des tests unitaires. Tester l'exactitude de votre code de cache est l'une de ces choses. (De la manière dont vous posez cette question, je présume que vos agents d'assurance qualité traitent l'application comme une "boîte noire" et la testent via son interface externe.)
la source
La logique de mise en cache doit faire l’objet d’un test unitaire par le développeur, car l’Assurance qualité effectue principalement des tests en boîte noire.
L’assurance qualité ne se préoccuperait que des aspects de performance ou du correctif que vous avez mis en œuvre. Vous pouvez donc fournir à l’assurance qualité un mécanisme permettant d’activer / désactiver la mise en cache ou tout autre mécanisme utilisé pour améliorer les performances. Ils peuvent ensuite vérifier la différence de performances. Bien entendu, le contrôle qualité pourrait également simplement vérifier une ancienne version par rapport à votre version à performances améliorées.
la source
Lorsque j'ai testé la solution de mise en cache, nous avons implémenté ce que nous avons essentiellement testé les performances. Nous avons fait cette solution de mise en cache pour les résultats XML et après le cache, la réponse prend très peu de temps. Nous avons également vérifié avec le journal du serveur en vérifiant les entrées du journal.
la source