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()

  • 相关阅读:
    JavaWeb WebBrowserTool KernelEngine
    类模板 C++快速入门45
    动态数组的使用
    动态数组的使用
    鱼C小甲鱼
    栈原理演示
    鱼C小甲鱼
    类模板 C++快速入门45
    delphi实例
    栈原理演示
  • 原文地址:https://www.cnblogs.com/byron0918/p/10343056.html
Copyright © 2011-2022 走看看