###
前面的文章,对locust进行了简单介绍和使用,
现在深入一下,
###
Locust no-web模式
熟悉 Apache ab 工具的同学都知道,它是没有界面的,通过命令行执行。 Locust 同样也提供的命令行运行,好处就是更节省客户端资源。
locust -f ./locustfile.py --host=http://127.0.0.1:5000 --headless -u 1 -r 1 -t 1m
--headless 表示不使用Web界面运行测试。
-u 设置虚拟用户数。
-r 设置每秒启动虚拟用户数。
-t 设置设置运行时间。
如果不知道怎么使用,就使用locust --help 查看一下帮助文档,
####
Locust 参数说明
是时候该讲一下 locust 工具的参数了,虽然前面几节我们已经使用了不少参数,例如 “-f” 、“–host” 等。
打开命令提示符(或Linux终端),输入 locust --help 。
Usage: locust [OPTIONS] [UserClass ...] 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 # 这是指定host -u NUM_USERS, --users NUM_USERS # 这是指定用户数 Peak number of concurrent Locust users. Primarily used together with --headless or --autostart. Can be changed during a test by keyboard inputs w, W (spawn 1, 10 users) and s, S (stop 1, 10 users) -r SPAWN_RATE, --spawn-rate SPAWN_RATE # 这是指定每秒增加的用户数 可以和 --headless一起使用 Rate to spawn users at (users per second). Primarily used together with --headless or --autostart -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 or --autostart. Defaults to run forever. -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 start the test immediately. Use -u and -t to control user count and run time # 无页面启动 --autostart Starts the test immediately (without disabling the web UI). Use -u and -t to control user count and run time --autoquit AUTOQUIT Quits Locust entirely, X seconds after the run is finished. Only used together with --autostart. The default is to keep Locust running until you shut it down using CTRL+C --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 # Locust 分布式模式使用,当前节点为 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/autostart is used). --expect-workers-max-wait EXPECT_WORKERS_MAX_WAIT How long should the master wait for workers to connect before giving up. Defaults to wait forever Worker options: Options for running a Locust Worker node when running Locust distributed. # 这是分布式的一个节点, Only the LOCUSTFILE (-f option) needs 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 ...], --tags [TAG ...] List of tags to include in the test, so only tasks with any matching tags will be executed -E [TAG ...], --exclude-tags [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 --html HTML_FILE Store HTML report file # 这是输出html报告 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 stderr 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. --equal-weights Use equally distributed task weights, overriding the weights specified in the locustfile. --enable-rebalancing Allow to automatically rebalance users if new workers are added or removed during a test run. User classes: UserClass Optionally specify which User classes that should be used (available User classes can be listed with -l or --list)
###
分布式运行Locust
一旦单台机器不够模拟足够多的用户时,Locust支持运行在多台机器中进行压力测试。
为了实现这个,你应该在 master 模式中使用--master标记来启用一个 Locust 实例。这个实例将会运行你启动测试的 Locust 交互网站并查看实时统计数据。master 节点的机器自身不会模拟任何用户。
相反,你必须使用 --worker 标记启动一台到多台 Locust worker 机器节点,与标记 --master-host 一起使用(指出master机器的IP/hostname)。
常用的做法是在一台独立的机器中运行master,在worker机器中每个处理器内核运行一个worker实例。
注意:master 和每一台 worker 机器,在运行分布式测试时都必须要有 locust 的测试文件。
示例
在 master 模式下启动 Locust:
locust -f my_loucstfile.py --master
在每个 worker 中执行(192.168.0.14 替换为你 msater 的IP):
locust -f my_locustfile.py --worker --master-host=192.168.0.14
参数说明
参数
–master 设置 Locust 为 master 模式。网页交互会在这台节点机器中运行。
–worker 设置 Locust 为 slave 模式。
–master-host=X.X.X.X 可选项,与 --slave 一起结合使用,用于设置 master 模式下的 master 机器的IP/hostname(默认设置为127.0.0.1)
–master-port=5557 可选项,与 --slave 一起结合使用,用于设置 master 模式下的 master 机器中 Locust 的端口(默认为5557)。注意,locust 将会使用这个指定的端口号,同时指定端口+1的号也会被占用。因此,5557 会被使用,Locust将会使用 5557 和 5558。
–master-bind-host=X.X.X.X` 可选项,与 --master 一起结合使用。决定在 master 模式下将会绑定什么网络接口。默认设置为*(所有可用的接口)。
–master-bind-port=5557 可选项,与 --master 一起结合使用。决定哪个网络端口 master 模式将会监听。默认设置为 5557。注意 Locust 会使用指定的端口号,同时指定端口+1的号也会被占用。因此,5557 会被使用,Locust 将会使用 5557 和 5558。
–expect-worker=X 在 no-web 模式下启动 master 时使用。master 将等待X连接节点在测试开始之前连接。
####
locust的类和方法
针对你的业务,你如何进行测试测试,需要通过编写性能测试脚本实现。所以,我们要熟悉 Locust 提供了哪些类和方法,它们分别实现什么操作。
还是要看官网的例子:https://docs.locust.io/en/stable/writing-a-locustfile.html
Now, lets look at a more complete/realistic example of what your tests might look like:
一个更复杂,更真实的例子
import time from locust import HttpUser, task, between class QuickstartUser(HttpUser): wait_time = between(1, 5) @task def hello_world(self): self.client.get("/hello") self.client.get("/world") @task(3) def view_items(self): for item_id in range(10): self.client.get(f"/item?id={item_id}", name="/item") time.sleep(1) def on_start(self): self.client.post("/login", json={"username":"foo", "password":"bar"})
##
1,继承HttpUser,然后就会有一个client方法
2,wait_time = between(1, 5),Our class defines a wait_time that will make the simulated users wait between 1 and 5 seconds after each task (see below) is executed.
3,view_items(self): In the view_items task we load 10 different URLs by using a variable query parameter.
4,还有很多,后面要细细研究一下,
https://docs.locust.io/en/stable/api.html
这是完整的官网的locust的类和方法的文档,
###
####