Medición de presión JMeter utilizado por la biblioteca de herramientas de código abierto de Java

prefacio

Apache JMeter es una aplicación Java de código abierto para pruebas de rendimiento de software. Originalmente fue diseñado para pruebas de aplicaciones web, pero desde entonces se ha expandido a otras áreas de prueba. Se puede usar para probar recursos estáticos y dinámicos, como archivos estáticos, servlets Java, scripts CGI, objetos Java, bases de datos, servidores FTP y más.

JMeter proporciona una interfaz gráfica de usuario que permite a los evaluadores crear y ejecutar fácilmente planes de prueba y ver los resultados de la prueba. JMeter también puede simular una variedad de tipos de carga, incluidos recursos estáticos y dinámicos, como archivos, imágenes, videos, bases de datos, etc.

Dirección del documento oficial: https://jmeter.apache.org/usermanual/

dirección de github: https://github.com/apache/jmeter

1. Principio de concepto

1.1 Principio de JMeter

El principio básico de Jmeter es establecer un grupo de subprocesos, ejecutar la muestra en varios subprocesos para simular las solicitudes de los usuarios, verificar la corrección de los resultados a través de afirmaciones y, finalmente, registrar los resultados de la prueba a través del oyente.

RUTA

  • X1-X5 Estos componentes se utilizan para simular las acciones del usuario
  • Y1 es responsable de simular las solicitudes de los usuarios, e Y2 es responsable de verificar que los resultados sean correctos
  • Z es responsable de la recopilación de resultados

La secuencia general de ejecución es:

  1. elemento de configuración
  2. preprocesador
  3. Temporizador
  4. dechado
  5. postprocesador
  6. Afirmación
  7. oyente

Si se agrega un controlador, el orden de ejecución también está relacionado con el controlador y el alcance

1.2 Terminología de la prueba de rendimiento

el término significado Observación
test de presión Es un método de prueba utilizado para probar el rendimiento del sistema bajo carga alta Al simular una gran cantidad de usuarios que acceden al sistema, puede probar la estabilidad, la confiabilidad y el tiempo de respuesta del sistema bajo una carga alta.
número concurrente En términos generales, se refiere al número de usuarios concurrentes. El número de usuarios cuyas solicitudes están siendo procesadas por el sistema al mismo tiempo. Además del número de conexiones simultáneas, cada usuario puede abrir varias conexiones, por lo que el número de conexiones simultáneas puede ser mayor que el número de usuarios simultáneos.
rendimiento El número de solicitudes procesadas por el sistema por unidad de tiempo
SWC Consultas por segundo, el número de consultas por segundo
TPS Transacciones por segundo, el número de transacciones procesadas por segundo Para una sola interfaz, TPS puede considerarse equivalente a QPS. Por ejemplo, acceder a una página /index.html es un TPS, mientras que acceder a la página /index.html puede solicitar 3 veces para servidores como css, js e interfaces de índice. Se generaron 3 QPS.
RT Tiempo de respuesta, que representa la diferencia de tiempo desde que el cliente inicia una solicitud hasta que el servidor recibe la solicitud y responde a todos los datos. En general, tome el tiempo de respuesta promedio.
fotovoltaica Page View, es decir, el número de páginas vistas, se refiere al número de visitas a un sitio web o aplicación dentro de un período de tiempo determinado

1.3 estándares de rendimiento de proyectos web

Los siguientes son criterios generales de rendimiento del servidor de Internet

dimensión Fallar aprobar
probabilidad de tiempo de espera > 0,5‰ <0.5‰
probabilidad de error > 0,5‰ <0.5‰
TPS < pico alto esperado > pico alto esperado
utilización de la CPU > 75% <75%
evento de respuesta > tiempo mayor al esperado < tiempo deseado
Carga Carga promedio de CPU por núcleo > 1 Carga promedio de CPU por núcleo < 1
Uso de memoria JVM > 75% <75%
Frecuencia de GC completa Promedio < 0.5h1 veces Promedio > 0.5h1 veces

2. Componentes comunes

Los componentes comunes de JMeter son los siguientes:

  1. Grupo de subprocesos: se utiliza para simular la situación en la que los usuarios acceden al sistema al mismo tiempo y se pueden configurar parámetros como el número de subprocesos y el número de ciclos.
  2. Sampler: el componente que realmente accede al sistema en Jmeter, que pertenece al grupo de subprocesos
  3. Controlador: se utiliza para controlar la secuencia de ejecución y el número de iteraciones de cada elemento en el plan de prueba.
  4. Temporizador: se utiliza para simular el comportamiento del usuario al ejecutar el plan de prueba, por ejemplo, esperar un período de tiempo antes de ejecutar la siguiente solicitud.
  5. Procesadores previos y posteriores: simule el comportamiento del usuario mientras ejecuta el plan de prueba. Un preprocesador puede realizar acciones antes de emitir una solicitud de muestra, como modificar la configuración de una solicitud de muestra o actualizar variables no extraídas del texto de respuesta. Los posprocesadores pueden realizar acciones después de una solicitud de muestra, como extraer variables en el texto de respuesta o escribir datos de respuesta en un archivo.
  6. Elementos de configuración: estrechamente relacionados con los muestreadores, las solicitudes se pueden agregar o modificar
  7. Oyente: se utiliza para recopilar y mostrar los resultados de las pruebas, como el tiempo de respuesta, el código de respuesta, el mensaje de respuesta, etc.

