Test de charge: HTTP vs Headless vs Real Browser

Test de charge :

HTTP vs Headless vs Real Browser

tests de performance
Aperçu:

Le chargement lent ou les pages Web non réactives ont un impact sur les revenus financiers parce que les utilisateurs frustrés ne reviendront probablement pas une fois le problème résolu. Par conséquent, les tests de performance sont devenus un élément fondamental de la chaîne de développement et la demande continue d’augmenter.

Les plates-formes de test de performances offrent un large éventail de méthodes de simulation de charge telles que HTTP, sans tête et basées sur un navigateur réel. Dans cet article, nous exposerons les principaux aspects de ceux suivis d’une matrice de comparaison, que vous pouvez utiliser pour choisir une approche de simulation appropriée.

Simulation de charge basée sur HTTP

Dans les premiers jours de l’ère numérique, les tests basés sur HTTP étaient très populaires. Avec l’essor de la riche technologie client Web, les approches de simulation basées sur HTTP sont devenues de plus en plus obsolètes. Un pilote de test http typique exécute les demandes de service et exécute les réponses. Les applications web 2.0 modernes se composent de nombreux scripts côté client, qui sont totalement ignorés, et non mesurés dans ce type d’exécution de test. Dans le pire des cas, les cas d’utilisation complexes ne peuvent pas être simulés au niveau du protocole en raison d’une pénurie d’ids générés côté client.

En raison de leur demande et de leur nature basée sur la réponse, les frais généraux sur la machine d’injection de charge sont très faibles. Un serveur de test de charge typique peut simuler jusqu’à 800 sessions simultanées. Les cas complexes d’utilisation basés sur le protocole peuvent être difficiles à implémenter. Un ingénieur de performance doit traiter les cookies, les iD de session et d’autres paramètres dynamiques. Selon le type de système testé, certains noms de formulaires Web changent souvent une fois qu’une nouvelle version a été déployée, ce qui provoquera l’échec du script basé sur HTTP.

exemple de script de niveau protocole

transaction TMain

Var

hContexte: nombre;

Commencer

