web-applications - source - pruebas de stress software ejemplos
¿Realizar una prueba de estrés en la aplicación web? (30)
A riesgo de ser acusado de auto promoción descarada, me gustaría señalar que en mi búsqueda de una herramienta de prueba de carga gratuita fui a este artículo: http://www.devcurry.com/2010/07/10-free-tools-to-loadstress-test-your.html
O no pude obtener el rendimiento que quería, o no pude obtener la flexibilidad que quería. Y quería agregar fácilmente los resultados de varios hosts de generación de pruebas de carga en el análisis posterior a la prueba.
Probé todas las herramientas de la lista y, para mi frustración, descubrí que ninguna de ellas hacía lo que quería hacer. Así que construí uno y lo estoy compartiendo.
Aquí está: http://sourceforge.net/projects/loadmonger
PD: No hay comentarios sarcásticos sobre el nombre de personas que están familiarizadas con la jerga urbana. No lo era, pero ahora soy un poco más mundano.
En el pasado, usé Microsoft Web Application Stress Tool y Pylot para probar las aplicaciones web. Escribí una página de inicio simple, una secuencia de comandos de inicio de sesión y una guía del sitio (en un sitio de comercio electrónico que agrega algunos artículos a un carrito y realiza el pago).
El simple hecho de golpear la página de inicio con un puñado de desarrolladores casi siempre ubicaría un problema importante. Más problemas de escalabilidad surgirían en la segunda etapa, e incluso más, después del lanzamiento.
La URL de las herramientas que utilicé fue Microsoft Homer (también conocida como Microsoft Web Application Stress Tool ) y Pylot .
Los informes generados por estas herramientas nunca tuvieron mucho sentido para mí, y pasé muchas horas tratando de averiguar qué tipo de carga concurrente podría soportar el sitio. Siempre valió la pena porque siempre surgían los errores y cuellos de botella más estúpidos (por ejemplo, errores de configuración del servidor web).
¿Qué ha hecho, qué herramientas ha utilizado y qué éxito ha tenido con su enfoque? La parte que más me interesa es encontrar algún tipo de fórmula significativa para calcular el número de usuarios concurrentes que una aplicación puede admitir a partir de los números informados por la aplicación de prueba de estrés.
Aquí hay otro voto para JMeter .
JMeter es una herramienta de prueba de carga de código abierto, escrita en Java. Es capaz de probar varios tipos de servidores diferentes (por ejemplo, web, servicios web, base de datos, casi cualquier cosa que use solicitudes básicamente).
Sin embargo, tiene una curva de aprendizaje empinada una vez que empiezas a realizar pruebas complicadas, pero vale la pena. Puede ponerse en marcha muy rápidamente y, dependiendo de qué tipo de pruebas de estrés quiera hacer, eso podría estar bien.
Pros:
- Herramienta de código abierto / gratuita del proyecto Apache (ayuda con la compra)
- Fácil de comenzar y fácil de usar una vez que comprenda los conceptos básicos. (Es decir, cómo crear una solicitud, cómo crear una aserción, cómo trabajar con variables, etc.).
- Muy escalable. He ejecutado pruebas con 11 máquinas que generan carga en el servidor por una suma de casi un millón de visitas por hora. Fue mucho más fácil de configurar de lo que esperaba.
- Tiene una comunidad activa y buenos recursos para ayudarlo a ponerse en marcha. Lea los tutoriales primero y juegue con ellos por un tiempo.
Contras:
- La interfaz de usuario está escrita en Swing. (ugh!)
- JMeter funciona analizando el texto de respuesta devuelto por el servidor. Entonces, si estás buscando validar cualquier tipo de comportamiento de javascript, estás fuera de suerte.
- La curva de aprendizaje es empinada para los no programadores. Si estás familiarizado con las expresiones regulares, ya estás por delante del juego.
- Hay una gran cantidad de idiotas ( inserta ) en el foro de soporte que hacen preguntas estúpidas que podrían resolverse fácilmente si le dieran a la documentación una mirada rápida. (''¿Cómo uso JMeter para realizar pruebas de estrés en mi GUI de Windows? Aparece con bastante frecuencia).
- Los informes de "fuera de la caja" dejan mucho que desear, especialmente para pruebas más grandes. En la prueba que mencioné anteriormente, tuve que escribir una aplicación de consola rápida para hacer algunas de las conversiones de ''archivo de registro xml'' a ''html''. Sin embargo, eso fue hace algunos años, por lo que es probable que esto ya no sea necesario.
Blaze meter tiene una extensión de Chrome para grabar sesiones y exportarlas a JMeter (actualmente requiere inicio de sesión). También tiene la opción de pagarles dinero para que lo ejecute en su grupo de servidores JMeter (su precio parece ser mucho mejor que el LoadImpact que acabo de dejar de usar):
No tengo ninguna asociación con ellos, solo me gusta el aspecto de su servicio, aunque todavía no he usado la versión de pago.
Como esta pregunta aún está abierta, yo también podría sopesar.
La buena noticia es que en los últimos 5 años, más o menos, las herramientas de código abierto realmente han madurado y se han retirado en el espacio, la mala noticia es que hay muchas de ellas.
Aquí están mis pensamientos:
Jmeter vs Grinder
Jmeter se basa en una especificación de estilo XML, que se construye a través de una GUI.
Grinder utiliza scripts Jython dentro de un framework Java de múltiples hilos, por lo tanto más orientado a los programadores.
Ambas herramientas manejarán HTTP y HTTPS y tendrán una grabadora proxy para comenzar. Ambas herramientas utilizan el modelo Controller para controlar múltiples agentes de prueba, por lo que la escalabilidad no es un problema (dado el acceso a la nube).
Cual es mejor:-
Una llamada difícil ya que la curva de aprendizaje es abrupta con ambas herramientas a medida que se adentra en los requisitos de scripts más complicados para la reescritura de URL, la correlación, el suministro de datos únicos por usuario virtual y la simulación de usuarios por primera vez (mediante la manipulación de los encabezados HTTP).
Dicho esto, comenzaría con Jmeter ya que esta herramienta tiene muchos seguidores y hay muchos ejemplos y tutoriales en la web para usar esta herramienta. Si llegas a un "bloqueo de carretera", eso es algo que no puedes "hacer" fácilmente con Jmeter y luego echas un vistazo al Grinder. La buena noticia es que ambas herramientas tienen el mismo requisito de Java y una solución de "combinación y combinación" no está fuera de discusión.
Algo nuevo para agregar: navegadores sin cabeza que ejecutan varias instancias de Selenium WebDriver.
Este es un enfoque relativamente nuevo porque se basa en la disponibilidad de recursos que ahora se pueden aprovisionar desde la nube. Con este enfoque, un script de Selenium (WebDriver) se toma y ejecuta dentro de un controlador sin navegador (es decir, WebDriver = Nuevo controlador HtmlUnitDriver ()) en varios subprocesos.
Desde la experiencia, alrededor de 25 instancias de ''navegadores sin cabeza'' se pueden ejecutar desde la pequeña instancia de Amazon M1.
Lo que esto significa es que toda la correlación, los problemas de reescritura de URL desaparecen a medida que reutiliza sus scripts de pruebas funcionales para convertirse en scripts de pruebas de rendimiento.
La escalabilidad se ve comprometida ya que se necesitarán más máquinas virtuales para manejar la carga, en comparación con un controlador HTTP como Grinder o Jmeter. Dicho esto, si está buscando conducir a 500 usuarios virtuales, con 20 instancias pequeñas de Amazon (6 centavos por hora cada uno) a un costo de solo $ 1.20 por hora, obtendrá una carga muy cercana a la experiencia real del usuario.
Echa un vistazo a TestComplete .
Eche un vistazo a LoadBooster ( https://www.loadbooster.com ). Utiliza el navegador PhantomJS / CasperJs sin scripts para probar sitios web. Phantomjs analizará y renderizará cada página, ejecutará el script del lado del cliente. El enfoque de navegador sin cabeza es más fácil de escribir escenarios de prueba para admitir la aplicación AJAX heavy Web 2.0 compleja, la navegación del navegador, el clic del ratón y las pulsaciones de tecla en el navegador o esperar hasta que exista un elemento en DOM. LoadBooster soporta el script HTML de Selenio también.
Descargo de responsabilidad: trabajo para LoadBooster.
Encontré IBM Page Detailer también una herramienta interesante para trabajar.
Esta es una pregunta antigua, pero creo que vale la pena mencionar soluciones nuevas. Salida LoadImpact: http://www.loadimpact.com .
Hay muchas buenas herramientas mencionadas aquí. Me pregunto si las herramientas son una respuesta a la pregunta: "¿Cómo hace una prueba de estrés en una aplicación web?" Las herramientas realmente no proporcionan un método para enfatizar una aplicación web. Esto es lo que sé:
Las pruebas de estrés muestran cómo falla una aplicación web al responder a una creciente población de usuarios. La prueba de estrés muestra cómo funciona la aplicación web mientras falla. La mayoría de las aplicaciones web en la actualidad, especialmente las aplicaciones web sociales / móviles, son integraciones de servicios. Por ejemplo, cuando Facebook tuvo su interrupción en mayo de 2011, no pudo iniciar sesión en la aplicación web de Pepsi.com. La aplicación no falló por completo, solo una gran parte de su función normal no está disponible para los usuarios.
Las pruebas de rendimiento muestran la capacidad de una aplicación web para mantener los tiempos de respuesta independientemente de la cantidad de usuarios que la utilizan simultáneamente. Por ejemplo, una aplicación que maneja 10 transacciones por segundo con 10 usuarios concurrentes debe manejar 20 transacciones por segundo con 20 usuarios. Si la aplicación maneja menos de 20 transacciones por segundo, los tiempos de respuesta aumentan y la aplicación no puede lograr una escalabilidad lineal.
Además, en el ejemplo anterior, el recuento de transacciones por segundo debe ser solo de operaciones exitosas de un caso de uso de prueba / flujo de trabajo. Las fallas generalmente ocurren en períodos de tiempo más cortos y harán que la medición de TPS sea demasiado optimista. Los fallos son importantes para una prueba de estrés y rendimiento, ya que también generan carga en la aplicación.
Escribí la metodología PushToTest en la Guía del usuario de TestMaker en http://www.pushtotest.com/pushtotest-testmaker-6-methodology . TestMaker viene en dos tipos: versión de comunidad de código abierto (GPL) y TestMaker Enterprise (comercial con gran soporte profesional).
-Franco
He usado el molinillo . Es de código abierto, bastante fácil de usar y muy configurable. Está basado en Java y usa Jython para los scripts. Lo ejecutamos contra una aplicación web .NET, así que no piense que es una herramienta exclusiva de Java (por su naturaleza, cualquier herramienta de estrés web no debe estar vinculada a la plataforma que utiliza).
Hicimos algunas cosas interesantes con él ... éramos una aplicación de telecomunicaciones basada en la web, por lo que un buen uso que hice fue imitar la marcación de un número a través de nuestra aplicación web, luego usamos una herramienta de respuesta automática que teníamos (que era básicamente un tutorial La aplicación de Microsoft para conectarse a su servidor RTC LCS ... que es a lo que Microsoft Office Communicator se conecta en una red local ... luego se modifica para que solo conteste llamadas automáticamente. Esto nos permitió usar esto en lugar de una herramienta de telefonía costosa llamada The Hammer (o algo así).
De todos modos, también usamos la herramienta para ver cómo nuestra aplicación resistía una carga alta, y fue muy efectiva para encontrar cuellos de botella. La herramienta ha incorporado informes para mostrar cuánto tiempo tardan las solicitudes, pero nunca la usamos. Los registros también pueden almacenar todas las respuestas y otras cosas, o el registro personalizado.
Recomiendo esta herramienta, muy útil por el precio ... pero espero hacer una configuración personalizada con ella (tiene un proxy incorporado para grabar un script, pero puede necesitar personalización para capturar algo como sesiones ... Lo sé Tuve que personalizarlo para utilizar una sesión única por hilo).
He usado JMeter . Además de probar el servidor web, también puede probar su base de datos, servicios de mensajería y servidores de correo electrónico.
He utilizado openSTA .
Esto permite que una sesión con un sitio web se grabe y luego se reproduzca a través de un lenguaje de script relativamente simple.
Puede probar fácilmente los servicios web y escribir sus propios scripts.
Le permite poner los scripts juntos en una prueba de la forma que desee y configurar el número de iteraciones, el número de usuarios en cada iteración, el tiempo de aceleración para introducir a cada nuevo usuario y el retraso entre cada iteración. Las pruebas también se pueden programar en el futuro.
Es de código abierto y gratuito.
Produce una serie de informes que se pueden guardar en una hoja de cálculo. Luego usamos una tabla dinámica para analizar y graficar fácilmente los resultados.
Hemos desarrollado un proceso que trata la medición de la carga y el rendimiento como una preocupación de primera clase; como usted dice, dejarlo al final del proyecto tiende a provocar decepciones ...
Por lo tanto, durante el desarrollo, incluimos pruebas multiusuario muy básicas (que utilizan selenio), que comprueban la locura básica como la gestión de sesiones interrumpidas, los problemas obvios de concurrencia y los problemas obvios de contención de recursos. Los proyectos no triviales incluyen esto en el proceso de integración continua, por lo que recibimos retroalimentación muy regular.
Para proyectos que no tienen requisitos de rendimiento extremos, incluimos pruebas de rendimiento básicas en nuestras pruebas; por lo general, hacemos un script de las pruebas usando BadBoy, y las importamos a JMeter, reemplazando los detalles de inicio de sesión y otras cosas específicas de subprocesos. Luego aumentamos el nivel al que el servidor está tratando con 100 solicitudes por segundo; si el tiempo de respuesta es inferior a 1 segundo, eso suele ser suficiente. Lanzamos y seguimos adelante con nuestras vidas.
Para proyectos con requisitos de rendimiento extremos, todavía usamos BadBoy y JMeter, pero ponemos mucha energía en comprender los cuellos de botella en los servidores de nuestra plataforma de prueba (servidores web y de base de datos, generalmente). Hay una buena herramienta para analizar los registros de eventos de Microsoft que ayuda mucho con esto. Normalmente encontramos cuellos de botella inesperados, que optimizamos si es posible; eso nos da una aplicación que es tan rápida como puede ser en "1 servidor web, 1 servidor de base de datos". Por lo general, implementamos en nuestra infraestructura de destino y usamos uno de los servicios de "Jmeter en la nube" para volver a ejecutar las pruebas a escala.
Una vez más, los informes de PAL ayudan a analizar lo que sucedió durante las pruebas: a menudo se ven cuellos de botella muy diferentes en los entornos de producción.
La clave es asegurarse de no solo realizar las pruebas de estrés, sino también de recopilar la información que necesita para comprender el rendimiento de su aplicación.
Hiciste esta pregunta hace casi un año y no sé si todavía estás buscando otra forma de comparar tu sitio web. Sin embargo, como esta pregunta aún no está marcada como resuelta, me gustaría sugerir el servicio web gratuito LoadImpact (por cierto, no afiliado). Acabo de recibir este enlace a través de Twitter y me gustaría compartir este hallazgo. Crean una buena visión general razonable y por unos pocos dólares más obtendrá el "modo de impacto total". Esto probablemente suena extraño, pero buena suerte al presionar y frenar su servicio :)
Intentando todo lo mencionado aquí, encontré curl-loader como el mejor para mis propósitos. Interfaz muy fácil, monitoreo en tiempo real, estadísticas útiles, desde las cuales construyo gráficos de rendimiento. Todas las características de libcurl están incluidas.
Jugué con JMeter. Uno pensaba que no podía probar no era ASP.NET Webforms. El estado de vista rompió mis pruebas. No sé por qué, pero hay un par de herramientas que no manejan bien el estado de visualización. Mi proyecto actual es ASP.NET MVC y JMeter funciona bien con él.
Para un uso simple, prefiero ab (apache benchmark) y siege, luego se necesita uno ya que ab no admite cookies y crearía infinitas sesiones desde un sitio dinámico.
ambos son simples para comenzar:
ab -c n -t 30 url
siege -b -c n -t 30s url
El asedio puede correr con mas urls.
La última versión de asedio activa verbalmente en siegerc, que es molesto.
solo puede deshabilitarlo editando ese archivo (
/usr/local/etc/siegerc
).
Prueba ZebraTester que es mucho más fácil de usar que jMeter. He usado jMeter durante mucho tiempo, pero el tiempo total de configuración para una prueba de carga siempre fue un problema. Aunque ZebraTester no es de código abierto, el tiempo que he ahorrado en los últimos seis meses lo compensa. También tienen un portal SaaS que se puede usar para ejecutar pruebas rápidamente usando sus generadores de carga.
Recientemente comenzamos a usar Gatling para pruebas de carga. Recomiendo probar esta herramienta para pruebas de carga. Habíamos usado SOASTA y JMETER en el pasado. Nuestra principal razón para considerar Gatling es la siguiente:
- Grabador para grabar el escenario.
- El uso de Akka y Netty ofrece un mejor rendimiento en comparación con el modelo de roscado Jmeter
- DSL Scala que es mucho más fácil de mantener en comparación con Jmeter XML
- Fácil de escribir las pruebas, no asustes si es Scala.
- Informes
Déjame darte un ejemplo simple para escribir el código usando el 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)))
Sin embargo puedes hacerlo lo más complicado posible. Una de las características que se destacan para Gatling es la presentación de informes, que es muy detallada.
Aquí hay algunos enlaces:
Gatling
Tutorial de Gatling
Hace poco di charla sobre eso, puedes pasar por la charla aquí:
https://docs.google.com/viewer?url=http%3A%2F%2Ffiles.meetup.com%2F3872152%2FExploring-Load-Testing-with-Gatling.pdf
Tuve buenos resultados con FunkLoad :
- Fácil interacción con el usuario del script
- los informes son claros
- puede monitorear la carga del servidor
Un poco tarde para esta fiesta. Estoy de acuerdo en que Pylot es la mejor herramienta de código abierto que está surgiendo. Es fácil de usar y un gran tipo ( Corey Goldberg ) trabaja activamente en él. Como fundador de OpenQA , también estoy contento de que Pylot ahora aparezca en nuestra página de inicio y use parte de nuestra infraestructura (a saber, los foros).
Sin embargo, recientemente también decidí que todo el concepto de prueba de carga era defectuoso: emular el tráfico HTTP, con aplicaciones tan complejas como se han convertido, es un problema en el trasero. Es por eso que creé la herramienta comercial BrowserMob. Es un servicio externo de prueba de carga que utiliza Selenium para controlar los navegadores web reales al reproducir la carga.
Obviamente, el enfoque requiere una tonelada más de hardware que las técnicas normales de prueba de carga, pero el hardware es bastante barato cuando se utiliza la computación en la nube. Y un buen efecto secundario de esto es que las secuencias de comandos son mucho más fáciles que las pruebas de carga normales. No tiene que hacer ninguna coincidencia de expresiones regulares avanzadas (como requiere JMeter) para extraer las cookies, el estado de sesión de .NET, los parámetros de solicitud de Ajax, etc. Ya que está usando navegadores reales, solo hacen lo que se supone que deben hacer.
Lamento lanzar un producto comercial descaradamente, pero espero que el concepto sea interesante para algunas personas y al menos les haga pensar en nuevas formas de lidiar con las pruebas de carga cuando tenga acceso a un montón de hardware adicional.
Una nota más, para nuestra aplicación web, descubrí que teníamos grandes problemas de rendimiento debido a la disputa entre hilos sobre bloqueos ... así que la moraleja era pensar en el esquema de bloqueo con mucho cuidado. Terminamos teniendo subprocesos de trabajo para acelerar demasiadas solicitudes usando un controlador http asíncrono, de lo contrario, la aplicación simplemente se abrumaría, colapsaría y quemaría. Significaba que se podía acumular una gran cantidad de trabajo acumulado, pero al menos el sitio se mantendría en pie.
Usamos la herramienta de Microsoft mencionada: Microsoft Web Application Stress Tool. Es la herramienta más fácil que he usado. Está limitado de muchas maneras, incluyendo solo poder alcanzar el puerto 80 en pruebas creadas manualmente. Pero, su facilidad de uso significa que realmente se usa.
Complementamos la carga de esta herramienta con otras herramientas, como OpenSTA y las arañas de verificación de enlaces.
JMeter se ve bien desde mi evaluación inicial, espero incluirlo en nuestra integración continua en el futuro. Pero, JMeter es complejo y no trivial de implementar.
Sugeriría abrir otra pregunta sobre la interpretación de los resultados de la herramienta de estrés de la EM.
Visual Studio Test Edition 2010 (2008 bueno también). Esta es una herramienta realmente fácil y poderosa para crear pruebas web / de carga con.
La ventaja de esta herramienta cuando se usa contra servidores de Windows es que obtiene acceso integrado a todas las estadísticas del servidor perfmon en su informe. Realmente util.
La otra ventaja es que con el proyecto de Visual Studio puede integrar una "sesión de rendimiento" que perfilará la ejecución del código de su sitio web.
Si está sirviendo páginas web desde un servidor Windows, esta es la mejor herramienta que existe.
Sin embargo, se requiere una licencia separada y costosa para usar varias máquinas para cargar la aplicación de prueba.
Yo segundo la sugerencia opensta. Simplemente agregaría que le permite hacer cosas para monitorear el servidor que está probando usando SMTP. Realizamos un seguimiento de la carga del procesador, la memoria utilizada, los bytes enviados, etc. El único inconveniente es que si encuentra algo extraño y desea hacer una corrección, se basa en varias bibliotecas de código abierto que ya no están actualizadas, por lo que obtendrá una compilación La versión de la fuente es más complicada que con la mayoría de OSS.
Yo también voto por jMeter y quiero agregar algunas citas a la respuesta de @PeterBernier.
La pregunta principal que las respuestas de las pruebas de carga es ¿cuántos usuarios simultáneos puede admitir mi aplicación web? Para obtener una respuesta adecuada, las pruebas de carga deben representar el uso real de la aplicación, lo más cerca posible .
Tenga en cuenta lo anterior, jMeter tiene muchos bloques de construcción, controladores lógicos , elementos de configuración , preprocesadores , oyentes , ... que pueden ayudarlo en esto.
Puede imitar la situación del mundo real con jMeter, por ejemplo, puede:
-
Configure jMeter para que actúe como un navegador real mediante la configuración (
concurrent resource download
,browser cache
,http headers
,setting request time out
,cookie management
,https support
,encoding
,ajax support
, ...) -
Configure jMeter para generar solicitudes de usuario (definiendo la
number of users per second
,ramp-up time
scheduling
, lascheduling
, ...) - Configure muchos clientes con jMeter en ellos, para hacer una prueba de carga distribuida.
-
Procesar la respuesta para encontrar si el servidor responde correctamente durante la prueba.
(Por ejemplo,
assert
respuesta para encontrar un texto en él)
Por favor considera:
-
Es fácil iniciar una prueba de aplicación web real con jMeter en minutos.
El jMeter tiene una herramienta muy sencilla que registra su escenario de prueba (conocido como
HTTP(S) Test Script Recorder
). - jMeter tiene muchos complementos en http://jmeter-plugins.org .
- El jMeter UI está basado en el swing y ha hecho buenos cambios en jMeter 3.2. Por otro lado, tenga en cuenta que la GUI de JMeter solo debe usarse para pruebas y depuración. No es una buena práctica usarlo en modo GUI para la prueba real. https://www.blazemeter.com/blog/5-ways-launch-jmeter-test-without-using-jmeter-gui . Configure y pruebe su escenario y ejecútelo en modo no gui.
-
Hay muchos informes que muestran herramientas en jMeter (conocidos como
listeners
), pero no se supone que estén encendidos durante la prueba. Debe ejecutar su prueba y generar informes (archivos.jtl
). Luego debes usar estas herramientas para analizar el resultado. Por favor, eche un vistazo a https://www.blazemeter.com/blog/jmeter-listeners-part-1-basic-display-formats o https://www.tutorialspoint.com/jmeter/jmeter_listeners.htm .
El https://www.blazemeter.com/jmeter tiene información muy buena y práctica para ayudarlo a configurar su entorno de prueba.
WebLoad , es una herramienta bastante buena. Viene con un script de prueba IDE que le permite registrar las acciones de los usuarios en un sitio web. También dibuja un gráfico a medida que realiza la prueba de estrés en su servidor web. Pruébalo, lo recomiendo altamente.