首页 > 其他分享 >Locust设置集合点

Locust设置集合点

时间:2023-06-06 15:35:37浏览次数:30  
标签:task self Locust 集合点 设置 between def wait

  • 集合点

要求系统能够承受1000 人同时提交数据,可以通过在提交数据操作前面加入集合点,这样当虚拟用户运行到提交数据的集合点时,就检查同时有多少用户运行到集合点,如果不到1000 人,已经到集合点的用户在此等待,当在集合点等待的用户达到1000 人时,1000 人同时去提交数据,从而达到测试计划中的需求。

注意:框架本身没有直接封装集合点的概念 ,间接通过gevent并发机制,使用gevent的锁来实现

  1. 方法一

semaphore是一个内置的计数器: 每当调用acquire()时,内置计数器-1 每当调用release()时,内置计数器+1 计数器不能小于0,当计数器为0时,acquire()将阻塞线程直到其他线程调用release()

两步骤:

  1. all_locusts_spawned 创建钩子函数
  2. 将locust实例挂载到监听器 events.spawning_complete.add_listener
  3. Locust实例准备完成时触发
import os

from locust import HttpUser, TaskSet, task,between,events
from gevent._semaphore import Semaphore


all_locusts_spawned = Semaphore()
all_locusts_spawned.acquire()# 阻塞线程


def on_hatch_complete(**kwargs):
    """
    Select_task类的钩子方法
    :param kwargs:
    :return:
    """
    all_locusts_spawned.release() # # 创建钩子方法


events.spawning_complete.add_listener(on_hatch_complete) #挂在到locust钩子函数(所有的Locust示例产生完成时触发)


n = 0
class UserBehavior(TaskSet):

    def login(self):
        global n
        n += 1
        print("%s个虚拟用户开始启动,并登录"%n)

    def logout(self):
        print("退出登录")



    def on_start(self):
        self.login()

        all_locusts_spawned.wait() # 同步锁等待

    @task(4)
    def test1(self):
      

        url = '/list'
        param = {
            "limit":8,
            "offset":0,
        }
        with self.client.get(url,params=param,headers={},catch_response = True) as response:
            print("用户浏览登录首页")

    @task(6)
    def test2(self):
        

        url = '/detail'
        param = {
            'id':1
        }
        with self.client.get(url,params=param,headers={},catch_response = True) as response:
            print("用户同时执行查询")

    @task(1)
    def test3(self):
        """
        用户查看查询结果
        :return:
        """

        url = '/order'
        param = {
            "limit":8,
            "offset":0,
        }
        with self.client.get(url,params=param,headers={},catch_response = True) as response:
            print("用户查看查询结果")

    def on_stop(self):
        self.logout()


class WebsiteUser(HttpUser):
    host = 'http://www.baidu.com'
    tasks = [UserBehavior]

    wait_time = between(1, 2)

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

 

  1. 方法二:

from locust import HttpUser, task, between, SequentialTaskSet


class UserBehavior(SequentialTaskSet):

    @task
    def login(self):
        self.client.post("/login", {"username": "test", "password": "password"})
        self.wait_between(1, 3)

    @task
    def view_product_list(self):
        self.client.get("/product_list")
        self.wait_between(1, 2)

    @task
    def choose_product(self):
        self.client.get("/product/1")
        self.wait_between(2, 3)

    @task
    def fill_address(self):
        self.client.post("/address", {'address': 'xxx'})
        self.wait_between(3, 4)

    @task
    def checkout(self):
        self.client.post("/checkout", {'confirm': 'yes'})
        self.wait_between(4, 5)

    def wait_between(self, min_wait, max_wait):
        self.wait_time = between(min_wait, max_wait)


class WebsiteUser(HttpUser):
    tasks = [UserBehavior]
    wait_time = between(1, 3)

在这里,我们首先定义了一个名为UserBehavior的任务集合点类,其中定义了几个测试任务:登录、浏览商品列表、选择商品、填写收货地址、确认购买。在每个测试任务中,我们使用client发送HTTP请求,并设置适当的等待时间。

然后,我们定义了一个名为WebsiteUser的用户类,继承自HttpUser并设置了一个等待时间的范围。在这个用户类中,我们指定了使用UserBehavior任务集合点类作为任务,并设置并发用户数为100。在测试过程中,每个用户将按照UserBehavior类中定义的测试任务顺序依次执行,直至所有测试任务完成或测试时间到达。

