locust基础使用

**

locust基础使用

**
前言:

最近接到一个需求,压测一个接口稳定性,瞬间脑海浮现了jmeter,然后接着看了是那个接口,瞬间分析了下接口里身份验证的加密算法,加上由于时间有限加上jmeter的BeanShell PreProcessor不是很熟悉,就想python貌似也有locust可以满足基本的性能测试,于是改写之前自动化代码调整使用locust,顺便记录下locust相关基础使用;

正文:

使用locust做压力测试,首先我们还是先谈环境,办公环境ubuntu16,系统上python环境有python2.7、python3.5、python3.6,(看其他博客有博主称locust只支持python2,事实上并不是如此,我先后在python3.6&python3.7运行过)

1、环境准备:

locust有六个依赖的python模块:gevent、flask、requests、msgpack、six、pyzmq

本地安装有python环境的,可以配置对应环境变量,使用pip在线安装是不错的方法;(我记得也可以使用whl包安装,自行选择即可)

# gevent
pip3 install gevent

#在Python中实现协程的第三方库。协程又叫微线程Corouine。使用gevent可以获取极高的并发能力;

#flask
pip3 install -U Flask

#Python的一个web开发框架

#requests
pip3 install requests

#大家很熟悉的requests库,发送http&https请求

#msgpack
pip3 install msgpack

#一种快速、紧凑的二进制序列化格式,使用与类似json的数据;
#msgpack-python已经废弃。参考官网。https://pypi.org/project/msgpack/


#six
pip3 install six

#提供了一些简单的工具封装Python2和Python3 之间的差异;
#https://pypi.org/project/six/

#pyzmq
pip3 install pyzmq

#安装这个第三方库,可以把Locust运行在多个进程或多个机器(分布式)
#安装结束了之后我们就开启Locust之旅了。

2、具体安装:

官网提示,locustio替代locust

pip3 install locustio

大部分人到这里一般都不会看了,非常nice,我也是这样做的,然后进行了环境检查;(声明下:我是直接在物理机环境安装的,我觉得这是一个失误的开始,反正我记得在虚拟环境pip 安装后没有任何幺蛾子)

环境检查:

pip3 show locustio
#检查locustio是否安装

locust --help
#检查locust是否可用

#物理机安装这里除了幺蛾子
提示locust 不是内部命令,简单判断下要不是没有环境变量,要不就是没装,
二话不说加了环境变量
(我加的包安装目录哈,再次检查提示一样的错误,难道没装locust,想起之前是locustio有区别?)
然后再次安装pip3 install locust,再次看没有啥用;
其实locust命令没活过来是加的环境变量不对,在python安装目录下有一个bin目录,安装locustio后在
bin目录就会有locust可执行文件,去引用site-packages依赖包中对应模块;
正确做法如下(可以先pip3 uninstall locust 和 locustio ):

创建一个python工程。
在该工程的虚环境中加入所有的依赖包(以上的包)
pip3 install gevent
pip3 install -U Flask
pip3 install requests
pip3 install msgpack
pip3 install six
pip3 install pyzmq
pip3 install locustio

#环境检查
pip3 show locustio

Name: locustio
Version: 0.13.5
Summary: Website load testing framework
Home-page: https://locust.io/
Author: Jonatan Heyman, Carl Bystrom, Joakim Hamrén, Hugo Heyman
Author-email: UNKNOWN
License: MIT
Location: /usr/local/lib/python3.6/site-packages
Requires: six, msgpack-python, pyzmq, flask, gevent, geventhttpclient-wheels, ConfigArgParse, requests
Required-by: locust


#拎出来:Requires: six, msgpack-python, pyzmq, flask, gevent, 
geventhttpclient-wheels, ConfigArgParse, requests
是不是感觉不对了;上边说的依赖6个,现在有8个,
所以再安装下依赖环境吧,虽然msgpack-python貌似被弃用,但是你安装的包依赖它顺手吧;
所以继续:
pip3 install msgpack-python            #提示已经安装,看来在安装msgpack的时候就安装这个了?
pip3 install geventhttpclient-wheels   #也已经安装,所以在安装gevent的时候就把这个也安装了。
pip3 install ConfigArgParse            #这个也已经安装过。

3、编写代码:

不方便贴公司代码,江湖规矩贴通用代码吧;

# coding=utf-8
import requests
from locust import HttpLocust,TaskSet,task
import urllib3
from urllib3.exceptions import InsecureRequestWarning
# # 禁用安全请求警告
urllib3.disable_warnings(InsecureRequestWarning)

class MyBlogs(TaskSet):
    # 访问我的博客首页
    @task(1)
    def get_blog(self):
        # 定义请求头
        header = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36"}

        req = self.client.get("/dong-c",  headers=header, verify=False)
        if req.status_code == 200:
            print("success")
        else:
            print("fails")

class websitUser(HttpLocust):
    task_set = MyBlogs
    wait_time = between(3, 6)

if __name__ == "__main__":
    import os
    os.system("locust -f PerformTools.py --host=https://www.cnblogs.com")

可以看到 locust已经启动成功,且开启的端口为8089.

[2020-05-10 15:57:54,008] dongcxxxxxxxxxxxx-xxx.local/INFO/locust.main: Starting web monitor at *:8089
[2020-05-10 15:57:54,008] dongcxxxxxxxxxxxx-xxx.local/INFO/locust.main: Starting Locust 0.13.5

运行停止后有结果:

Name                                                          # reqs      # fails     Avg     Min     Max  |  Median   req/s failures/s
--------------------------------------------------------------------------------------------------------------------------------------------
 GET /dong-c                                                      522     0(0.00%)    4281     273   15399  |    4100    6.42    0.00
--------------------------------------------------------------------------------------------------------------------------------------------
 Aggregated                                                       522     0(0.00%)    4281     273   15399  |    4100    6.42    0.00

Percentage of the requests completed within given times
 Name                                                           # reqs    50%    66%    75%    80%    90%    95%    98%    99%  99.9% 99.99%   100%
------------------------------------------------------------------------------------------------------------------------------------------------------
 GET /dong-c                                                       522   4100   5000   5700   6100   7300   8500  10000  11000  15000  15000  15000
------------------------------------------------------------------------------------------------------------------------------------------------------
 Aggregated                                                        522   4100   5000   5700   6100   7300   8500  10000  11000  15000  15000  15000

填入信息:

Number of users to simulate:设置模拟的用户总数
Hatch rate (users spawned/second):每秒启动的虚拟用户数
Start swarming:执行locust脚本

顺便贴一下安全警告的错误解决:

import urllib3
from urllib3.exceptions import InsecureRequestWarning
# 禁用安全请求警告
urllib3.disable_warnings(InsecureRequestWarning)
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值