Para las opciones desconocidas en el componente, puede acceder a Internet para consultar documentos a través de la Ayuda en la barra de menú.

2.1 Grupo de hilos

jmeter_01_thread_group

A continuación se explican algunos elementos de configuración de parámetros:

  • Rampa hasta el tiempo

    ¿Cuánto tarda JMeter en iniciar todos los subprocesos? Si hay 10 subprocesos con un tiempo de aceleración de 100 segundos, cada subproceso se iniciará dentro de los 10 segundos posteriores al inicio del subproceso anterior, por un tiempo total de 100 segundos (el primer subproceso siempre se inicia directamente) para realizar la prueba por completo. hasta la velocidad.

  • Aplazar la creación de subprocesos hasta que sea necesario

    Si está marcado, los subprocesos solo se crearán cuando haya transcurrido una proporción adecuada del tiempo de impulso. Esto es más adecuado para las pruebas que tienen tiempos de impulso que son mucho más largos que el tiempo de ejecución de un solo subproceso. Es decir, los subprocesos anteriores terminan antes de que comiencen los subprocesos posteriores. Si no se selecciona, todos los subprocesos se crearán al comienzo de la prueba (luego se pausarán durante la proporción adecuada de tiempo de impulso).

  • Programador (Duración)

    Si está marcado, puede configurar y elegir una hora de finalización relativa. JMeter usará esto para calcular la hora de finalización.

2.2 Muestreador

Cada muestreador produce uno o más resultados de muestra con varios atributos (éxito/fracaso, tiempo transcurrido, tamaño de datos, etc.) y se puede ver en diferentes oyentes. Jmeter proporciona muchas muestras: de la siguiente manera

jmeter_02_muestra

La más común es la solicitud Http.

jmeter_03_sampler_http

  • protocolo

    OpcionalHTTP, HTTPS, ARCHIVO

  • codificación de contenido

    La codificación de contenido a usar (para POST, PUT, PATCH y FILE). Esta es la codificación de caracteres a usar y es independiente del encabezado HTTP de codificación de contenido.

  • encabezados compatibles con el navegador

    Al usar datos de varias partes/formulario, esto suprimirá el tipo de contenido y la codificación de transferencia de contenido del encabezado HTTP, y solo enviará la disposición de contenido.

  • ¿codificación?

    Codificar caracteres especiales en url

  • contiene igual a?

    Al pasar una clave-valor, algunas aplicaciones no esperan un signo igual cuando el valor es una cadena vacía

2.3 Controlador

Cuando se trata de procesos de prueba más complejos, es necesario controlar el proceso de prueba general de forma similar a la secuencia de control if/for y la cantidad de ciclos en los lenguajes de programación. jmeter proporciona muchos controladores para facilitar la prueba de varios escenarios, como se muestra a continuación:

jmeter_04_controlador

Los controladores comúnmente utilizados son:

  • controlador de SI
  • Solo se usa comúnmente un escenario de inicio de sesión del controlador
  • controlador de ciclo
  • controlador aleatorio

2.4 Temporizadores

No hay demora entre las solicitudes de Jmeter, pero el trabajo real a veces necesita aumentar el tiempo fijo para probar, y a veces es necesario dejar que los subprocesos se ejecuten al mismo tiempo en un momento determinado, luego se puede usar la función de temporizador

jmeter_05_horas

2.5 Pre/Postprocesador

jmeter_07_pre

  • Un preprocesador realiza algunas operaciones antes de la solicitud de un muestreador, un muestreador posterior hace algo después.

  • Los escenarios comunes para los preprocesadores en las solicitudes HTTP incluyen: asignar una identificación de usuario diferente a cada subproceso.

  • Los posprocesadores se utilizan más comúnmente para procesar datos de respuesta.

2.6 Elementos de configuración

Config Element brinda soporte para la configuración de datos estáticos, que puede establecer valores y variables predeterminados para las muestras.

jmeter_08_config_elemento

Almacene y envíe cookies como un navegador web. Si hay una solicitud HTTP y la respuesta contiene una cookie, el administrador de cookies almacenará automáticamente la cookie y luego usará la cookie en todas las solicitudes posteriores para un sitio web en particular. Se puede ver en el árbol de resultados.

2.7 Oyentes

El oyente se utiliza para monitorear los resultados y también puede ver, guardar y leer los resultados de las pruebas guardadas.

jmeter_06_escucha

