Discusión en profundidad sobre las pruebas de desempeño, desde la entrada hasta el abandono: Automatización del desempeño de Locust (1) Primer encuentro con 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
Inserte la descripción de la imagen aquí

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! ! !

Supongo que te gusta

Origin blog.csdn.net/wuyoudeyuer/article/details/108596264
Recomendado
Clasificación