A realizar um teste de Stress na aplicação Web?

no passado, usei a Ferramenta de Stress de aplicação web da Microsoft e o Pilot para testar aplicações web de stress. Eu tinha escrito uma página inicial simples, login script, e site walkthrough (em um site de comércio eletrônico adicionando alguns itens para um carrinho e checkout).

bater com força na página inicial com um punhado de desenvolvedores quase sempre localizaria um grande problema. Mais problemas de escalabilidade surgiriam na segunda fase, e ainda mais - após o lançamento.

o URL das ferramentas que usei foram Microsoft Homer (também conhecido por Microsoft Web Application Stress Tool ) e Pylot .

Os relatórios gerados por estas ferramentas nunca fizeram muito sentido para mim, e eu gastaria muitas horas tentando descobrir que tipo de carga concorrente o site seria capaz de suportar. Sempre valeu a pena porque os bugs e estrangulamentos mais estúpidos sempre surgiriam (por exemplo, configurações erradas do servidor web).

o que fizeste, que Ferramentas usaste, e que sucesso tens tiveste com a tua abordagem? A parte que é mais interessante para mim está chegando com algum tipo de uma fórmula significativa para calcular o número de usuários concorrentes um aplicativo pode suportar a partir dos números relatados pela aplicação de teste de estresse.

Author: Vadim Kotov, 2008-08-11

30 answers

Aqui está outro voto para Jameter.

O Jameter é uma ferramenta de teste de carga de código aberto, escrita em Java. Ele é capaz de testar uma série de diferentes tipos de servidores (por exemplo, web, serviços web, banco de dados, apenas sobre qualquer coisa que usa pedidos basicamente).

No entanto, tem uma curva de aprendizagem íngreme quando se começa a fazer testes complicados,mas vale a pena. Você pode se levantar e correr muito rapidamente, e dependendo de que tipo de teste de estresse se quiseres, pode ser que sim.

Prós:

  • Open-Source / Free tool from the Apache project (helps with buy-in)
  • fácil de começar, e fácil de usar uma vez que você compreende os conceitos centrais. (Ie, como criar um pedido, como criar uma afirmação, como trabalhar com variáveis etc).
  • Muito escalável. Fiz testes com 11 máquinas a gerar carga no servidor com quase um milhão de acessos/hora. Era muito mais fácil de montar do que eu. estava à espera. Tem uma comunidade activa e bons recursos para o ajudar a pôr-se a funcionar. Leia os tutoriais primeiro e jogue com ele por um tempo.

Conts:

    A IU está escrita em baloiço. (ugh!)
  • O Jameter funciona analisando o texto de resposta devolvido pelo servidor. Então, se você está procurando validar qualquer tipo de comportamento javascript, você está sem sorte.
  • a curva de aprendizagem é íngreme para os não programadores. Se está familiarizado com o normal expressões, já estás à frente do jogo.
  • há um grande número de idiotas (inserir expletivos) no fórum de apoio a fazer perguntas estúpidas que poderiam ser facilmente resolvidas se dessem à documentação um olhar superficial. ('Como é que uso o Jameter para testar o stress da minha interface do Windows' aparece com bastante frequência).
  • a apresentação de relatórios "fora da caixa" deixa muito a desejar, especialmente para testes de maior dimensão. No teste que mencionei acima, acabei tendo que escrever um rápido consola a aplicação para fazer algumas das conversões 'xml-logfile' para 'html'. Mas isso foi há alguns anos, por isso é provável que isto já não seja necessário.
 107
Author: Peter Bernier, 2013-10-09 13:01:46

Eu usei O moedor . É de código aberto, muito fácil de usar, e muito configurável. É baseado em Java e usa Jython para os scripts. Nós o comparamos com uma aplicação web.net, então não pense que é uma ferramenta somente Java (por sua natureza, qualquer ferramenta de estresse web não deve ser amarrada à plataforma que usa).