WebPageUrl («http://lab3/st/», «Salutations»);

WebPageStoreContext(hContext);

WebPageLink («Rejoignez l’expérience!», ” – Nouveau visiteur «);

WebPageSubmit («Continuer», CONTINUE001, «Menu principal»);

WebPageLink («Produits», «ShopIt – Produits»);

WebPageLink (NULL, «ShopIt – Produit», 3);

WebPageSubmit («Search», SEARCH001, ” – Search «, 0, NULL, hContext);

mettre fin à TMain;

dclforme

CONTINUER001:

«nom» := «jack»,

«Nouveau nom-bouton» := «Continuer»;

SEARCH001:

«recherche» := «boot»;

L’exemple de script vu ici est une vitrine pour la nature très technique de ces scripts. Si un attribut technique de votre application change, alors vous devez réécrire l’ensemble du script.

Après tout, les scripts de niveau protocole sont bons pour les tests de niveau des composants dans les environnements d’intégration continue et le cadre idéal pour les tests de résistance en raison de leur faible empreinte sur les machines d’injection de charge.

Simulation de charge basée sur le navigateur sans tête

Avec l’essor des technologies web 2.0, l’activité test a été confrontée à de sérieux défis. Les applications de navigateur riches ne pouvaient plus être testées ou simulées au niveau du protocole en raison de la logique manquante côté client pendant la relecture du script. Par conséquent, plusieurs navigateurs sans tête ont été introduits tels que HtmlUnit, PhantomJS ou SlimerJS. Ils sont souvent construits sur le webkit, le moteur derrière Chrome et Safari.

Les navigateurs sans tête sont similaires aux navigateurs réels sans l’interface graphique. De nombreuses plateformes d’automatisation des tests et de tests de performance utilisent des navigateurs sans tête pour simuler le trafic.

Navigateurs sans tête ont leurs propres pièges; comme les nouveaux navigateurs entrent sur les marchés kits de navigateur sans tête doivent rattraper toutes les performances et les améliorations des fonctionnalités des navigateurs réels.

La simulation du rendu côté client n’est pas gratuite. Un serveur d’injection de charge typique peut simuler jusqu’à 10-12 sessions simultanées de navigateur sans tête, contre 500 de sessions basées sur HTTP.

La mise en œuvre et la personnalisation du script de test ne sont pas trop difficiles. Si vous avez des compétences de codage de base, vous serez en mesure de créer des scripts simples. Tous les navigateurs sans tête ne fournissent pas de fonctionnalités visuelles de relecture et sans débougeage de script de relecture visuelle ou analyse d’erreur pourrait devenir très délicat.

exemple phantomjs script
«utiliser strictement»;
var page = require (‘webpage’).create(),

serveur = ‘http://posttestserver.com/post.php?dump’,
données = ‘universe=expandinganswer=42’;

page.open (serveur, ‘post’, données, fonction (statut) {

si (statut !== ‘succès’) {

console.log (‘Impossible de poster!’);

} autre {

console.log (page.content);

}
phantom.exit();

});

Dans l’exemple de script vu ici, une simple demande de poste est exécutée. Vous avez besoin de compétences de programmation Java pour personnaliser ces scripts de test.

Simulation de charge basée sur le navigateur réel

Les applications Web2.0 sont pleines de JavaScript, Flash, Ajax et CSS. Sans navigateur complet, il n’est pas possible de mesurer les temps de réponse réels de bout en bout de toute la page Web. Les tests de performances réels basés sur le navigateur vous permettent de vérifier les fonctionnalités et la vitesse du site telles qu’elles sont perçues par l’utilisateur final.

Une solution de test de performances de navigateur réel typique recueille les temps de chargement des images, JavaScript, CSS et plus encore. Souvent, ils fournissent des cartes de chute d’eau, qui visualisent le temps de charge de ces composants.

L’empreinte d’un navigateur réel basé sur le navigateur est légèrement plus élevée. Compte tenu du fait que la simulation de navigateur sans tête ne fournit pas 100% des temps de réponse réalistes, il est juste de dire que la simulation basée sur le navigateur réel devrait être préféré. Dans les scénarios de la vie réelle, les navigateurs sans tête ne fonctionnent que 20% mieux que les navigateurs réels. Ainsi, si l’injecteur de charge unique de taille moyenne peut exécuter 10-12 sessions de navigateur sans tête, le même injecteur de charge peut exécuter 8-10 sessions de navigateur réel.

La mise en œuvre et la maintenance des scripts de test sont faciles parce que les actions des utilisateurs sont directement réfléchies et que la relecture visuelle facilite le débogage. Dans l’exemple de script ci-dessous le navigateur ouvre une URL, insère l’utilisateur et mot de passe et clique sur le bouton de connexion.

exemple de script réel basé sur le navigateur

transaction TMain

Commencer

BrowserStart (BROWSER_MODE_DEFAULT, 800 600);

naviguer vers le site de connexion

BrowserNavigate («http://demo.com/TestSite/LoginForm.html»);

définir l’authentification pour le site sécurisé

BrowserSetText («//INPUT[@name=’user’]», «User1»);

BrowserSetPassword(«//INPUT[@name=’pwd’]», «Password1»);

connectez-vous

BrowserClick («//INPUT[@value=’Login’]», BUTTON_Left);

mettre fin à TMain;

Après tout, la simulation de navigateur réel est utile pour des tests de charge réalistes de bout en bout, mais il peut devenir coûteux pour les tests de résistance volumes d’utilisateurs élevés, parce que l’empreinte sur le serveur d’injection de charge est trop élevé.

Types de tests de performance

Tests de vitesse des composants

Ces dernières années, les méthodes de développement de logiciels ont évolué dans la direction agile. Les sprints à courte diffusion sont essentiels. Les développeurs et les ingénieurs de test automatisent leurs contrôles d’assurance de la qualité et de performance. En règle générale, ils implémentent des tests de performances basés sur le service au niveau du protocole ou ils simulent des vérifications réelles des performances basées sur le navigateur pour comparer les temps de réponse de bout en bout avec les limites de performances convenues.

Objectifs

+ Répétabilité

+ Interface automatisée et contrôles de performances de bout en bout

+ Comparer les temps de réponse avec les seuils convenus

Tests de charge

Pour plusieurs raisons, les tests de charge sont la méthode de test idéale lorsqu’il s’agit de vérifier les exigences non fonctionnelles. La première étant que les temps de réponse peuvent être vérifiés dans des conditions reproductibles. Un autre étant que ces tests permettent de vérifier les seuils de temps de réponse. Une mesure réaliste du temps de réponse est essentielle dans les scénarios de test de charge. Par conséquent, les ingénieurs de test utilisent la simulation utilisateur sans tête ou réelle basée sur le navigateur pour leurs paramètres de test de charge.

Objectifs

+ Simulation de charge reproductible

+ Vérification des seuils de temps de réponse

+ Identifier les goulots d’étranglement dans la production comme les conditions de charge

+ Scénarios de test réalistes de bout en bout

Stress Test

Si vous devez tester la fiabilité de votre application dans des conditions de charge maximale, exécutez un test de résistance. Dans ce type de test, vous spécifiez principalement le nombre maximum d’utilisateurs et le temps pendant lequel la montée en puissance et la charge d’état stable doivent être sur votre application. L’objectif est d’identifier les points de rupture de votre application à l’essai.

Objectifs

+ Preuve d’évolutivité et de stabilité

+ Simuler les conditions de charge de pointe

+ La reproductibilité exacte n’est pas importante

Comparaison

Évidemment, il ya de bonnes raisons pour le protocole, sans tête ou simulation utilisateur basé sur le navigateur réel. La matrice ci-dessous fournit quelques conseils pour choisir l’approche appropriée.

Critères

HTTP (en)

Navigateur sans tête

Navigateur réel

Simulation utilisateur

Aucun

rendu côté client

Certains éléments côté client sont simulés

Simulation réelle des utilisateurs

Implémentation

et personnalisation de scripts

Difficile lorsque les sites Web sont complexes

Compétences de développeur requises pour construire des scripts robustes

Scripts simples, faciles à personnaliser

Relecture

cript S

Analyse de bas niveau requise

Selon le moteur utilisé, la relecture visuelle est possible

Vous voyez ce que vous obtenez

Maintainability script

Compétences en programmation requises

Les erreurs dans les sections non rendues sont difficiles à résoudre

Facile parce que vous voyez des échecs lors de la relecture

Prise en charge multi-navigateurs

Certains outils émulent les navigateurs Web, mais ce n’est pas comparable

Oui, mais certains éléments manquent souvent

Certains supportent d’autres versions et différents navigateurs


F

ootprint sur la machine d’injection de charge


Faible,

jusqu’à 800 sessions par serveur

Moyen

, jusqu’à

10-12

sessions par serveur


Haut,

jusqu’à 6 sessions par serveur

Recommandé

pour

DevOps

Dépend du scénario de test réel

Non, des scripts souvent complexes

Oui, des chiffres faciles à utiliser et réalistes

Recommandé pour les tests de charge


Non,

le traitement côté client est ignoré

Oui, mieux que la simulation HTTP

Oui, simulation réaliste de l’utilisateur

Recommandé pour les tests de résistance

Oui, parce qu’il y a une faible surcharge sur la machine génératrice de charge

Non, les frais généraux sur la machine du générateur de charge sont trop élevés

Non, les frais

généraux les plus élevés sur la machine générateur de charge

Coûts

Faible

Haute

Haute

Recommandé pour les tests de résistance webserver à fort volume et à faible coût (dans la mesure du possible)

Non recommandé

Recommandé pour les simulations d’applications complexes de la vie réelle.

Stress Test

Si vous devez tester la fiabilité de votre application dans des conditions de charge maximale, exécutez un test de résistance. Dans ce type de test, vous spécifiez principalement le nombre maximum d’utilisateurs et le temps pendant lequel la montée en puissance et la charge d’état stable doivent être sur votre application. L’objectif est d’identifier les points de rupture de votre application à l’essai.

Objectifs

+ Preuve d’évolutivité et de stabilité

+ Simuler les conditions de charge de pointe

+ La reproductibilité exacte n’est pas importante

Comparaison

Évidemment, il ya de bonnes raisons pour le protocole, sans tête ou simulation utilisateur basé sur le navigateur réel. La matrice ci-dessous fournit quelques conseils pour choisir l’approche appropriée.

Critères HTTP (en) Navigateur sans tête Navigateur réel
Simulation utilisateur Aucun rendu côté client Certains éléments côté client sont simulés Simulation réelle des utilisateurs
Implémentation et personnalisation de scripts Difficile lorsque les sites Web sont complexes Compétences de développeur requises pour construire des scripts robustes Scripts simples, faciles à personnaliser
Relecture du script Analyse de bas niveau requise Selon le moteur utilisé est replay visuel possible Vous voyez ce que vous obtenez
Maintainability script Compétences en programmation requises Les erreurs dans les sections non rendues sont difficiles à résoudre Facile parce que vous voyez des échecs lors de la relecture
Prise en charge multi-navigateurs Certains outils émulent navigateur Web, mais ce n’est pas comparable Oui, mais certains éléments manquent souvent Certains supportent d’autres versions et différents navigateurs
Empreinte sur la machine d’injection de charge Faible, jusqu’à 800 sessions par serveur Moyenne, jusqu’à 10-12 sessions par serveur Haut, jusqu’à 6 sessions par serveur
Recommandé pour DevOps Dépend du scénario de test réel Non, des scripts souvent complexes Oui, des chiffres faciles à utiliser et réalistes
Recommandé pour les tests de charge Non, le traitement côté client est ignoré Oui, mieux que la simulation HTTP Oui, simulation réaliste de l’utilisateur
Recommandé pour les tests de résistance Oui, parce qu’il y a une faible surcharge sur la machine de générateur de charge Non, les frais généraux sur la machine de générateur de charge est trop élevé Non, les frais généraux les plus élevés sur la machine générateur de charge
Coûts Faible Haute Haute
Recommandé pour les tests de résistance webserver à fort volume et à faible coût (dans la mesure du possible) Non recommandé Recommandé pour les simulations d’applications complexes de la vie réelle.

Latest Web Performance Articles​

Top 10 Synthetic Monitoring Tools for 2024

When it comes to ensuring your website’s performance and uptime, synthetic monitoring tools have become indispensable. These tools help businesses proactively detect and resolve issues

Start Dotcom-Monitor for free today​

No Credit Card Required