性能测试---locust进行秒杀业务场景测试


前言

在进行秒杀功能进行性能测试时,需要对场景中的每个业务流程进行测试,秒杀功能场景:
登录——选择商品——查看商品详情——秒杀商品

一、秒杀脚本

代码如下(示例):

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的类],可进行桥梁沟通
  

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值