Fizemos coisas fixes com ele... nós éramos uma aplicação de telecomunicações baseada na web, então um uso legal que eu configurei foi para imitar a marcação de um número através da nossa aplicação web, então usou uma ferramenta de resposta automática que tínhamos (que era basicamente um aplicativo de tutorial da Microsoft para se conectar ao seu servidor RTC LCS... que é o que o Microsoft Office Communicator conecta em uma rede local... em seguida, modificado para apenas pegar as chamadas automaticamente). Isso nos permitiu então usar isso em vez de uma ferramenta de telefonia cara chamada martelo (ou algo assim). De qualquer forma, também usamos a ferramenta para ver como a nossa aplicação se aguentou sob alta carga, e foi muito eficaz em encontrar gargalo. A ferramenta tem construído em relatórios para mostrar quanto tempo os pedidos estão demorando, mas nós nunca o usamos. Os logs também podem armazenar todas as respostas e outras coisas, ou registro personalizado. Eu recomendo esta ferramenta, muito útil para o preço... mas espere fazer alguma configuração personalizada com ele (ele tem um proxy construído para gravar um script, mas pode precisar de personalização para capturar algo como sessões... Eu sei que eu tive que personalizá-lo para utilizar uma sessão única por thread).
 36
Author: Mike Stone, 2008-08-11 03:27:15
Um pouco tarde para esta festa. Concordo queO Pylot é a melhor ferramenta de código aberto. É simples de usar e é ativamente trabalhado por um grande cara ([[4]}Corey Goldberg ). Como fundador do OpenQA , também estou feliz por o Pylot estar listado na nossa página inicial e usar alguma da nossa infra-estrutura (nomeadamente os fóruns). No entanto, também recentemente decidi que todo o conceito de teste de carga tinha falhas: emular o tráfego HTTP, com aplicações tão complexas como se tornaram, são uma chatice. Foi por isso que criei a ferramenta comercial BrowserMob. É um serviço de teste de carga externo que usaselénio para controlar os navegadores da web reais ao reproduzir a carga traseira.

A abordagem obviamente requer umaton mais hardware do que as técnicas normais de teste de carga, mas o hardware é realmente muito barato quando você está usando computação em nuvem. E um bom efeito colateral disso é que o script é muito mais fácil do que os testes normais de carga. Você não tem que fazer qualquer correspondência regex avançada (como o Jameter requer) para extrair cookies, estado de sessão.net, Parâmetros de solicitação Ajax, etc. Já que estás a usar navegadores a sério, eles fazem o que é suposto fazerem.

Desculpa lançar um produto comercial descaradamente, mas espero que o conceito seja interessante para algumas pessoas e pelo menos as faça pensar em novas formas de lidar com testes de carga quando se tem acesso a um monte de hardware extra!
 22
Author: Patrick Lightbody, 2016-12-24 13:30:09

Eu usei O Jameter . Além de testar o servidor web, você também pode testar a sua infra-estrutura de banco de dados, serviços de mensagens e servidores de E-mail.

 15
Author: grom, 2018-05-10 06:37:16
 12
Author: Harry Love, 2018-08-30 15:01:26

Para uso simples, eu perfer ab (Apache benchmark) e siege, mais tarde é necessário uma vez que ab não suporta cookie e criaria sessões intermináveis a partir do site dinâmico.

Ambos são simples de começar:

ab -c n -t 30 url

siege -b -c n -t 30s url
O cerco pode correr com mais urls. A última versão do cerco torna-se verbosa em siegerc, o que é irritante. só poderá desactivá-lo se editar esse ficheiro(/usr/local/etc/siegerc).
 9
Author: Ben Li, 2011-11-24 20:11:12

Para um serviço baseado na web, confira loader.io.

Resumo:

Loader.io é um serviço de teste de carga gratuito que lhe permite testar o stress de suas aplicações web/apis com milhares de conexões simultâneas.

Eles também têm uma API.

 9
Author: danriti, 2013-01-02 22:08:22
Como esta pergunta ainda está em aberto, mais vale dar a minha opinião. A boa notícia é que, nos últimos 5 anos, as ferramentas de código aberto amadureceram e decolaram no espaço, a má notícia é que há tantos por aí. Aqui estão os meus pensamentos:

Medidor vs moedor

O Jameter é conduzido a partir de uma especificação de estilo XML, que é construída através de uma interface gráfica.

A Grinder usa o Jython scripting dentro de uma estrutura java muti-threaded, por isso mais orientado para programadores.

