Como faço para enfatizar testar um upload de arquivo de formulário web?
-
04-07-2019 - |
Pergunta
Eu preciso testar um formulário web que leva um carregamento de arquivo. O tamanho do arquivo em cada carregamento será de cerca de 10 MB. Eu quero testar se o servidor pode lidar com mais de 100 uploads simultâneos, e ainda permanecem sensível para o resto do site.
repetidos envios de formulários de nosso escritório será limitado pela nossa linha DSL local. O servidor é offsite com maior largura de banda.
As respostas baseadas na experiência seria ótimo, mas todas as sugestões são bem-vindos.
Solução
Use a ab (ApacheBench) ferramenta de linha de comando que é empacotado com Apache
(Acabo de descobrir esta grande ferramenta pouco). Ao contrário curl ou wget,
ApacheBench foi projetado para a realização de testes de estresse em servidores web (qualquer tipo de servidor web!).
Ele gera estatísticas abundância também. O seguinte comando irá enviar um
solicitação HTTP POST incluindo o test.jpg
arquivo para http://localhost/
100 vezes, com até 4 solicitações simultâneas.
ab -n 100 -c 4 -p test.jpg http://localhost/
Ela produz uma saída como esta:
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)
Outras dicas
Selenium RC usando sua linguagem favorita. Comece 100 Threads de selênio, cada digitando um caminho do arquivo na entrada e clicar em enviar.
Você poderia gerar 100 arquivos sequencialmente chamados para fazer looping sobre eles easyily, ou apenas usar o mesmo arquivo e outra vez
Eu talvez orientá-lo para usar cURL e enviar material apenas aleatório (como, 10MB leitura fora do /dev/urandom
e codificá-lo em base32), através de um POST-request e fabricar manualmente o corpo para ser um upload de arquivo (não é foguete ciência).
Fork esse script 100 vezes, talvez mais de alguns servidores. Apenas certifique-se de que os administradores de sistemas não acho que você está fazendo um DDoS, ou algo:)
Infelizmente, essa resposta continua a ser um pouco vago, mas espero que o ajude por cutucando-o no caminho certo.
Continuação de acordo com o comentário de Liam:
Se o servidor receber os envios não está na mesma LAN que os clientes se conectar a ele, seria melhor para obter como nós remotos quanto possível para testes de estresse, se apenas ao comportamento simular o mais autêntico possível. Mas se você não tem acesso a computadores fora da rede local, a LAN local é sempre melhor do que nada.
Testes de esforço de dentro o mesmo hardware não seria uma boa idéia, como você faria carga dupla no servidor: Descobrir os dados aleatórios, embalá-lo, enviá-lo através da pilha TCP / IP (embora provavelmente não over Ethernet ), e só então o servidor pode fazer a sua magia. Se a parte de envio é terceirizada, você obtém um desempenho duplo (tomado com um grão de tamanho arbitrário de sal) até o final de recepção.