Aujourd'hui, je vais vous dire comment, avec l'aide de JMeter, nous avons mis en place le processus de mise en cache des pages produits, testé le fonctionnement d'une application mobile sans l'application elle-même et créé 2000 utilisateurs dans le système sans accès à la base de données.
Quiconque ne sait pas ce qui se passe ici, lisez la
première partie de l'article - j'y ai expliqué comment JMeter nous a aidés à «résoudre» le problème de la chute du site chez certains utilisateurs.
Comment mettre en cache rapidement quelques milliers de pages de produits
Notre autre client est une entreprise italienne fabriquant des équipements pour l'éclairage intérieur, extérieur et décoratif.
L'équipement de nos clients illumine les chefs-d'œuvre de la peinture du monde, les monuments architecturaux, les monuments, les bâtiments des centres d'affaires et les aéroportsNous avons développé le site de cette entreprise sur Kentico. Il présente tous les matériaux et modèles d'équipement d'éclairage - 20 000 exemplaires. Et chacun a une page distincte.
Après la sortie du site, nous avons découvert une caractéristique désagréable de Kentico: il n'a pas d'outil pour charger automatiquement les fichiers multimédias dans le cache. Après la mise à jour et le redémarrage du site (ce qui se produit régulièrement), le cache est réinitialisé et la plupart des pages s'ouvrent pendant 10 secondes. Tous les utilisateurs ne sont pas prêts à attendre autant.
Nous avons vu deux options pour charger des fichiers multimédias dans le cache. Premièrement: il faut beaucoup de temps pour parcourir manuellement le site via un navigateur. Deuxièmement: pour écrire un script qui fera cela pour nous - ça va!
Nous avons décidé d'utiliser JMeter: nous venons de lui fournir le plan du site complet, il a marché dessus et envoyé les fichiers multimédias au cache.
C'était une solution simple, mais pas très optimale. Il a fallu six (!!!) heures pour terminer le script. Un moyen plus rapide était nécessaire.
Après avoir étudié un peu le sujet, nous avons décidé d'utiliser des expressions rationnelles. JMeter est en mesure de demander au serveur des ressources intégrées dans la page pour certains masques. C'est ce dont nous avons profité. Après avoir éliminé ce qui ne se trouve pas sur notre serveur et ne nécessite pas de chargement dans le cache (images tierces, polices, styles, etc.), nous avons réduit le temps nécessaire au script pour parcourir les pages à deux heures.
Cela devrait ressembler à une requête HTTP dans JMeter pour charger uniquement un certain type d'actifMais c'est trop long: le remplissage commence à 9h00 à Tcheliabinsk et prend une heure, puis deux autres heures sont consacrées au script, en conséquence, nous terminerons à 12h00. En Italie, il est 08h00, et certains habitants commencent déjà à travailler à 6h-7h du matin. Le site est lent, les plaintes affluent ... Il faut encore optimiser!
La décision est venue lorsque nous avons réalisé que presque les mêmes images étaient utilisées sur les 20 000 pages de produits. Nous avons effectué une analyse et réalisé qu'il suffit de charger complètement (avec toutes les ressources intégrées) seulement 30% des pages aléatoires, et le reste peut être exécuté sans charger de fichiers multimédias. Ainsi, la grande majorité des matériaux - images, polices, scripts et styles pour les pages de produits - tombent dans le cache. Lorsqu'un utilisateur contacte l'un d'entre eux, le téléchargement à partir du serveur ne nécessitera qu'une petite partie du contenu, et cela ne prendra pas plus de 1 à 2 secondes.
En demandant un numéro de page aléatoire dans le tableau Variables définies par l'utilisateur, chaque fois que nous obtenons une page aléatoire dans la listeEn utilisant la méthode décrite, nous avons obtenu un site qui dans 90% des cas fonctionne rapidement. Oui, dans un cas sur dix, il a fallu jusqu'à 30 secondes pour attendre le chargement de la page, mais dans les neuf autres, tout s'est envolé. Et c'est en seulement 15-30 minutes.
Maintenant, de telles astuces ne sont plus nécessaires - les développeurs ont optimisé le système de mise en cache lui-même. Mais à cette époque, cette décision a été un véritable salut, et JMeter s'est avéré être un outil très utile, même après sa sortie et sa coulée.
Comment créer 2000 utilisateurs de l'application, si vous n'avez que leur e-mail et deux heures pour travailler
Le troisième client, dont je vais parler, est une entreprise qui développe, fabrique et vend du matériel médical: des scalpels simples aux découpeurs laser et aux forets complexes avec caméras intégrées. Leurs gestionnaires se rendent dans les cliniques, communiquent avec les chirurgiens et leur parlent de leurs produits. Pour ce faire, ils ont une application spéciale pour l'iPad: les données du médecin et une liste d'outils qui l'intéressent y sont entrées. Plus tard, un lien vers une page personnelle avec une liste de tous ces outils, des descriptions détaillées et des caractéristiques est envoyé au courrier électronique du médecin. Ce sont ces pages pour les chirurgiens que nous avons développées. La demande et le bulletin électronique ont été créés par une autre société.
L'une des tâches de JMeter sur ce projet est de tester le système pour créer différentes versions de ces pages, malgré le fait que nous n'avions qu'un backend. Nous avons écrit un script pour que l'utilisation d'un générateur de nombres aléatoires crée des pages de différents types, puis les envoie à nos e-mails de travail pour vérification. Tout est simple. Et je ne mentionnerais même pas ce client dans l'article, sinon pour un cas.
Quelques jours avant le lancement, mon manager m'a appelé et m'a demandé de créer 2000 utilisateurs pour l'application. La difficulté était que nous n'avions accès ni au serveur en direct ni à la base de données. Nous avons dû créer 2 000 utilisateurs uniquement via le CMS (dans ce cas, via Umbraco). En même temps, après l'inscription, chaque utilisateur devrait recevoir une lettre d'environ le type suivant:
À la réception d'un tel e-mail, l'utilisateur installe l'application et change le mot de passe par défaut en son proprePour enregistrer un utilisateur, cinq champs sont obligatoires:
- Courriel
- nom
- nom de famille;
- connexion;
- mot de passe
Je n'avais que deux heures pour terminer la tâche. Encore une fois: 2000 utilisateurs, cinq champs pour chacun d'eux, deux heures ... Les données du manager se présentent sous la forme suivante:

