1

当我在 locust 中使用“for”时,我不知道为什么“req/s”太高了。

class UserBehavior(TaskSet):

    @task(1)
    def start_congche(self):
        filename = 'D:\测试\项目\精励评分\从车评分/阳光压力测试数据.csv'
        with open(filename) as f:
            reader = csv.DictReader(f)
            for test in reader:
                self.client.post("/DataPreFillServer/DataPreFillProductService", first +test["vin"] + vincode +test["vehicle_code"] + vehicleCode + end)

class WebsiteUser(HttpLocust):
    task_set = UserBehavior
    host = "http://10.10.6.12:8080"
    min_wait = 1000
    max_wait = 1000

在此处输入图像描述

但是,如果我不使用“for”,一切都很好......

class UserBehavior(TaskSet):
    
         @task(1)
         def start_congche(self):
             self.client.post("/DataPreFillServer/DataPreFillProductService", first + vincode + vehicleCode + end)

在此处输入图像描述

4

2 回答 2

1

使用队列的类..每次从队列中取值。

user_data_queue = queue.Queue()
filename = 'XXXXXXXX.csv'
with open(filename) as f:
    reader = csv.DictReader(f)
    for test in reader:
        data = {
        "vin": test["vin"],
        "vehicle_code": test["vehicle_code"],
        }
        user_data_queue.put_nowait(data)

 try:
    data = self.locust.user_data_queue.get_nowait()
 except queue.Empty:    
    exit(0)

 self.client.post("/DataPreFillServer/DataPreFillProductService",payload)
于 2017-04-26T01:44:27.807 回答
0

我相信您在第一种方法中看到每秒 20 个请求的原因是,每次五个 Locust 用户中的一个攻击系统时,for 循环都会执行多个发布请求。根据文件的大小,假设它有 20 次迭代,这意味着每个用户可能并行执行 20 次并且测试结束。

看看你的开始和结束时间,第一个测试在大约 8 秒内完成,而另一个大约需要 30 秒。

在第二个测试中,五个 Locust 用户对每个用户执行一个 post 请求,并且必须返回并继续一次执行一个,直到满足 100 个请求。

于 2017-04-22T23:33:35.620 回答