Ambas as ferramentas irão lidar com HTTP e HTTPS e ter um gravador proxy para iniciar. Ambas as ferramentas usam o modelo de controlador para conduzir múltiplos agentes de teste, de modo que a escalabilidade não é um problema (dado o acesso à nuvem).

O que é melhor: -

Uma chamada difícil como a curva de aprendizagem é íngreme com ambas as ferramentas à medida que você entra nos requisitos mais complicados de scripting para reescrever url, correlação, fornecendo dados únicos por usuário Virtual e simulando primeiro tempo ou retorno de Usuários (manipulando os cabeçalhos HTTP).

Que disse que eu iria começar com o Jmeter como esta ferramenta tem um enorme e há muitos exemplos e tutoriais na web para utilizar esta ferramenta. Se e quando você chegar a um "bloqueio de estrada", isso é algo que você não pode "facilmente" fazer com Jameter, então dê uma olhada no moedor. A boa notícia é que ambas as ferramentas têm a mesma exigência Java e uma solução 'mix and match' não está fora de questão.

Algo novo a acrescentar – Navegadores sem cabeça a executar várias instâncias do WebDriver selénio. Esta é uma abordagem relativamente nova porque depende da disponibilidade de recursos que agora podem ser provisionados a partir da nuvem. Com esta abordagem, um script selênio (WebDriver) é usado e executado dentro de um navegador sem cabeça (ou seja, WebDriver = novo htmlunitdriver()) driver em vários threads. Por experiência própria, cerca de 25 instâncias de' navegadores sem cabeça ' podem ser executadas a partir da Amazon M1 Small Instancia.

O que isto significa é que todas as correlações, problemas de reescrita de url desaparecem à medida que você reutiliza seus scripts de testes funcionais para se tornar scripts de testes de desempenho.

A escalabilidade está comprometida, pois serão necessários mais VMs para conduzir a carga, em comparação com um driver HTTP como o moedor ou o Jameter. Dito isto, se você está olhando para conduzir 500 usuários virtuais, em seguida, com 20 Amazon pequenas instâncias (6 centavos por hora cada) a um custo de apenas $ 1,20 por hora lhe dá carga que está muito perto da experiência real do Usuário.

 9
Author: Ian Fleming, 2013-03-28 23:52:34

Além disso, existe uma incrível plataforma open-source Pure-python distribuída e escalável locust que usa greenlets. É ótimo em simular uma enorme quantidade de usuários simultâneos.

 7
Author: alecxe, 2013-05-07 22:03:18
Começámos recentemente a usar Gatling para testes de carga. Eu recomendaria muito para experimentar esta ferramenta para teste de carga. Usámos SOASTA e JMETER no passado. A nossa principal razão para considerar o Gatling é a seguinte:
  • gravador para gravar o cenário
  • Usando Akka e Netty o que dá um melhor desempenho em comparação com Modelo de roscagem Jmeter
  • DSL Scala, que pode ser mantido em comparação com o Jmeter XML
  • Fácil de fazer os testes, não te assustes se for o scala.
  • relatórios

Deixe - me dar-lhe um exemplo simples para escrever o código usando o código Gatling:

// your code starts here  
val scn = scenario("Scenario")  
     .exec(http("Page")
     .get("http://example.com")) 
// injecting 100 user enter code here's on above scenario.   
setUp(scn.inject(atOnceUsers(100)))       

No entanto, pode tornar isto o mais complicado possível. Uma das características que se destacam para Gatling é o relato que é muito detalhado.

Aqui estão alguns links:
Gatling
tutorial Gatling

Eu recentemente dei uma palestra sobre isso, você pode passar pela conversa here:
https://docs.google.com/viewer?url=http%3A%2F%2Ffiles.meetup.com%2F3872152%2FExploring-Load-Testing-with-Gatling.pdf

 7
Author: Sunil Kapil, 2015-11-23 16:50:48
Esta é uma pergunta antiga, mas acho que as soluções mais recentes merecem ser mencionadas. Xeque-out LoadImpact: http://www.loadimpact.com.
 6
Author: Chris F, 2012-01-05 21:33:32

Eu tentei O WebLoad é uma ferramenta muito fixe. Ele vem com e teste IDE script que lhe permite gravar a ação do usuário em um site. Ele também desenha um gráfico à medida que executa testes de esforço em seu servidor web. Experimente, eu recomendo.

 4
