运维

Locust(蝗虫)-性能测试工具安装

MarginNote 3 - Mac端PDF阅读批注工具 激活码价格:¥69.00
赤友 NTFS for Mac 助手 -  磁盘硬盘格式读写软件注册激活码价格:¥35.00
虫洞 -  iPhone安卓投屏操控 电脑手机多屏协同,价格:¥45.00
namesilo全网最便宜域名注册商,输入折扣码:nsilo20立减1美元!

当我们做Web系统性能测试方案时,压力模拟工具的选择通常是一个绕不开的环节。对于大部分互联网公司的业务规模和测试资源投入,JMeter这个老牌开源性能测试工具能够满足大部分测试需求,它也可能是世面上书籍、博客教程丰富程度仅次于LoadRunner的性能测试工具。然而当我们的场景需要模拟的并发用户数以千为单位时,使用JMeter的成本越来越大,甚至超出我们掌握的资源。此时,我们开始寻找更低成本的方案,而Locust,为这样的方案带来了一种可能。

Locust(蝗虫)-性能测试工具安装

2020092410515231

Locust是开源、使用Python开发、基于事件、支持分布式并且提供WebUI进行测试执行和结果展示的性能测试工具。而它之所以能够在资源占用方面明显优于JMeter,一个关键点在于两者模拟虚拟用户的方式不同,JMeter通过线程来作为虚拟用户,而Locust借助gevent库对协程的支持,以greenlet来实现对用户的模拟,相同配置下Locust能支持的并发用户数相比JMeter可以达到一个数量级的提升。

Locust使用Python代码定义测试场景,目前支持Python 2.7Python 3.+。它自带一个Web UI,用于定义用户模型,发起测试,实时测试数据,错误统计等,在最新正式发布的Locust v1.0b2,还提供QPS、评价响应时间等几个简单的图表。

·Python书写场景

·无需笨重的UIXML。仅仅是代码,协程而不是回调。

·分布式,可扩展和,支持成千上万的用户

·基于Web的用户界面

·Locust有整洁HTML + JS用户界面,实时展示测试细节,跨平台和易于扩展

·可以测试任何系统

·可控制

·事件完全由gevent处理

官方网站使用文档参考链接

注:大并发量测试时,建议在linux系统下进行。

安装locust

pip install locust
或(选择对应pip命令安装)
pip3 install locust 

安装pyzmq

如果打算运行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运行,但是考虑效率不推荐!!!

Locust库构成

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

Python2Python3兼容库,用来封装Python2Python3之间的差异性。

6) pyzmq

pyzmqzeromq(一种通信队列)的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_startclient初始化时执行的步骤。task表示下面方法是测试内容,里面的数字执行比例,这里about页面占三分之一,主页占三分之二。task_set指定client执行的类。min_waitmax_wait为两次执行之间的最小和最长等待时间。

运行locust

locust  -d basic.py --host=https://www.baidu.com

通过浏览器访问localhost:8089<

Locust(蝗虫)-性能测试工具安装

安装失败解决方法

如遇到安装失败如下时请安装pip install -U setuptoolspip 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
(0)

本文由 podipod软库网 作者:DevOps 发表,转载请注明来源!

ToDesk - 安全好用流畅远程控制软件 替代TeamViewer,价格:¥108.00
Eagle - 图片收集管理必备软件 激活码价格:¥119.00
PDF Expert 2 - Mac上优秀的PDF阅读编辑工具,价格:¥119.00

热评文章

发表评论