A continuación se toma el informe de agregación como ejemplo para mostrar los atributos en la tabla

Nombre del Atributo significado
Etiqueta El nombre de la etiqueta de muestra, la muestra es la solicitud Http es el nombre de la solicitud Http
Muestras El número de muestras con la misma etiqueta, la muestra es la solicitud http es el número de solicitudes enviadas
Promedio Solicitud de tiempo de respuesta, promedio
Mediana Tiempo de respuesta de pequeño a grande, en la posición del 50 %, el 50 % de las muestras no tomó más de este tiempo; el resto tomó al menos la misma cantidad de tiempo.
Línea 90% en la posición del 90%
Línea 95% en la posición del 95%
Línea 99% En la posición del 99%
mínimo valor mínimo
máx. valor máximo
Error % tasa de error de solicitud
A través de rendimiento
KB/s recibidos La tasa de datos recibidos del servidor KB/s
Enviado KB/s Tasa de datos enviados al servidor, KB/s

3. Complementos

3.1 Complementos de terceros

Jmeter 作为一个开源插件,在某些功能上比不过商业软件LoadRunner,但是有增加插件功能,可以根据自己所需安装想要的插件。

jmeter_09_jmeter_plugin

3.2 录制插件

badboy 是一款用C++开发的测试工具,被设计用于测试和开发复杂的动态应用, 但是已经很久未更新了。

用过jmeter的人都知道,jmeter测试简单点的静态页面还成,脚本制作也就三两步就搞定了。但是要是制作复杂点的测试脚步就非常困难了,比如登录系统输入用户名和密码,什么函数、参数配置之类的,肯定会把你搞晕。而且网上 jmeter 相关复杂点的案例也非常少,它本身提供的帮助文档也只有一个很简单的例子,用处不大。有了badboy就不一样了,它可以提供像 loadrouner 一样的录屏功能,不需要你自己去配置什么协议、参数、cookie manager之类的,只要你把你的测试过程录制出来,然后save as jmeter 脚本格式就ok了

官网不能访问了,网上找到一个 badboy安装包:链接: https://pan.baidu.com/s/1Ae3tLuP3q7301SzyXDGw2A 提取码: jcg5

四、JSR223 脚本及函数

4.1 JSR223 脚本

jsr233 是 java 对脚本语言的支持规范,jmeter 支持脚本语言

  • BeanShell

  • groovy

    • 一种基于JVM的敏捷开发语言,它结合了Python、Ruby和Smalltalk]的许多强大的特性
  • javascript

4.2 Variables de función

Una función JMeter es un valor especial que puede llenar el campo de cualquier muestra u otro elemento en la prueba, la sintaxis es la siguiente:

${__nombreDeFunción(var1,var2,var3)}

La sintaxis de referencia de variables de JMeter es la siguiente:

${VARIABLE}

Documentación: https://jmeter.apache.org/usermanual/functions.html

5. Casos reales

5.1 Prueba de presión de inicio de sesión

Prepare a 100 usuarios para iniciar sesión y realice una prueba de presión en la interfaz de inicio de sesión. El proyecto de prueba utiliza un proyecto de código abierto: Wei HR .

Aquí hay un procedimiento almacenado que genera usuarios:

DELIMITER $$
CREATE PROCEDURE generate_sql()
BEGIN
    DECLARE i INT DEFAULT 1;
    WHILE i <= 99 DO
        SET @sql = CONCAT("INSERT INTO `vhr`.`hr` (`name`, `phone`, `telephone`, `address`, `enabled`, `username`, `password`, `userface`, `remark`) VALUES ('系统管理员', '18568887789', '029-82881234', '深圳南山', '1', 'admin", LPAD(i, 3, '0'), "', '$2a$10$ySG2lkvjFHY5O0./CPIE1OI8VJsuKYEzOYzqIa7AJR6sEgSzUFOAm', 'http://bpic.588ku.com/element_pic/01/40/00/64573ce2edc0728.jpg', NULL);");
        PREPARE stmt FROM @sql;
        EXECUTE stmt;
        DEALLOCATE PREPARE stmt;
        SET i = i + 1;
    END WHILE;
END$$
DELIMITER ;
call generate_sql

Prepare user.csv, modifique el código para eliminar la parte del código de verificación y el rendimiento final de la prueba es de 50 por segundo

jmeter_10_example_login

5.2 Prueba de presión de la base de datos

Para realizar pruebas de presión en la base de datos, primero configure el grupo de conexiones JDBC, agregue el paquete jar del controlador al directorio lib, reinicie Jmeter y realice pruebas de presión

jmeter_11_database_stress_test

referencia

  1. https://github.com/aliesbelik/awesome-jmeter
  2. Libro de prácticas de pruebas de rendimiento de pila completa Combate real de Jmeter
  3. Dos herramientas de prueba muy útiles jmeter y badboy

Supongo que te gusta

Origin blog.csdn.net/qq_23091073/article/details/130773242
Recomendado
Clasificación