Si j'étais un développeur, et non un spécialiste de l'assurance qualité, j'écrirais un script, par exemple, en perl: il analyserait ces données et disperserait rapidement tout. Mais j'ai choisi un chemin différent et j'ai utilisé le plus, peut-être, l'outil idéal pour une organisation rapide des données - MS Excel. Les feuilles de calcul sauvent le monde!
À l'aide de manipulations simples pour remplacer les données, couper les excès et autres astuces, j'ai créé un fichier de ~ 10k lignes, de la forme:
login1 | john.smith
login2 | docteur.qui
...
nom1 | Jean
...
Je ne me suis pas beaucoup soucié des mots de passe - je viens d'écrire PasswordNumber1 et «d'étendre» cette colonne dans Excel à tous les 2000 utilisateurs. Cela n'a pas d'importance, car il n'a été utilisé que pour la première entrée. Oui, et je n'ai pas trié la liste générale des e-mails par ordre alphabétique, ce qui signifie que la probabilité de deviner un mot de passe aléatoire a été minimisée.
En alimentant ce fichier (via le presse-papiers) vers JMeter, je me suis penché en arrière sur ma chaise et j'ai regardé avec plaisir comment les utilisateurs ont été créés. L'ensemble du processus de traitement des données et de création de nouveaux utilisateurs a pris 1 heure 45 minutes - même du temps pour le café!
Conclusion: JMeter s'est avéré être un outil pratique pour les tests automatisés du backend des applications mobiles, et aussi, tout à coup, pour l'automatisation des tâches non standard - comme celle-ci, avec un tas d'utilisateurs et un minimum d'informations à leur sujet.
En général, JMeter peut être utilisé (et a été utilisé par moi personnellement) pour une variété de tâches. Par exemple, pour:
- analyse d'optimisation: effectuer des tests de charge, corriger les corrections d'optimisation des rouleaux, effectuer à nouveau des tests, comparer les résultats;
- Test de sécurité des requêtes: écrire un script à l'aide d'un proxy, envoyer la requête directement au serveur sans vérification frontale, supprimer les différentes clés de la requête, vérifier que le serveur répond correctement;
- vérifier la réponse aux en-têtes: nous écrivons un script qui envoie des requêtes à la même page avec différents en-têtes en boucle, nous vérifions la réaction du serveur et voyons ce qui doit être supprimé;
- énumération des combinaisons d'autorisation: mettre un cycle avec des mots de passe dans un cycle avec des connexions, tester le formulaire d'autorisation;
- vérifie la protection contre les attaques: nous envoyons des demandes de soumission de formulaires dans plusieurs flux et voyons si votre protection fonctionne;
- automatisation des systèmes d'API: tous les résultats des demandes d'API peuvent être traités par un script et utilisés à l'étape suivante du cycle de test - de cette façon, vous pouvez automatiser les tests d'un tel système.
De ce qui précède, nous pouvons tirer une conclusion générale: JMeter est un outil universel, un véritable couteau suisse pour un testeur (et pour un développeur, pour être honnête).