Locust.io ฉันจะใช้ผู้ใช้ที่แตกต่างกันบน locust.io ได้อย่างไรโดยที่ระบบไม่มีบั๊กเมื่อฉันเริ่ม / หยุดสำหรับการรันใหม่

Aug 19 2020

ฉันมีรหัสนี้ที่ใช้งานได้ดีสำหรับการรันครั้งแรกบนเซิร์ฟเวอร์ที่ปรับใช้ locust.io แต่เมื่อฉันเริ่ม / หยุดเพื่อทำการรันใหม่ฉันได้รับข้อผิดพลาดหลายประการเกี่ยวกับรายการ คุณ Guyz ช่วยฉันปั่นจักรยานได้ไหม

from locust import HttpUser, task, between, SequentialTaskSet, events
import uuid
import json
import csv
import logging, sys, random, os

with open('somecsv.csv', 'r') as f:
    reader = csv.reader(f)
    user= list(reader)
    #print(user)

class somethingclass(SequentialTaskSet):

    def on_start(self):
        if len(user) > 0:
            self.id= str(user.pop()).strip("][''")

    @task
    def someting(self):
        do something with self.id request
  
    @task
    def someting2(self):
        do something with self.id request
                        


class Main(HttpUser):
    
    wait_time = between(5, 10)
    tasks = [somethingclass]
    
    def _init_(self, *args, **kwargs):
        super(Main, self)._init_(*args, **kwargs)

ข้อผิดพลาดคือ:

[2020-08-18 23: 06: 50,899] PC / ERROR / locust.user.task: ออบเจ็กต์ 'somethingclass' ไม่มีแอตทริบิวต์ 'id' Traceback (โทรล่าสุดล่าสุด): File "c: \ windows \ system32 \ src \ locust \ locust \ user \ task.py "บรรทัด 284 ในการรัน self.execute_next_task () ไฟล์" c: \ windows \ system32 \ src \ locust \ locust \ user \ task.py "บรรทัด 309 ใน execute_next_task self .execute_task (self._task_queue.pop (0)) ไฟล์ "c: \ windows \ system32 \ src \ locust \ locust \ user \ task.py" บรรทัด 321 ในไฟล์ execute_task (ตัวเอง) "C: \ Users \ user \ Desktop \ Work \ Chipico Chip Transfer \ chiptransfer_load.py "บรรทัดที่ 44 ในบางครั้ง" uuid ": '% s'% self.id, AttributeError: วัตถุ 'somethingclass' ไม่มีแอตทริบิวต์" id "

คำตอบ

1 Solowalker Aug 19 2020 at 03:57

คุณสามารถใช้เหตุการณ์ test_start และ test_stopเพื่อรีเซ็ตuserข้อมูลของคุณ

from locust import User, task, constant, TaskSet, events
from logging import getLogger
import uuid

logger = getLogger("test")
user = []

@events.test_start.add_listener
def start_something(**kwargs):
    logger.info("Starting test...")
    user.append(uuid.uuid4())

class somethingclass(TaskSet):
    @task
    def do_something(self):
        logger.info(f"User: {user}")

class Main(User):
    wait_time = constant(2)
    tasks = [somethingclass]

สิ่งนี้ทำให้ฉันได้ผลลัพธ์ต่อไปนี้โดยมีการหยุดและเริ่มการทดสอบหลายครั้ง

[2020-08-18 16:14:12,549] INFO/locust.main: Starting web interface at http://:8089
[2020-08-18 16:14:12,557] INFO/locust.main: Starting Locust 1.1.1
[2020-08-18 16:14:15,759] INFO/test: Starting test...
[2020-08-18 16:14:15,759] INFO/locust.runners: Hatching and swarming 1 users at the rate 1 users/s (0 users already running)...
[2020-08-18 16:14:15,759] INFO/locust.runners: All users hatched: Main: 1 (0 already running)
[2020-08-18 16:14:15,760] INFO/test: User: [UUID('f4e9d580-af4a-4fb7-804a-372faa8fcacd')]
[2020-08-18 16:14:17,764] INFO/test: User: [UUID('f4e9d580-af4a-4fb7-804a-372faa8fcacd')]
[2020-08-18 16:14:19,765] INFO/test: User: [UUID('f4e9d580-af4a-4fb7-804a-372faa8fcacd')]
[2020-08-18 16:14:21,767] INFO/test: User: [UUID('f4e9d580-af4a-4fb7-804a-372faa8fcacd')]
[2020-08-18 16:14:28,674] INFO/test: Starting test...
[2020-08-18 16:14:28,675] INFO/locust.runners: Hatching and swarming 1 users at the rate 1 users/s (0 users already running)...
[2020-08-18 16:14:28,675] INFO/locust.runners: All users hatched: Main: 1 (0 already running)
[2020-08-18 16:14:28,675] INFO/test: User: [UUID('f4e9d580-af4a-4fb7-804a-372faa8fcacd'), UUID('c061117e-f585-4da6-8188-59a0e1ff8acb')]
[2020-08-18 16:14:30,679] INFO/test: User: [UUID('f4e9d580-af4a-4fb7-804a-372faa8fcacd'), UUID('c061117e-f585-4da6-8188-59a0e1ff8acb')]
[2020-08-18 16:14:32,682] INFO/test: User: [UUID('f4e9d580-af4a-4fb7-804a-372faa8fcacd'), UUID('c061117e-f585-4da6-8188-59a0e1ff8acb')]
[2020-08-18 16:14:34,688] INFO/test: User: [UUID('f4e9d580-af4a-4fb7-804a-372faa8fcacd'), UUID('c061117e-f585-4da6-8188-59a0e1ff8acb')]
[2020-08-18 16:14:38,426] INFO/test: Starting test...
[2020-08-18 16:14:38,427] INFO/locust.runners: Hatching and swarming 1 users at the rate 1 users/s (0 users already running)...
[2020-08-18 16:14:38,427] INFO/locust.runners: All users hatched: Main: 1 (0 already running)
[2020-08-18 16:14:38,428] INFO/test: User: [UUID('f4e9d580-af4a-4fb7-804a-372faa8fcacd'), UUID('c061117e-f585-4da6-8188-59a0e1ff8acb'), UUID('cfd2a456-87d4-4cb2-b7d2-939bb1dfc560')]
[2020-08-18 16:14:40,433] INFO/test: User: [UUID('f4e9d580-af4a-4fb7-804a-372faa8fcacd'), UUID('c061117e-f585-4da6-8188-59a0e1ff8acb'), UUID('cfd2a456-87d4-4cb2-b7d2-939bb1dfc560')]
RazvanRistea Aug 19 2020 at 14:55

จากผู้ใช้นำเข้าตั๊กแตนงานค่าคงที่ TaskSet เหตุการณ์จากการบันทึกการนำเข้า getLogger นำเข้า uuid

คนตัดไม้ = getLogger ("ทดสอบ") ผู้ใช้ = []

@ events.test_start.add_listener def start_something (** kwargs): logger.info ("กำลังเริ่มการทดสอบ ... ") user.append (uuid.uuid4 ())

class somethingclass (TaskSet): @task def do_something (self): logger.info (f "User: {user}")

คลาสหลัก (ผู้ใช้): wait_time = ค่าคงที่ (2) งาน = [somethingclass]

คือคำตอบที่ถูกต้อง