文章目录
前言
在进行秒杀功能进行性能测试时,需要对场景中的每个业务流程进行测试,秒杀功能场景:
登录——选择商品——查看商品详情——秒杀商品
一、秒杀脚本
代码如下(示例):
from locust import HttpUser
from locust import TaskSet
from locust import task
import hashlib
import random
class UserTask(TaskSet):
"""用户任务类,用户的行为"""
def on_start(self):
print("开始执行")
def md5_pwd(self, pwd):
md5 = hashlib.md5()
md5.update(b"zr" + pwd.encode("utf8") + b"hg")
return md5.hexdigest()
@task
def test_login(self):
payload = {
"username": "admin",
"password": self.md5_pwd("admin123")
}
res = self.client.post(url="/login/login", data=payload, name="登录") # 表单请求date传参,res响应对象
# name="登录" 为了locust的web界面name字段展示名字为name
self.token = res.json()["data"]
@task
def test_get_goods_list(self):
"""获取商品列表请求"""
res = self.client.get(url="/goods/list")
if res.status_code == 200:
self.goods_id_list = [goods['id'] for goods in res.json()['data']]
else:
pass
@task
def test_goods_detail(self):
"""获取商品详情"""
self.goods_id = random.choice(self.goods_id_list)
self.client.get(url=f"/goods/detail/{self.goods_id}")
@task
def test_seckill(self):
"""秒杀接口"""
payload = {
"goodsId": self.goods_id,
"token": self.token
}
res = self.client.post(url="/seckill/seckill", data=payload)
print(res.json())
class WebSitUser(HttpUser):
"""定义用户类,访问用户"""
tasks = [UserTask] # 绑定任务类
host = "http://192.168.90.90:8008/" # 指定主机地址
min_wait = 2000
max_wait = 3000
# 指定思考时间,3s到2s之内随机选取一个时间充当思考时间
if __name__ == '__main__':
import os
os.system("locust -f seckill.py")
二、locust基本流程
locust基于两个类,继承两个类才能实现模拟用户行为:
TaskSet类:locust里面的类,继承TaskSet类,写一个类继承这个类之后locust才能识别它
主要是为了模拟用户端请求信息,@task装饰器让locust识别到哪个是我们的任务
HttpUser类:locust里的类继承HttpUser类,用户类,这个类主要写一些用户的配置信息,比如Host主机地址、思考时间,等一系列信息,通过继承HttpUser类来实现
这两个类他们之间怎么通信,在用户类里有个tasks=[TaskSet的类],可进行桥梁沟通