最近公司在搞壓測 筆者也是查了很多工具
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")
執行效果
只想到了用隊列鎖得方式 如果大家有什麼其他更好得辦法也可以私信我