当我们做Web
系统性能测试方案时,压力模拟工具的选择通常是一个绕不开的环节。对于大部分互联网公司的业务规模和测试资源投入,JMeter
这个老牌开源性能测试工具能够满足大部分测试需求,它也可能是世面上书籍、博客教程丰富程度仅次于LoadRunner
的性能测试工具。然而当我们的场景需要模拟的并发用户数以千为单位时,使用JMeter
的成本越来越大,甚至超出我们掌握的资源。此时,我们开始寻找更低成本的方案,而Locust
,为这样的方案带来了一种可能。
Locust
是开源、使用Python
开发、基于事件、支持分布式并且提供WebUI
进行测试执行和结果展示的性能测试工具。而它之所以能够在资源占用方面明显优于JMeter
,一个关键点在于两者模拟虚拟用户的方式不同,JMeter
通过线程来作为虚拟用户,而Locust
借助gevent
库对协程的支持,以greenlet
来实现对用户的模拟,相同配置下Locust
能支持的并发用户数相比JMeter
可以达到一个数量级的提升。
Locust
使用Python
代码定义测试场景,目前支持Python 2.7
,Python 3.+
。它自带一个Web UI
,用于定义用户模型,发起测试,实时测试数据,错误统计等,在最新正式发布的Locust v1.0b2
,还提供QPS
、评价响应时间等几个简单的图表。
·Python
书写场景
·无需笨重的UI
或XML
。仅仅是代码,协程而不是回调。
·分布式,可扩展和,支持成千上万的用户
·基于Web
的用户界面
·Locust
有整洁HTML
+ JS
用户界面,实时展示测试细节,跨平台和易于扩展
·可以测试任何系统
·可控制
·事件完全由gevent
处理
注:大并发量测试时,建议在linux
系统下进行。
pip install locust 或(选择对应pip命令安装) pip3 install locust
如果打算运行Locust
分布在多个进程/机器,需要安装pyzmq
pip install pyzmq 或(选择对应pip命令安装) pip3 install pyzmq
执行"locust --help
"能看到如下信息表示安装成功:
C:\Users\acer>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 -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)
-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 工具的版本.
分布式测试需要安装pyzmq
。尽管locustio
可以在Windows
运行,但是考虑效率不推荐!!!
1) gevent
gevent
是一种基于协程的Python
网络库,它用到Greenlet
提供的,封装了libevent
事件循环的高层同步API
。
2) flask
Python
编写的轻量级Web
应用框架。
3) requests
Python
Http
库。
4) msgpack-python
MessagePack
是一种快速、紧凑的二进制序列化格式,适用于类似JSON
的数据格式。msgpack-python
主要提供MessagePack
数据序列化及反序列化的方法。
5) six
Python2
和Python3
兼容库,用来封装Python2
和Python3
之间的差异性。
6) pyzmq
pyzmq
是zeromq
(一种通信队列)的Python
绑定,主要用来实现Locust
的分布式模式运行。
当我们在安装 Locust
时,它会检测我们当前的 Python
环境是否已经安装了这些库,如果没有安装,它会先把这些库一一装上。并且对这些库版本有要求,有些是必须等于某版本,有些是大于某版本。我们也可以事先把这些库全部按要求装好,再安装Locust
时就会快上许多。
先编辑一个简单的basic.py
的脚本
from locust import HttpLocust, TaskSet, task class UserBehavior(TaskSet): def on_start(self): """ on_start is called when a Locust start before any task is scheduled """ self.login() def login(self): pass @task(2) def index(self): self.client.get("/") @task(1) def profile(self): self.client.get("/address.html") class WebsiteUser(HttpLocust): task_set = UserBehavior min_wait = 5000 max_wait = 9000
HttpLocust
继承自Locust
,添加了client
属性。
client
属性是HttpSession
实例,可以用于生成HTTP
请求。on_start
为client
初始化时执行的步骤。task
表示下面方法是测试内容,里面的数字执行比例,这里about
页面占三分之一,主页占三分之二。task_set
指定client
执行的类。min_wait
和max_wait
为两次执行之间的最小和最长等待时间。
locust -d basic.py --host=https://www.baidu.com
通过浏览器访问localhost:8089
<
如遇到安装失败如下时请安装pip install -U setuptools
pip install -U --pre locustio
Microsoft Windows [版本 10.0.19041.508] (c) 2020 Microsoft Corporation. 保留所有权利。 C:\Users\acer>pip install locustio Collecting locustio Downloading locustio-0.999.tar.gz (267 kB) |████████████████████████████████| 267 kB 344 kB/s Using legacy setup.py install for locustio, since package 'wheel' is not installed. Installing collected packages: locustio Running setup.py install for locustio ... error ERROR: Command errored out with exit status 1: command: 'c:\users\acer\appdata\local\programs\python\python38\python.exe' -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'C:\\Users\\acer\\AppData\\Local\\Temp\\pip-install-39qaqqj7\\locustio\\setup.py'"'"'; __file__='"'"'C:\\Users\\acer\\AppData\\Local\\Temp\\pip-install-39qaqqj7\\locustio\\setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' install --record 'C:\Users\acer\AppData\Local\Temp\pip-record-9loncaof\install-record.txt' --single-version-externally-managed --compile --install-headers 'c:\users\acer\appdata\local\programs\python\python38\Include\locustio' cwd: C:\Users\acer\AppData\Local\Temp\pip-install-39qaqqj7\locustio\ Complete output (4 lines): running install **** Locust package has moved from 'locustio' to 'locust'. Please update your reference (or pin your version to 0.14.6 if you dont want to update to 1.0) **** ---------------------------------------- ERROR: Command errored out with exit status 1: 'c:\users\acer\appdata\local\programs\python\python38\python.exe' -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'C:\\Users\\acer\\AppData\\Local\\Temp\\pip-install-39qaqqj7\\locustio\\setup.py'"'"'; __file__='"'"'C:\\Users\\acer\\AppData\\Local\\Temp\\pip-install-39qaqqj7\\locustio\\setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' install --record 'C:\Users\acer\AppData\Local\Temp\pip-record-9loncaof\install-record.txt' --single-version-externally-managed --compile --install-headers 'c:\users\acer\appdata\local\programs\python\python38\Include\locustio' Check the logs for full command output. WARNING: You are using pip version 20.1.1; however, version 20.2.3 is available. You should consider upgrading via the 'c:\users\acer\appdata\local\programs\python\python38\python.exe -m pip install --upgrade pip' command. C:\Users\acer>pip install -U setuptools Collecting setuptools Downloading setuptools-50.3.0-py3-none-any.whl (785 kB) |████████████████████████████████| 785 kB 386 kB/s Installing collected packages: setuptools Attempting uninstall: setuptools Found existing installation: setuptools 47.1.0 Uninstalling setuptools-47.1.0: Successfully uninstalled setuptools-47.1.0 Successfully installed setuptools-50.3.0 WARNING: You are using pip version 20.1.1; however, version 20.2.3 is available. You should consider upgrading via the 'c:\users\acer\appdata\local\programs\python\python38\python.exe -m pip install --upgrade pip' command. C:\Users\acer>pip install -U --pre locustio Collecting locustio Downloading locustio-1.0b2-py3-none-any.whl (282 kB) |████████████████████████████████| 282 kB 386 kB/s Collecting pyzmq>=16.0.2 Downloading pyzmq-19.0.2-cp38-cp38-win_amd64.whl (1.0 MB) |████████████████████████████████| 1.0 MB 6.8 MB/s Collecting geventhttpclient-wheels==1.3.1.dev3 Downloading geventhttpclient_wheels-1.3.1.dev3-cp38-cp38-win_amd64.whl (53 kB) |████████████████████████████████| 53 kB ... Collecting ConfigArgParse>=1.0 Downloading ConfigArgParse-1.2.3.tar.gz (42 kB) |████████████████████████████████| 42 kB ... Collecting psutil>=5.6.7 Downloading psutil-5.7.2-cp38-cp38-win_amd64.whl (243 kB) |████████████████████████████████| 243 kB 6.4 MB/s Collecting msgpack>=0.6.2 Downloading msgpack-1.0.0-cp38-cp38-win_amd64.whl (73 kB) |████████████████████████████████| 73 kB ... Collecting requests>=2.9.1 Downloading requests-2.24.0-py2.py3-none-any.whl (61 kB) |████████████████████████████████| 61 kB 4.5 MB/s Collecting gevent>=1.5.0 Downloading gevent-20.9.0-cp38-cp38-win_amd64.whl (1.5 MB) |████████████████████████████████| 1.5 MB 6.4 MB/s Collecting Flask-BasicAuth>=0.2.0 Downloading Flask-BasicAuth-0.2.0.tar.gz (16 kB) Collecting flask>=0.10.1 Downloading Flask-1.1.2-py2.py3-none-any.whl (94 kB) |████████████████████████████████| 94 kB 6.8 MB/s Collecting certifi Downloading certifi-2020.6.20-py2.py3-none-any.whl (156 kB) |████████████████████████████████| 156 kB ... Collecting six Downloading six-1.15.0-py2.py3-none-any.whl (10 kB) Collecting idna<3,>=2.5 Downloading idna-2.10-py2.py3-none-any.whl (58 kB) |████████████████████████████████| 58 kB ... Collecting urllib3!=1.25.0,!=1.25.1,<1.26,>=1.21.1 Downloading urllib3-1.25.10-py2.py3-none-any.whl (127 kB) |████████████████████████████████| 127 kB 6.4 MB/s Collecting chardet<4,>=3.0.2 Downloading chardet-3.0.4-py2.py3-none-any.whl (133 kB) |████████████████████████████████| 133 kB 6.4 MB/s Collecting cffi>=1.12.2; platform_python_implementation == "CPython" and sys_platform == "win32" Downloading cffi-1.14.3-cp38-cp38-win_amd64.whl (179 kB) |████████████████████████████████| 179 kB 6.8 MB/s Requirement already satisfied, skipping upgrade: setuptools in c:\users\acer\appdata\local\programs\python\python38\lib\site-packages (from gevent>=1.5.0->locustio) (50.3.0) Collecting greenlet>=0.4.17; platform_python_implementation == "CPython" Downloading greenlet-0.4.17-cp38-cp38-win_amd64.whl (19 kB) Collecting zope.event Downloading zope.event-4.5.0-py2.py3-none-any.whl (6.8 kB) Collecting zope.interface Downloading zope.interface-5.1.0-cp38-cp38-win_amd64.whl (194 kB) |████████████████████████████████| 194 kB 6.4 MB/s Collecting click>=5.1 Downloading click-7.1.2-py2.py3-none-any.whl (82 kB) |████████████████████████████████| 82 kB 5.8 MB/s Collecting itsdangerous>=0.24 Downloading itsdangerous-2.0.0a1-py3-none-any.whl (16 kB) Collecting Jinja2>=2.10.1 Downloading Jinja2-3.0.0a1-py3-none-any.whl (121 kB) |████████████████████████████████| 121 kB ... Collecting Werkzeug>=0.15 Downloading Werkzeug-1.0.1-py2.py3-none-any.whl (298 kB) |████████████████████████████████| 298 kB ... Collecting pycparser Downloading pycparser-2.20-py2.py3-none-any.whl (112 kB) |████████████████████████████████| 112 kB ... Collecting MarkupSafe>=1.1 Downloading MarkupSafe-2.0.0a1-cp38-cp38-win_amd64.whl (14 kB) Using legacy setup.py install for ConfigArgParse, since package 'wheel' is not installed. Using legacy setup.py install for Flask-BasicAuth, since package 'wheel' is not installed. Installing collected packages: pyzmq, certifi, pycparser, cffi, greenlet, zope.event, zope.interface, gevent, six, geventhttpclient-wheels, ConfigArgParse, psutil, msgpack, idna, urllib3, chardet, requests, click, itsdangerous, MarkupSafe, Jinja2, Werkzeug, flask, Flask-BasicAuth, locustio Running setup.py install for ConfigArgParse ... done Running setup.py install for Flask-BasicAuth ... done Successfully installed ConfigArgParse-1.2.3 Flask-BasicAuth-0.2.0 Jinja2-3.0.0a1 MarkupSafe-2.0.0a1 Werkzeug-1.0.1 certifi-2020.6.20 cffi-1.14.3 chardet-3.0.4 click-7.1.2 flask-1.1.2 gevent-20.9.0 geventhttpclient-wheels-1.3.1.dev3 greenlet-0.4.17 idna-2.10 itsdangerous-2.0.0a1 locustio-1.0b2 msgpack-1.0.0 psutil-5.7.2 pycparser-2.20 pyzmq-19.0.2 requests-2.24.0 six-1.15.0 urllib3-1.25.10 zope.event-4.5.0 zope.interface-5.1.0 WARNING: You are using pip version 20.1.1; however, version 20.2.3 is available. You should consider upgrading via the 'c:\users\acer\appdata\local\programs\python\python38\python.exe -m pip install --upgrade pip' command. C:\Users\acer>pip install locustio Requirement already satisfied: locustio in c:\users\acer\appdata\local\programs\python\python38\lib\site-packages (1.0b2) Requirement already satisfied: flask>=0.10.1 in c:\users\acer\appdata\local\programs\python\python38\lib\site-packages (from locustio) (1.1.2) Requirement already satisfied: pyzmq>=16.0.2 in c:\users\acer\appdata\local\programs\python\python38\lib\site-packages (from locustio) (19.0.2) Requirement already satisfied: geventhttpclient-wheels==1.3.1.dev3 in c:\users\acer\appdata\local\programs\python\python38\lib\site-packages (from locustio) (1.3.1.dev3) Requirement already satisfied: Flask-BasicAuth>=0.2.0 in c:\users\acer\appdata\local\programs\python\python38\lib\site-packages (from locustio) (0.2.0) Requirement already satisfied: msgpack>=0.6.2 in c:\users\acer\appdata\local\programs\python\python38\lib\site-packages (from locustio) (1.0.0) Requirement already satisfied: gevent>=1.5.0 in c:\users\acer\appdata\local\programs\python\python38\lib\site-packages (from locustio) (20.9.0) Requirement already satisfied: psutil>=5.6.7 in c:\users\acer\appdata\local\programs\python\python38\lib\site-packages (from locustio) (5.7.2) Requirement already satisfied: ConfigArgParse>=1.0 in c:\users\acer\appdata\local\programs\python\python38\lib\site-packages (from locustio) (1.2.3) Requirement already satisfied: requests>=2.9.1 in c:\users\acer\appdata\local\programs\python\python38\lib\site-packages (from locustio) (2.24.0) Requirement already satisfied: click>=5.1 in c:\users\acer\appdata\local\programs\python\python38\lib\site-packages (from flask>=0.10.1->locustio) (7.1.2) Requirement already satisfied: Jinja2>=2.10.1 in c:\users\acer\appdata\local\programs\python\python38\lib\site-packages (from flask>=0.10.1->locustio) (3.0.0a1) Requirement already satisfied: Werkzeug>=0.15 in c:\users\acer\appdata\local\programs\python\python38\lib\site-packages (from flask>=0.10.1->locustio) (1.0.1) Requirement already satisfied: itsdangerous>=0.24 in c:\users\acer\appdata\local\programs\python\python38\lib\site-packages (from flask>=0.10.1->locustio) (2.0.0a1) Requirement already satisfied: six in c:\users\acer\appdata\local\programs\python\python38\lib\site-packages (from geventhttpclient-wheels==1.3.1.dev3->locustio) (1.15.0) Requirement already satisfied: certifi in c:\users\acer\appdata\local\programs\python\python38\lib\site-packages (from geventhttpclient-wheels==1.3.1.dev3->locustio) (2020.6.20) Requirement already satisfied: zope.event in c:\users\acer\appdata\local\programs\python\python38\lib\site-packages (from gevent>=1.5.0->locustio) (4.5.0) Requirement already satisfied: zope.interface in c:\users\acer\appdata\local\programs\python\python38\lib\site-packages (from gevent>=1.5.0->locustio) (5.1.0) Requirement already satisfied: cffi>=1.12.2; platform_python_implementation == "CPython" and sys_platform == "win32" in c:\users\acer\appdata\local\programs\python\python38\lib\site-packages (from gevent>=1.5.0->locustio) (1.14.3) Requirement already satisfied: setuptools in c:\users\acer\appdata\local\programs\python\python38\lib\site-packages (from gevent>=1.5.0->locustio) (50.3.0) Requirement already satisfied: greenlet>=0.4.17; platform_python_implementation == "CPython" in c:\users\acer\appdata\local\programs\python\python38\lib\site-packages (from gevent>=1.5.0->locustio) (0.4.17) Requirement already satisfied: chardet<4,>=3.0.2 in c:\users\acer\appdata\local\programs\python\python38\lib\site-packages (from requests>=2.9.1->locustio) (3.0.4) Requirement already satisfied: idna<3,>=2.5 in c:\users\acer\appdata\local\programs\python\python38\lib\site-packages (from requests>=2.9.1->locustio) (2.10) Requirement already satisfied: urllib3!=1.25.0,!=1.25.1,<1.26,>=1.21.1 in c:\users\acer\appdata\local\programs\python\python38\lib\site-packages (from requests>=2.9.1->locustio) (1.25.10) Requirement already satisfied: MarkupSafe>=1.1 in c:\users\acer\appdata\local\programs\python\python38\lib\site-packages (from Jinja2>=2.10.1->flask>=0.10.1->locustio) (2.0.0a1) Requirement already satisfied: pycparser in c:\users\acer\appdata\local\programs\python\python38\lib\site-packages (from cffi>=1.12.2; platform_python_implementation == "CPython" and sys_platform == "win32"->gevent>=1.5.0->locustio) (2.20) WARNING: You are using pip version 20.1.1; however, version 20.2.3 is available. You should consider upgrading via the 'c:\users\acer\appdata\local\programs\python\python38\python.exe -m pip install --upgrade pip' command. C:\Users\acer>locust -V locust 1.0b2
本文由 podipod软库网 作者:DevOps 发表,转载请注明来源!