locust 通過隊列實現 task級集合點併發

最近公司在搞壓測 筆者也是查了很多工具 

lr收費 用不起 jm 測試機扛不住  最後就選擇了locust

使用中有個場景覆蓋不到 就是幾個task中 有一個需要併發提交,其餘task正常運行即可

也是查了一些資料官網上給的鉤子方法 是基於協程的運行開始前可實現併發一旦運行開始即開始即不可控

話不多說直接上代碼

# !/usr/bin/env python
# -*- coding:utf-8 -*-
# Author:victor Li

# 任務類
import queue
import random
import time

from gevent._semaphore import Semaphore

all_locusts_spawned = Semaphore()
all_locusts_spawned.acquire()
from locust import HttpUser, task, events, SequentialTaskSet


class TestTaskList(SequentialTaskSet):

    def test_002(self):
       return random.Random().randint(1,100)
    @task
    def test_0004(self):
        print("test_0004")
    def test_003(self):

        if not self.user.out_queue.empty():
            print("test_003")
            self.user.my_queue.put(self.user.out_queue.get())
            self.user.out_queue.task_done()

    @task
    def test_001(self):


        if not self.user.my_queue.empty() and self.user.out_queue.empty():

            num = self.user.my_queue.get()
            self.user.my_queue.task_done()
            if self.user.my_queue.empty():
                pass
            else:
                self.user.my_queue.join()

            print("執行了呀{}".format(num))
            print("test_003返回結果是{}".format(self.test_002()))
            self.user.out_queue.put(num)
            self.test_003()



class TestUser(HttpUser):
    host = "www.baidu"
    out_queue = queue.Queue(20)
    tasks = {TestTaskList:1}
    max_wait = 1
    min_wait = 1
    my_queue = queue.Queue(20)
    for i in range(20):
        my_queue.put(i)



if __name__ == '__main__':
    import os

    os.system("locust -f test111.py --headless -u 20 -r 2 --run-time 1h30m")

 

 

執行效果

只想到了用隊列鎖得方式 如果大家有什麼其他更好得辦法也可以私信我 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章