Conociendo a Locust
1. Introducción básica a Locust
1.1 Introducción
Ahora, ya sea en la industria de Internet o en la industria tradicional, los requisitos de rendimiento aumentan día a día.
Para localizar problemas de forma más rápida y precisa, encontrar y resolver problemas,
han aparecido en el mercado cada vez más herramientas de prueba de rendimiento, como Jmeter. , Loadrunner, Locus, etc., y hoy presentamos principalmente Locust!
Mucha gente no sabe qué es Locust, incluidos los que usan Python, porque no lo involucran, por lo que no lo sabrán.
Entonces, ¿qué es Loucst y la función de Locust, qué es? Sigue a
Xiaoyu, mira hacia abajo. ~
1.2 Introducción
Locust es una herramienta de prueba de rendimiento de código abierto desarrollada en Python, basada en eventos, que admite interfaz de usuario web distribuida y para la ejecución de pruebas y visualización de resultados.
1. Comparación de los
recursos ocupados por Locust y Jmeter La razón por la cual Locust supera al Jmeter de código abierto en términos de ocupación de recursos es
principalmente porque:
>> Los dos modos de usuarios son diferentes:
①Jmeter usa hilos como un usuario virtual
②Locust usa la biblioteca gevent para la corrutina Apoyo, emularte con greenlet.
Por lo tanto, bajo la misma configuración, el número de usuarios simultáneos que Locust puede admitir es más de un nivel más alto que Jmeter.
2.
Locust usa el lenguaje Locust usa código Python para definir escenarios de prueba, actualmente es compatible con Python2.7, 3.3 ~ 3.7.
Viene con una interfaz de usuario web para definir modelos de usuario, iniciar pruebas, datos de prueba en tiempo real, estadísticas de errores, etc.
3. Documento oficial Para
obtener contenido más detallado, consulte:
1. Contenido del documento, haga clic en: documento oficial
2. Código fuente, haga clic en: Github
2. Método de instalación de Locsut
Del mismo modo, podemos instalar directamente con pip
2.1 Instalar langosta
pip install locust
2.2 Instalar pyzmq
Si planea ejecutar Locust en múltiples procesos / procesos, necesita instalar pyzmq y
también usar pip para instalar
pip install pyzmq
Nota:
Si instala la versión locust-1.2.3 , es posible que no necesite instalar pyzmq nuevamente,
parece que se instala directamente con pyzmq
2.3 Confirmación de instalación exitosa
Abra la ventana de cmd e ingrese directamente
locust --help
Si aparece la siguiente imagen, la instalación se realizó correctamente
3. Descripción del parámetro de langosta
Después de que la instalación de la figura anterior sea exitosa, analicemos los parámetros
3.1 Información de parámetros
Primero copiamos toda la información en langosta --ayuda
Common options:
-h, --help show this help message and exit
-f LOCUSTFILE, --locustfile LOCUSTFILE
Python module file to import, e.g. '../other.py'.
Default: locustfile
--config CONFIG Config file path
-H HOST, --host HOST Host to load test in the following format:
http://10.21.32.33
-u NUM_USERS, --users NUM_USERS
Number of concurrent Locust users. Primarily used
together with --headless
-r SPAWN_RATE, --spawn-rate SPAWN_RATE
The rate per second in which users are spawned.
Primarily used together with --headless
-t RUN_TIME, --run-time RUN_TIME
Stop after the specified amount of time, e.g. (300s,
20m, 3h, 1h30m, etc.). Only used together with
--headless
-l, --list Show list of possible User classes and exit
Web UI options:
--web-host WEB_HOST Host to bind the web interface to. Defaults to '*'
(all interfaces)
--web-port WEB_PORT, -P WEB_PORT
Port on which to run web host
--headless Disable the web interface, and instead start the load
test immediately. Requires -u and -t to be specified.
--web-auth WEB_AUTH Turn on Basic Auth for the web interface. Should be
supplied in the following format: username:password
--tls-cert TLS_CERT Optional path to TLS certificate to use to serve over
HTTPS
--tls-key TLS_KEY Optional path to TLS private key to use to serve over
HTTPS
Master options:
Options for running a Locust Master node when running Locust distributed. A Master node need Worker nodes that connect to it before it can run load tests.
--master Set locust to run in distributed mode with this
process as master
--master-bind-host MASTER_BIND_HOST
Interfaces (hostname, ip) that locust master should
bind to. Only used when running with --master.
Defaults to * (all available interfaces).
--master-bind-port MASTER_BIND_PORT
Port that locust master should bind to. Only used when
running with --master. Defaults to 5557.
--expect-workers EXPECT_WORKERS
How many workers master should expect to connect
before starting the test (only when --headless used).
Worker options:
Options for running a Locust Worker node when running Locust distributed.
Only the LOCUSTFILE (-f option) need to be specified when starting a Worker, since other options such as -u, -r, -t are specified on the Master node.
--worker Set locust to run in distributed mode with this
process as worker
--master-host MASTER_NODE_HOST
Host or IP address of locust master for distributed
load testing. Only used when running with --worker.
Defaults to 127.0.0.1.
--master-port MASTER_NODE_PORT
The port to connect to that is used by the locust
master for distributed load testing. Only used when
running with --worker. Defaults to 5557.
Tag options:
Locust tasks can be tagged using the @tag decorator. These options let specify which tasks to include or exclude during a test.
-T [TAG [TAG ...]], --tags [TAG [TAG ...]]
List of tags to include in the test, so only tasks
with any matching tags will be executed
-E [TAG [TAG ...]], --exclude-tags [TAG [TAG ...]]
List of tags to exclude from the test, so only tasks
with no matching tags will be executed
Request statistics options:
--csv CSV_PREFIX Store current request stats to files in CSV format.
Setting this option will generate three files:
[CSV_PREFIX]_stats.csv, [CSV_PREFIX]_stats_history.csv
and [CSV_PREFIX]_failures.csv
--csv-full-history Store each stats entry in CSV format to
_stats_history.csv file. You must also specify the '--
csv' argument to enable this.
--print-stats Print stats in the console
--only-summary Only print the summary stats
--reset-stats Reset statistics once spawning has been completed.
Should be set on both master and workers when running
in distributed mode
Logging options:
--skip-log-setup Disable Locust's logging setup. Instead, the
configuration is provided by the Locust test or Python
defaults.
--loglevel LOGLEVEL, -L LOGLEVEL
Choose between DEBUG/INFO/WARNING/ERROR/CRITICAL.
Default is INFO.
--logfile LOGFILE Path to log file. If not set, log will go to
stdout/stderr
Step load options:
--step-load Enable Step Load mode to monitor how performance
metrics varies when user load increases. Requires
--step-users and --step-time to be specified.
--step-users STEP_USERS
User count to increase by step in Step Load mode. Only
used together with --step-load
--step-time STEP_TIME
Step duration in Step Load mode, e.g. (300s, 20m, 3h,
1h30m, etc.). Only used together with --step-load
Other options:
--show-task-ratio Print table of the User classes' task execution ratio
--show-task-ratio-json
Print json data of the User classes' task execution
ratio
--version, -V Show program's version number and exit
--exit-code-on-error EXIT_CODE_ON_ERROR
Sets the process exit code to use when a test result
contain any failure or error
-s STOP_TIMEOUT, --stop-timeout STOP_TIMEOUT
Number of seconds to wait for a simulated user to
complete any executing task before exiting. Default is
to terminate immediately. This parameter only needs to
be specified for the master process when running
Locust distributed.
User classes:
UserClass Optionally specify which User classes that should be
used (available User classes can be listed with -l or
--list)
3.2 Análisis de información de parámetros
Aquí, solo la mayor parte está escrita. En cuanto a las partes que faltan, Xiaoyu siente que no se usa con frecuencia, por lo que no desperdiciará electricidad ~ ¡Después de todo, 1 kilovatio-hora de electricidad es más de 1 yuan! !
Además, Xiaoyu va a almorzar ~
-h, --help 查看帮助
-H HOST, --host=HOST 指定被测试的主机,采用以格式:http://10.21.32.33
--web-host=WEB_HOST 指定运行 Locust Web 页面的主机,默认为空 ''。
-P PORT, --port=PORT, --web-port=PORT 指定 --web-host 的端口,默认是8089
-f LOCUSTFILE, --locustfile=LOCUSTFILE 指定运行 Locust 性能测试文件,默认为: locustfile.py
--csv=CSVFILEBASE, --csv-base-name=CSVFILEBASE 以CSV格式存储当前请求测试数据。
--master Locust 分布式模式使用,当前节点为 master 节点。
--slave Locust 分布式模式使用,当前节点为 slave 节点。
--master-host=MASTER_HOST 分布式模式运行,设置 master 节点的主机或 IP 地址,只在与 --slave 节点一起运行时使用,默认为:127.0.0.1.
--master-port=MASTER_PORT 分布式模式运行, 设置 master 节点的端口号,只在与 --slave 节点一起运行时使用,默认为:5557。注意,slave 节点也将连接到这个端口+1 上的 master 节点。
--master-bind-host=MASTER_BIND_HOST Interfaces (hostname, ip) that locust master should bind to. Only used when running with --master. Defaults to * (all available interfaces).
--master-bind-port=MASTER_BIND_PORT Port that locust master should bind to. Only used when running with --master. Defaults to 5557. Note that Locust will also use this port + 1, so by default the master node will bind to 5557 and 5558.
--expect-slaves=EXPECT_SLAVES How many slaves master should expect to connect before starting the test (only when --no-web used).
--no-web no-web 模式运行测试,需要 -c 和 -r 配合使用.
-c NUM_CLIENTS, --clients=NUM_CLIENTS 指定并发用户数,作用于 --no-web 模式。
-r HATCH_RATE, --hatch-rate=HATCH_RATE 指定每秒启动的用户数,作用于 --no-web 模式。
-t RUN_TIME, --run-time=RUN_TIME 设置运行时间, 例如: (300s, 20m, 3h, 1h30m). 作用于 --no-web 模式。
-L LOGLEVEL, --loglevel=LOGLEVEL 选择 log 级别(DEBUG/INFO/WARNING/ERROR/CRITICAL). 默认是 INFO.
--logfile=LOGFILE 日志文件路径。如果没有设置,日志将去 stdout/stderr
--print-stats 在控制台中打印数据
--only-summary 只打印摘要统计
--no-reset-stats Do not reset statistics once hatching has been completed。
-l, --list 显示测试类, 配置 -f 参数使用
--show-task-ratio 打印 locust 测试类的任务执行比例,配合 -f 参数使用.
--show-task-ratio-json 以 json 格式打印 locust 测试类的任务执行比例,配合 -f 参数使用.
-V, --version 查看当前 Locust 工具的版本.
3.3 Biblioteca principal de Locust
① gevent
gevent es una biblioteca de red de Python basada en corrutinas. Utiliza la API de sincronización de alto nivel proporcionada por Greenlet y encapsula el bucle de eventos de libevent.
② Un marco de aplicación web ligero escrito en un matraz
Python.
Si desea comprender el matraz y el código real, lea este artículo de Xiaoyu:
"Python3, creación de sitios web y proyecto de construcción de matraces"
③ Las solicitudes de
la biblioteca HTTP de Python
pueden consultar este artículo de Xiaoyu "Siete métodos principales comúnmente utilizados en la biblioteca de solicitudes y controlar los parámetros de acceso"
④ msgpack-python
MessagePack es un formato de serialización binario rápido y compacto, adecuado para formatos de datos similares a JSON. msgpack-python proporciona principalmente métodos para serializar y deserializar datos de MessagePack.
⑤ seis
bibliotecas compatibles con Python2 y 3, que se utilizan para encapsular las diferencias entre Python2 y Python3
⑥ pyzmq
pyzmq es un enlace Python de zeromq (una cola de comunicación), que se utiliza principalmente para realizar la operación en modo distribuido de Locust.
4. Descripción de la clase de langosta
4.1 atributos del cliente
①En la clase Locust, el cliente de campo estático es el método de solicitud del cliente. El campo del cliente aquí no está vinculado al método de solicitud del cliente. Por lo tanto, cuando use Locust, primero debe heredar la clase de clase Locust HttpLocust (Locust) y luego establecer self.client = HttpSession (base_url = self.host) vincula el método de solicitud del cliente;
②Para el protocolo HTTP (s) común, Locust ha implementado la clase HttpLocust, con self.client = HttpSession (base_url = self.host) , y HttpSession hereda de las solicitudes.Session.
③En el script Locust para probar HTTP (s), todos los métodos de la biblioteca de solicitudes de Python se pueden usar a través del atributo de cliente , y el método de llamada es exactamente el mismo que el de reqeusts .
④ Debido al uso de las solicitudes . Sesión , la función de memoria de estado se proporciona automáticamente entre las llamadas al método del cliente.
⑤ El escenario común es que después de iniciar sesión en el sistema, la sesión puede mantener el estado de inicio de sesión , de modo que las operaciones de solicitud HTTP posteriores puedan traer el estado de inicio de sesión .
4.2 Otros atributos
4.2.1 conjunto de tareas
Apunta a una clase TaskSet, la clase TaskSet define la información de la tarea del usuario, este campo estático es obligatorio.
4.2.2 espera_máx / espera_mín
Los límites superior e inferior (milisegundos) del intervalo para que cada usuario realice dos tareas. El valor específico se selecciona aleatoriamente de los límites superior e inferior. Si no se especifica, el intervalo predeterminado es 1 segundo.
4.2.3 anfitrión
El host del sistema probado solo se usa cuando el parámetro -host no se especifica al iniciar locust en el terminal.
4.2.4 peso
Cuando se ejecutan varias clases de Locust al mismo tiempo, se utiliza para controlar el peso de ejecución de diferentes tipos de tareas.
5. Proceso de ejecución de Loucst
El proceso específico es el siguiente:
① se realiza primero on_start (solo una vez) WebsiteTasks es, como la inicialización;
② Seleccione aleatoriamente de WebsiteTasks (si la relación de peso entre las tareas está definida, luego seleccione aleatoriamente de acuerdo con la relación de peso) una tarea para ejecutar;
③ El intervalo de tiempo y la clase Locust min_wait MAX_WAIT definidos (si la clase también está definida taskset o min_wait MAX_WAIT, preferentemente en taskset), aleatoriamente en un rango de valores de tiempo, espera inactiva;
④ Repita los pasos 2 ~ 3 hasta que finalice la tarea de prueba.
6. Comparación de herramientas de prueba de desempeño
Con respecto a cómo elegir las herramientas de prueba de rendimiento, Xiaoyu escribió en " Hablando en profundidad sobre las pruebas de rendimiento, desde el comienzo hasta el abandono: las pruebas de rendimiento por primera vez "
Cada herramienta tiene su propio valor, es decir, existencia significa significado.
A continuación, Xiaoyu te dará un análisis, Jmeter, Loadrunner, Locust estas tres herramientas.
proyecto | Jmeter | Loadrunner | Langosta |
---|---|---|---|
Método de autorización | Fuente abierta | Cargos comerciales | Fuente abierta |
Lenguaje de desarrollo | Java | C / Java | Pyhton |
Formulario de secuencia de comandos de prueba | GUI | C / Java | Pitón |
Mecanismo de concurrencia | Hilo | Proceso / hilo | Coroutine |
Simultaneidad de una sola máquina | bajo | bajo | alto |
Presión distribuida | colocarse | colocarse | colocarse |
Monitoreo de recursos | no apoyo | colocarse | no apoyo |
Informe y análisis | Gráfico simple | Perfecto | Gráfico simple |
Apoyar el desarrollo secundario | colocarse | no apoyo | colocarse |
En comparación, se puede ver que Locust no es dominante. Sin embargo, a Xiaoyu le gusta usar esto
porque:
1. Primero, simula las operaciones del usuario.
Locust usa la descripción del script Pure Python, y las solicitudes HTTP se basan completamente en la biblioteca Requests.
②Requests es una biblioteca muy concisa y fácil de usar, pero tiene funciones muy poderosas. Muchas bibliotecas HTTP en otros lenguajes de programación han tomado prestadas sus ideas y patrones. Si se selecciona como una de las mejores bibliotecas HTTP (sin limitación de idioma), debería ser No habrá mucha controversia.
③Además del protocolo HTTP (S), Locust también puede probar otros sistemas de cualquier protocolo, y solo necesita usar Python para llamar a la biblioteca correspondiente para la descripción de la solicitud.
2. Mecanismo de concurrencia
① Locust mecanismo de concurrencia 's adopta el mecanismo de GEvent .
②Cuando se utilizan múltiples subprocesos para simular múltiples usuarios, la cantidad de subprocesos aumentará a medida que aumenta la cantidad de simultaneidad , y el cambio entre subprocesos requiere recursos. El bloqueo de IO y la suspensión de subprocesos conducirán inevitablemente a una disminución en la eficiencia de concurrencia; Por esta razón, las herramientas de prueba como LoadRunner y Jmeter que utilizan procesos y subprocesos son difíciles de simular una alta presión de concurrencia en una sola máquina.
③La diferencia entre la corrutina y el subproceso es : la corrutina evita la programación de recursos a nivel del sistema, lo que mejora considerablemente el rendimiento.
④ En circunstancias normales, una sola máquina de prueba con una configuración común puede producir miles de presiones simultáneas, lo que es imposible para LoadRunner y Jmeter.
7. Lucha contra la langosta
La parte del código real, la puse en el segundo capítulo para mostrarla.
Puede hacer clic directamente para enviar
"Prueba de rendimiento de chat profundo, desde la entrada hasta el abandono: Automatización de rendimiento de langosta (2) Código de combate real"
Xiao Diaosi: Hermano Yu, ¿puedes compartir un poco primero, cuál es la interfaz de Locust?
Xiaoyu: Uh, no puedes esperar ~~
Xiao Diaosi: No lo creo, solo da una foto y mira, ¿cuál es el lugar de Niu X?
Xiaoyu: ¡Está bien, esperando mañana! ¡Tengo que comer! ! !