控制台执行以下命令:

locust -f your_file_name.py --host=http://127.0.0.1:8000 --web-host=127.0.0.1 --users 100 --spawn-rate 10

在这里,我们指定了测试文件、目标网站URL、web UI地址,并设置并发用户数为100,每秒生成10个用户。测试过程中,我们可以在web UI界面上实时监控性能指标,以确定系统的瓶颈和性能问题。

 

标签:task,self,Locust,集合点,设置,between,def,wait
From: https://www.cnblogs.com/shukeshu/p/17460674.html

相关文章

  • android应用启动的时候添加图片,并设置跳过按钮
    要在显示图片时添加跳过按钮,可以使用AndroidSDK提供的splashscreen资源文件,并在布局文件中使用。以下是添加跳过按钮的一般步骤:1.在AndroidManifest.xml文件中的应用程序标签中添加以下行:android:splashScreen="res/drawable/splash_screen.png"这将指定使用spla......
  • CentOS7.0设置开机网卡自动启动
    新安装的centos7系统网卡没有自动启动[root@ETS004~]#cd/etc/sysconfig/network-scripts[root@ETS004network-scripts]#ls//列出network-scripts文件夹下的列表信息找到ifcfg-ens197这类网卡信息[root@ETS004 network-scripts]#viifcfg-ens197......
  • matlab 更改中文语言,但是常规设置没有桌面语言的问题
    没有如下图红框的选项的原因是,操作系统的语言设置没有全部设置成中文造成的。尤其是时间和语言中的区域设置中的区域格式。解决方法:设置->区域 ......
  • Maven(创建私有仓库和设置权限)
    为区分项目,要为项目建立私有仓库 1.添加仓库    2.填写私有仓库信息,然后保存 RiilRelease仓库 RiilSnapshot仓库   3.配置成功 4.添加权限    5.添加RiilRelease的权限和RiilSnapshot的权限    6.检查是否配置成功    7.创建角色,分配权限    ......
  • Win11时间精确到秒怎么设置
    微软Win11 任务栏不再支持时钟秒数显示,除此之外,Windows11任务栏不支持将应用程序拖放到任务栏上的功能。微软承认删除了一个注册表值“ShowSecondsInSystemClock”,该值允许任务栏时钟以秒为单位显示时间。所以说微软精放弃了对秒数的支持,但是用户想要这个功能的话要怎么开......
  • BurpSuite设置禁止显示的域名
       在做测试时,经常出现一些不想显示的域名,需要对这些域名进行禁用。通过研究发现可以通过Burpsuite自身的设置来实现,但该方法仅仅支持设置一条记录。1.详细设置方法(1)about:config(2)network.captive-portal-service.enabled输入后,单击双向按钮,修改其值由true变成false即可。......
  • Cadence 板层 铜厚设置
    参考设置厚度参数: 2层板的设置有:2层板---1.6mm板厚设置铜厚1oz=0.035mm  or  2oz=0.07mm2层板---1.0mm板厚设置铜厚1oz=0.035mm 2层板---1.2mm板厚设置铜厚1oz=0.035mm 2层板---2.0mm板厚设置铜厚1oz=0.035mm  or  2oz=0.07mm2层板---0.8mm板厚设置铜......
  • 在Windows中通过批处理设置仅允许指定的蓝牙设备硬件ID,请按照以下步骤进行操作
    在Windows中通过批处理设置仅允许指定的蓝牙设备硬件ID,请按照以下步骤进行操作:打开记事本或其他文本编辑器。输入以下内容:CopyCode@echooffsetHARDWAREID=DEVICE_ADDRESS_IN_HEXregadd"HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\Bluetooth"/v"A......
  • k8s中设置hostNetwork: true,怎么修改冲突的端口,yaml使用的是DaemonSet
    apiVersion:apps/v1kind:DaemonSetmetadata:name:cadvisornamespace:monitoringspec:selector:matchLabels:app:cAdvisortemplate:metadata:labels:app:cAdvisorspec:tolerations:#污点容忍,忽略master的......
  • Vue router 二级默认路由设置
    一、起因打开默认地址/(http://localhost:5432/),home页面有空白,因为没有指定默认打开的子页。//router.jsexportconstconstantRoutes=[{path:'/',component:()=>import('@/views/MainView'),name:'Index',met......