Author: Alvin, 2014-01-14 11:48:49

Tentando tudo mencionado aqui, eu acheiencravador O melhor para os meus propósitos. interface muito fácil, monitoramento em tempo real, estatísticas úteis, a partir das quais eu construo gráficos de desempenho. Todas as funcionalidades da libcurl estão incluídas.

 3
Author: DominiCane, 2010-09-03 09:24:55

O Blaze meter tem uma extensão chrome para as sessões de gravação e exportá-las para o JMeter (necessita actualmente de autenticação). Você também tem a opção de pagar-lhes dinheiro para executá-lo em seu conjunto de servidores Jameter (seu preço parece muito melhor do que LoadImpact que eu acabei de parar de usar):

Eu não tenho nenhuma associação com eles, só gosto do aspecto do serviço deles, embora ... Ainda não usei a versão paga.
 3
Author: Gerry, 2014-08-04 12:53:17
Fez esta pergunta há quase um ano e não sei se ainda está à procura de outra forma de aferir o seu site. No entanto, uma vez que esta questão ainda não está marcada como resolvida, gostaria de sugerir o serviço web gratuito LoadImpact (btw. não filiados). Acabei de receber este link via twitter e gostaria de compartilhar este achado. Eles criam uma boa visão geral razoável e por alguns dólares mais você obter o "modo de impacto completo". Isto deve parecer estranho, mas boa sorte. empurrar e travar o seu serviço:)
 2
Author: merkuro, 2009-06-22 01:38:28

Eu encontrei O Separador de página da IBM também uma ferramenta interessante para trabalhar.

 1
Author: Michael Stum, 2008-08-28 19:38:25

Eu usei o openSTA .

Isto permite que uma sessão com um site seja gravada e depois reproduzida através de uma linguagem de escrita relativamente simples.

Você pode facilmente testar os serviços web e escrever os seus próprios scripts.

Permite - lhe montar scripts num teste da forma que desejar e configurar o número de iterações, o número de utilizadores em cada iteração, o tempo de rampa para introduzir cada novo utilizador e o atraso entre cada iteração. Os testes também podem ser agendado para o futuro.

É de código aberto e gratuito. Produz uma série de relatórios que podem ser guardados numa folha de cálculo. Então usamos uma tabela de pivô para analisar e graficar facilmente os resultados.
 1
Author: nzpcmad, 2008-09-15 20:39:37

Usamos a ferramenta Microsoft mencionada-Ferramenta de Stress de aplicação web da Microsoft. É a ferramenta mais fácil que eu usei. Ele é limitado de muitas maneiras, incluindo apenas ser capaz de atingir a porta 80 em testes criados manualmente. Mas, sua facilidade de uso significa que ele realmente é usado.

Complementamos a carga desta ferramenta com outras ferramentas, incluindo o OpenSTA e o link check spiders. O Jameter parece bem desde a minha avaliação inicial, espero incluí - lo na nossa integração contínua. frente. Mas, o Jameter é complexo e não trivial de rolar. Sugiro que se abra outra pergunta sobre a interpretação dos resultados das ferramentas de stress do MS.
 1
Author: Jerry B, 2008-09-28 15:37:22

Visual Studio Test Edition 2010 (2008 good too). Esta é uma ferramenta muito fácil e poderosa para criar testes web/load com.

O bónus com esta ferramenta ao usar contra os servidores do Windows é que obtém acesso integrado a todas as estatísticas do servidor perfmon no seu relatório. Util.

O outro bónus é que com o projecto Visual Studio pode integrar uma "sessão de desempenho" que irá traçar o perfil da execução do Código do seu site.

Se está a servir páginas web a partir de um servidor windows, esta é a melhor ferramenta lá fora.

É necessária uma licença separada e dispendiosa para utilizar várias máquinas para testar a aplicação.

 1
Author: Nat, 2010-12-16 21:25:28
Desenvolvemos um processo que trata as medidas de carga e desempenho como uma preocupação de primeira classe-como você diz, deixá - lo ao final do projeto tende a levar à decepção... Então, durante o desenvolvimento, incluímos testes muito básicos multi-usuário (usando selênio), que verifica a loucura básica como gestão de sessões quebradas, problemas óbvios de concorrência, e problemas óbvios de contenção de recursos. Projetos não triviais incluem isso no processo de integração contínua, então nós recebemos feedback muito regular.

