Locust 库学习

1. 什么是性能自动化测试?
性能
    -系统负载能力
    -超负荷运行下的稳定性
    -系统瓶颈
自动化测试
    -使用程序代替手工
    -提升测试效率
性能自动化
    -使用代码模拟大批量用户
    -让用户并发请求
    -多页面多用户并发请求
    -采集参数,统计系统负载能力
    -生成报告

简介: locust库
    使用Python
        -使用代码来创建批量用户
    分布式
        -可以在多台服务器上,进行分布式性能测试
        -可伸缩性强
    稳定、应用广泛
        -经得住各种场景下的考验
        -基于web ui界面展示测试详情
        -能测任何系统
内容:Locust主要由下面的几个库构成:gevent,flask,requests,msgpack-python,six,pyzmq
    gevent是一种基于协程的Python网络库,它用到Greenlet提供的,封装了libevent事件循环的高层同步API。
    msgpack-python主要提供MessagePack数据序列化及反序列化的方法。MessagePack是一种快速、紧凑的二进制序列化格式,适用于类似JSON的数据格式。
    six Python2和3兼容库,用来封装Python2和Python3之间的差异性
    pyzmq是zeromq(一种通信队列)的Python绑定,主要用来实现Locust的分布式模式运行
    
安装: pip3 install -i https://pypi.douban.com/simple/ locustio==0.14.6
或者 打开 Locust 安装目录下的 setup.py 文件。查看安装要求:
install_requires=["gevent>=1.1.2", "flask>=0.10.1", "requests>=2.9.1", "msgpack-python>=0.4.2", "six>=1.10.0", "pyzmq==15.2.0"]

1. 基本使用格式
    # coding:utf-8
    from locust import Locust, TaskSet, task
    class MyTasks(TaskSet):
        """
        创建测试任务类,需要继承TaskSet
        可以添加多个测试任务
        """
        # 每个测试任务,往往会以实例方法的形式来呈现
        # 同时需要使用task装饰器来装饰测试任务
        @task
        def one_task(self):
            print("执行一个伟大的测试任务!")

    class RunTasks(Locust):
        """
        创建运行测试类,需要继承Locust父类
        """
        task_set = MyTasks   # 指定测试任务类,使用task_set覆盖父类的类属性
        min_wait = 2000      # 指定启动任务间隔的时间范围(单位毫秒):2~5秒之间
        max_wait = 5000         # 使用min_wait、max_wait覆盖父类的类属性

    <1>.打开Pycharm Terminal控制台> os.chdir(Pro) >>> locust
    注意:
        a. 程序文件要命名为 locustfile.py才行
        b. 假如命名为one_example.py,则需要这样运行 >>> locust -f one_example.py

    <2>.在浏览器打开UI设置界面
        -默认使用localhost:8089打开
        Number of users to simulate : 并发用户数
        Hatch rate(users spawend/second) : 用户启动间隔时间

2. 登录并发测试测试和首页压力测试
    # coding:utf-8
    # 测试server.py性能
    from locust import HttpLocust, TaskSet, task
    class AdminLoadTest(TaskSet):   # 创建测试任务类,需要继承TaskSet
        def login(self):  # 登录实例方法
            self.client.post("http://localhost:5000/login", {'name': 'lucy', 'password': "123456"})

        def logout(self):  # 登出实例方法
            self.client.get("http://localhost:5000/logout")

        def on_start(self):   # 当任何一个task调度执行之前,on_start实例方法会被调用
            self.login()

        def on_stop(self):   # 当任何一个task调度执行之后,on_stop实例方法会被调用后登出
            self.logout()

        @task
        def admin_index(self):  # 对后台主页进行压测
            self.client.get("http://localhost:5000/index")

    class RunLoadTests(HttpLocust):   # 创建运行压测类
        task_set = AdminLoadTest  # 指定测试任务类,使用task_set覆盖父类的类属性
        min_wait = 2000      # 指定启动任务间隔的时间范围(单位毫秒):2~5秒之间
        max_wait = 5000         # 使用min_wait、max_wait覆盖父类的类属性

    <1>. 打开Pycharm Terminal控制台> os.chdir(Pro)>>>locust --host=http://localhost -f test_load.py
    <2>. 访问 : localhost:8089 打开页面,设置并发用户数100, 间隔时间2秒获取性能数据

server.py
# coding:utf-8
import base64
import json

import flask
from flask import request

app = flask.Flask(__name__)

users = {'lucy': ["123456", ],
         'jucy': ["654321", ],
        }   # 用户字典,存储用户信息

@app.route('/out', methods=['POST', 'GET'])
def logout():
    return json.dumps({"status": 200, "msg": "用户已退出"})

@app.route('/index', methods=['POST', 'GET'])
def main():
    return json.dumps({"status": 200, "msg": "我的页面我做主"})

@app.route('/login', methods=['POST', 'GET'])
def login():
    uid = flask.request.values.get("name") 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值