Locust压测--带Token

前言:
Locust是一款类似于Jmeter开源负载测试工具,所不同的是用python语言实现,并支持python脚本。Locust提供web ui界面,能够方便用户实时监控脚本运行状态。
Locust作为一个压测工具库,Locust其实解决这个问题:在实际测试过程中,待压的服务经常是一套完整流程,比如查询某登录用户的积分,就得必须得用户必须登录,且成功获取Token,方可进行下一步操作,然后再进行api调用。
测试内容
Locust压测程序是配置.py程序文件,命名为123.py,由两部分组成:
a、TaskSet类:里面放置需要测试的各种任务,这些任务用@task装饰器来标记
b、Locust类:它的一个实例就代表一个用户,同时它提供了用户并发访问的能力,它的task_set成员需要引用TaskSet类,那是它需要执行的任务。
实例(查询某登录用户积分):
积分API地址:
积分API请求,需要某用户登录后提供才有的Token
备注:根据登录得知,我们需获取登录信息的id,即Token为id
登录需提供信息:
API地址:
data(手机号码、密码):
密码MD5加密:
登录成功后,会有json格式response信息,获取需要的信息即可
环境:
python 2.7
Locust:0.8.1
实战:
以查询某用户积分为例,其代码如下:

# coding:utf-8
from locust import TaskSet, HttpLocust, task
import hashlib
import json


class UserBehavior(TaskSet):
def login(self):
data = {
"account": '*******',
"password": hashlib.md5("aaaaaa").hexdigest()

}
response = self.client.post('/***/memberLogin!login',data=data)
content = json.loads(response.content)
result = response.json()["result"]
if result == 0:
userId = content['content']['id']
print u"登录用户的id:%s"%userId
return userId
else:
print u"登录失败"

def my_integral(self):
self.login()
response = self.client.get("/***/member!getMemberIntegralDetail")
content = json.loads(response.content)
# print content
integral = content['content']['memberIntegral']
print u"登录用户所得积分:%s"%integral

@task(10)
def login_logout(self):
self.login()
self.my_integral()
self.logout()


class WebsiteUser(HttpLocust):
host = 'http://192.168.10.21:8080/bredbaby'
task_set = UserBehavior
min_wait = 5000
max_wait = 9000

执行压力测试

打开cmd窗口进入脚本文件的目录之中,执行以下命令开启压力测试

locust -f 123.py文件所在位置

执行完上面命令后用浏览打开http://localhost:8089,出现以下界面:

尝试模拟100个虚拟用户,每秒发送30次请求,然后点击Start swarming开始进行压力测试

运行后可在cmd窗口看见其登录用户的integral,即说明token值传参成功

posted @ 2018-03-09 16:15  海韵163  阅读(366)  评论(0编辑  收藏  举报