Para projectos que não têm requisitos de desempenho extremos, incluímos testes de desempenho básicos nos nossos testes; normalmente, programamos os testes usando BadBoy, e importamo-los para o Jameter, substituindo os detalhes do login e outras coisas específicas do thread. Nós então aumentamos estes até o nível que o servidor está lidando com 100 solicitações por segundo; se o tempo de resposta for inferior a 1 segundo, isso geralmente é suficiente. Lançamos e seguimos com as nossas vidas.

Para projectos com requisitos de desempenho extremos, ainda usamos BadBoy e Jameter, mas investimos muita energia na compreensão dos estrangulamentos nos servidores da nossa plataforma de testes(servidores web e bases de dados, normalmente). Há uma boa ferramenta para analisar os logs de eventos da Microsoft que ajuda muito com isso. Normalmente encontramos estrangulamentos inesperados, que otimizamos se possível; isso nos dá uma aplicação que é tão rápida quanto possível em "1 servidor web, 1 servidor de banco de dados". Nós então normalmente implantar para a nossa infra-estrutura alvo, e usar um dos serviços "Jameter in the cloud" para executar os testes em escala. Mais uma vez, relatórios PAL ajudam a analisar o que aconteceu durante os testes - você muitas vezes vê gargalos muito diferentes nos ambientes de produção.

A chave é certificar-se de que não faz apenas os testes de stress, mas também que recolhe a informação de que precisa para compreender o desempenho da sua aplicação.

 1
Author: Neville Kuyt, 2012-07-15 14:39:35
Há um monte de boas ferramentas mencionadas aqui. Eu me pergunto se as ferramentas são uma resposta à pergunta: "Como você testa o stress de uma aplicação web?"As ferramentas realmente não fornecem um método para enfatizar um aplicativo Web. Eis o que sei:

Os testes de esforço mostram como uma aplicação web falha ao mesmo tempo que serve as respostas a uma população crescente de utilizadores. Testes de esforço mostram como o aplicativo Web funciona enquanto ele falha. A maioria dos aplicativos da Web hoje - especialmente os aplicativos da Web Social/móvel - são integrações de serviços. Por exemplo, quando o Facebook teve sua retirada em maio de 2011, você não pôde acessar Pepsi.com a aplicação Web. O aplicativo não falhou completamente, apenas uma grande parte de sua função normal tornam-se indisponíveis para os usuários.

O teste de desempenho mostra a capacidade de uma aplicação Web de manter os tempos de resposta independentemente de quantos utilizadores estão a utilizar a aplicação simultaneamente. Por exemplo, um aplicativo que lida com 10 transações por segundo com 10 usuários simultâneos deve lidar com 20 transações por segundo com 20 usuários. Se a aplicação lida com menos de 20 transações por segundo os tempos de resposta estão crescendo mais e o aplicativo não é capaz de alcançar a escalabilidade linear.

Também, no exemplo acima, a contagem de transacções por segundo deve ser de apenas operações bem sucedidas de um caso de teste/fluxo de trabalho. Falhas tipicamente acontecem em períodos de tempo mais curtos e vai fazer a medição TPS excessivamente otimista. As falhas são importantes para um teste de esforço e desempenho, uma vez que geram carga no aplicativo também.

Eu escrevi the PushToTest methodology in the TestMaker User Guide at http://www.pushtotest.com/pushtotest-testmaker-6-methodology [[11]}. O TestMaker vem em dois sabores: versão comunitária Open Source (GPL) e TestMaker Enterprise (comercial com grande apoio profissional.)

-Frank

 1
Author: user1227037, 2012-08-17 21:01:34

Tente ZebraTester o que é muito mais fácil de usar do que o jameter. Eu usei jMeter por um longo tempo, mas o tempo total de configuração para um teste de carga foi sempre um problema. Embora ZebraTester não seja código aberto, o tempo que poupei nos últimos seis meses compensa. Eles também têm um portal SaaS que pode ser usado para executar testes rápidos usando seus geradores de carga.

 1
