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")