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.

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top