Author: Vinit, 2017-02-23 23:23:24
Mais uma nota, para a nossa aplicação web, descobri que tínhamos grandes problemas de desempenho devido à discórdia entre tópicos sobre fechaduras... então a moral era pensar muito cuidadosamente sobre o esquema de bloqueio. Acabámos por ter threads de trabalhadores para acelerar demasiados pedidos usando um manipulador http assíncrono, caso contrário a aplicação ficaria sobrecarregada e estoiraria e queimaria. Significava que um grande atraso poderia acumular-se, mas pelo menos o site ficaria acordado.
 0
Author: Mike Stone, 2008-08-11 03:31:52

Dá uma vista de olhos ao Teste Completo .

 0
Author: Erick Sasse, 2008-08-21 10:34:39
Concordo com a sugestão do opensta. Eu só acrescentaria que ele permite que você faça coisas para monitorar o servidor que você está testando usando SMTP. Mantemos o controle da carga do processador, memória usada, byes enviados, etc. A única desvantagem é que se você encontrar algo boken e quiser fazer uma correção, ele depende de várias bibliotecas de código aberto que não são mais mantidas, então obter uma versão de compilação do código fonte é mais complicado do que com a maioria dos OSS.
 0
Author: tloach, 2008-09-20 22:09:00
Joguei com o JMeter. Um pensamento que não poderia não testar foi ASP.NET Webforms. A viewstate quebrou os meus testes. Eu não sou shure porquê, mas há um par de ferramentas lá fora que não lidar bem com viewstate. O meu projecto actual é ASP.NET o MVC e o JMeter trabalham bem com ele.
 0
Author: Mathias F, 2009-02-03 10:55:07
Tive bons resultados com o FunkLoad. :
  • interacção fácil de programar com o utilizador
  • Os relatórios são claros
  • pode monitorizar a carga do servidor
 0
Author: yanjost, 2012-11-13 10:32:48
Correndo o risco de ser acusado de desavergonhada auto-promoção, gostaria de salientar que, na minha Busca por uma ferramenta de teste de carga gratuita, fui a este artigo: http://www.devcurry.com/2010/07/10-free-tools-to-loadstress-test-your.html Ou não consegui obter o rendimento que queria, ou não consegui a flexibilidade que queria. E eu queria facilmente agregar os resultados de múltiplos hosts de geração de testes de carga na análise pós-teste. Experimentei todas as ferramentas. a lista e para minha frustração descobriu que nenhum deles fez o que eu queria ser capaz de fazer. Por isso construí um e estou a partilhá-lo. Aqui está: http://sourceforge.net/projects/loadmonger

PS: Sem comentários sarcásticos sobre o nome de pessoas que estão familiarizadas com gírias urbanas. Eu não era, mas sou um pouco mais mundano agora.

 0
Author: Steve Owens, 2012-12-11 01:22:17
Também voto a favor do jameter e quero acrescentar algumas citações à resposta do @PeterBernier.

A principal questão que o teste de carga responde é quantas respostas simultâneas os utilizadores podem suportar a minha aplicação web? Para obter uma resposta adequada, o teste de carga deve representar o uso real da aplicação, tão próximo quanto possível possível.

Tenha em mente, o jameter tem muitos blocos de construção Controladores Lógicos, configuração Elementos, Pré Processadores, Ouvintes ,... o que te pode ajudar nisto.

Podes imitar a situação do mundo real com o jameter, por exemplo podes:

  1. Configurar o jMeter para atuar como Navegador real, configurando (concurrent resource download, browser cache, http headers, setting request time out, cookie management, https support, encoding , ajax support ,... )
  2. configurar o jameter para gerar os pedidos do utilizador (definindo number of users per second, ramp-up time, scheduling ,...)
  3. Configure muitos clientes com o jMeter neles, para fazer uma distribuição teste de carga.
  4. Process response to find if the server is responding correctly during test. (Por exemplo assert resposta para encontrar um texto nele)

Por favor, considere:

O https://www.blazemeter.com/jmeter tem informações muito boas e práticas para o ajudar a configurar o seu ambiente de teste.

 0
Author: Alireza Fattahi, 2017-06-28 13:37:29