locust压测demo记录

42 阅读2分钟
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
"""=================================================
@Project -> File   :Locast_study -> roomservice.py
@Author :mazl
@Date   :2023/3/12 14:35
@Desc   :
=================================================="""
# 1、实现创建房间
# 2、随机生成房间号并传给加入房间
# 3、添加断点(断言)
# - 在请求方法中设置,catch_response参数为True
# - 调用success和failure 方法标注成功或失败
# 4、on_start类似构造方法,每个用户只运行一次,类似jmeter参数化
import json
import os
from random import randint

from locust import HttpUser, TaskSet, task, between
from common.roomid import rand_roomid

# 任务类
class UserBebavor(TaskSet):
    # 前置处理器,启动locust是setup
    # def __init__(self, parent: "User"):
    #     super().__init__(parent)
    #     self.room_id = None

    # 任务开始前 先自动执行,并且只调用一次,# 模拟用户启动,task是启动
    def __init__(self, parent: "User"):
        super().__init__(parent)
        self.room_id = None

    def on_start(self):
        # 记录参会人信息
        self.memberId = ["SY1", "SY2", "SY3", "SY4", "SY5", "SY6", "SY1", "SY7", "SY8", "SY9", "SY10"]

    def setup(self):
        print('task setup')

    # 后置处理器,停止locust是teardown
    def teardown(self):
        print("task teardown")


    @task(1)
    def create_room(self):
        url = '/ccm/v1/room?app_id=winPcAppid&room_id=' + rand_roomid()
        payload = json.dumps({
            "callbackUrl": "",
            "roomExtraInfo": "",
            "tid": "winPcToken",
            "topic": "测试主题"
        })
        headers = {
            'Content-Type': 'application/json'
        }
        # verify=False 这个参数是鉴别证书的一个配置,False表示不鉴别,此处踩坑了
        with  self.client.post(url, headers=headers, data=payload, verify=False, catch_response=True) as response:
        # 断言
            if 0 == int(json.loads(response.text)['error']['code']):
                response.success()
            else:
                response.failure("创建房间失败!")
        # assert json.loads(response.text)['error']['code'] == 0
        self.room_id = json.loads(response.text)['roomId']

    @task(2)
    # 两个接口关联压测,拿着第一个接口的信息作为参数,传递给第二个参数
    def join_room(self):
        # print("self.room_id------->", self.room_id)
        url = '/ccm/v1/member?app_id=winPcAppid&room_id=' + str(self.room_id)
        # 对用户长度取余

        ranIndex = randint(1, 1000) % len(self.memberId)
        memberID = self.memberId[ranIndex]
        print("memberID------>", memberID)

        payload = json.dumps({
            "memberId": memberID,
            "memberExtraInfo": "eyJjYW1FbmFibGUiOnRydWUsIm1pY0VuYWJsZSI6dHJ1ZSwiaG9zdCI6ZmFsc2UsIm5pY2tOYW1lIjoiV2ViXzY2NiJ9",
            "tid": "joinRoom_20230313 17:05:49.155"
        })
        headers = {
            'Content-Type': 'application/json'
        }
        with  self.client.post(url, headers=headers, data=payload, verify=False,catch_response=True) as response:
            if 0 == int(json.loads(response.text)['error']['code']):
                response.success()
            else:
                response.failure("加入房间失败!")
        # assert json.loads(response.text)['error']['code'] == 0


class WebstieUser(HttpUser):
    ait_time = between(2, 5)

    def setup(self):
        print('task setup')

    # 后置处理器,停止locust是teardown
    def teardown(self):
        print("task teardown")

    task_set = task(UserBebavor)
    # host = 'http://175.178.53.95:8081'
    host = "填写请求地址"

    min_wait = 2000  # 单位是毫秒,最小等待时间
    max_wait = 5000  # 单位是毫秒,最大等待时间


if __name__ == '__main__':
    os.system('locust -f roomservice.py')