zoukankan      html  css  js  c++  java
  • 【转载】Locust实现集合点

    直接编写接口事务脚本对后台接口进行测试;有时测试需要让所有并发用户完成初始化后再进行压力测试,这就需要类似于LoadRunner中的集合点的概念,由于框架本身没有直接封装,有如下办法实现:

    from gevent._semaphore import Semaphore
    all_locusts_spawned = Semaphore(0)
    all_locusts_spawned.acquire()
    
    def on_hatch_complete(**kwargs):
        all_locusts_spawned.release() //创建钩子方法
    
    events.hatch_complete += on_hatch_complete //挂载到locust钩子函数(所有的Locust实例产生完成时触发)
    
    class TestTask(TaskSet):
        def on_start(self):
            """ on_start is called when a Locust start before any task is scheduled """
            self.login()
            all_locusts_spawned.wait() //限制在所有用户准备完成前处于等待状态
    

    思路:

    通过locust得基于gevent并发得机制,引入gevent的锁的概念,代入到locust的钩子函数中,实现集合点统一并发概念

    个人补充理解:

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

  • 相关阅读:
    left join问题
    SQL索引
    数据库查询优化
    define and inline
    程序的内存分配
    __closure
    this指针
    java笔记
    Visual Studio Code(VSCODE)语言设置
    Excel 2010如何打开多个独立窗口?
  • 原文地址:https://www.cnblogs.com/byron0918/p/10343056.html
Copyright © 2011-2022 走看看