Comment stresser un téléchargement de fichier de formulaire Web?
-
04-07-2019 - |
Question
Je dois tester un formulaire Web nécessitant un téléchargement de fichier. La taille de fichier dans chaque téléchargement sera d’environ 10 Mo. Je veux tester si le serveur peut gérer plus de 100 téléchargements simultanés tout en restant responsive pour le reste du site.
Les soumissions de formulaires répétés de notre bureau seront limitées par notre ligne DSL locale. Le serveur est hors site avec une bande passante supérieure.
Des réponses basées sur l'expérience seraient formidables, mais toute suggestion est la bienvenue.
La solution
Utilisez l'outil de ligne de commande ab (ApacheBench) : fourni avec Apache
(Je viens de découvrir ce super petit outil). Contrairement à cURL ou wget,
ApacheBench a été conçu pour effectuer des tests de contrainte sur les serveurs Web (tout type de serveur Web!).
Cela génère aussi beaucoup de statistiques. La commande suivante enverra un
Requête HTTP POST incluant le fichier test.jpg
à http: // localhost /
100 fois, avec jusqu'à 4 demandes simultanées.
ab -n 100 -c 4 -p test.jpg http://localhost/
Cela produit une sortie comme ceci:
Server Software:
Server Hostname: localhost
Server Port: 80
Document Path: /
Document Length: 0 bytes
Concurrency Level: 4
Time taken for tests: 0.78125 seconds
Complete requests: 100
Failed requests: 0
Write errors: 0
Non-2xx responses: 100
Total transferred: 2600 bytes
HTML transferred: 0 bytes
Requests per second: 1280.00 [#/sec] (mean)
Time per request: 3.125 [ms] (mean)
Time per request: 0.781 [ms] (mean, across all concurrent requests)
Transfer rate: 25.60 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 2.6 0 15
Processing: 0 2 5.5 0 15
Waiting: 0 1 4.8 0 15
Total: 0 2 6.0 0 15
Percentage of the requests served within a certain time (ms)
50% 0
66% 0
75% 0
80% 0
90% 15
95% 15
98% 15
99% 15
100% 15 (longest request)
Autres conseils
Automatisez Selenium RC en utilisant votre langue préférée. Démarrez 100 threads de sélénium, en tapant chacun un chemin du fichier dans l’entrée et en cliquant sur soumettre.
Vous pouvez générer 100 fichiers nommés de manière séquentielle pour pouvoir les boucler facilement ou simplement utiliser le même fichier encore et encore
Je vous aiderais peut-être à utiliser cURL et à soumettre des éléments aléatoires (par exemple, lisez 10 Mo sur / dev / urandom
et codez-le en base32), via une requête POST et créez manuellement le fichier. body à être un fichier téléchargé (ce n’est pas sorcier).
Lancez ce script 100 fois, peut-être sur quelques serveurs. Assurez-vous simplement que les administrateurs système ne pensent pas que vous faites un DDoS, ou quelque chose du genre:)
Malheureusement, cette réponse reste un peu vague, mais j'espère qu'elle vous aidera en vous poussant dans la bonne voie.
Suite conformément au commentaire de Liam:
Si le serveur recevant les téléchargements ne se trouve pas sur le même réseau local que les clients qui s'y connectent, il serait préférable de disposer de nœuds aussi distants que possible pour les tests de contrainte, ne serait-ce que pour simuler un comportement aussi authentique que possible. Mais si vous n’avez pas accès à des ordinateurs situés en dehors du réseau local, le réseau local est toujours meilleur que rien.
Il n’est pas judicieux de procéder à des tests de contrainte à l’intérieur du même matériel, car vous feriez une double charge sur le serveur: déterminer les données aléatoires, les stocker, les envoyer via la pile TCP / IP (bien que probablement pas via Ethernet). ), et alors seulement , le serveur pourra faire sa magie. Si la partie qui envoie est externalisée, vous obtenez une double performance (prise avec un grain de sel de taille arbitraire) par le destinataire.