ฉันจะหาบันทึกตั๊กแตนได้ที่ไหน

ฉันใช้ตั๊กแตนเพื่อทดสอบความเครียดในแอปของเรา

ฉันได้รับข้อผิดพลาดเนื่องจากการเรียก POST ดูเหมือนไม่ถูกต้อง ฉันจะดูบันทึกของตั๊กแตนได้ที่ไหน ฉันต้องการดูว่าการโทรโพสต์มีลักษณะอย่างไรเพื่อดูว่ามีอะไรผิดปกติ

นี่คือรหัสของฉันในกรณีที่มีคนบอกฉันว่าฉันทำอะไรผิด:

from locust import HttpLocust, TaskSet, task

json3 = """{"stack_name": "beenz-php-app-12", "disable_rollback": true, "template": "php", "timeout_mins": 60}"""

class MyTaskSet(TaskSet):
    @task
    def send(self):
             response = self.client.post("/stacks", json3, headers={'X-Auth-Key': 'xxxx', 'Content-Type': 'application/json', 'X-Auth-User': 'xxxx', 'Accept': 'application/json', 'X-Auth-Token':'xxxx'})
            print "Response status code:", response.status_code
            print "Response content:", response.content

class MyLocust(HttpLocust):
    task_set = MyTaskSet
    min_wait = 5000
    max_wait = 15000

ขอบคุณ!


person Beenz    schedule 25.09.2014    source แหล่งที่มา
comment
ฉันเห็นข้อผิดพลาดนี้ใน Locust: HTTPError('500 Server Error: Server Error',)   -  person Beenz    schedule 26.09.2014


คำตอบ (5)


ด้วยการเพิ่มพารามิเตอร์ --logfile=locustfile.log เมื่อเริ่มต้นตั๊กแตน ข้อความ print ของคุณจะถูกเปลี่ยนเส้นทางไปยังไฟล์ชื่อ locustfile.log ซึ่งฉันคิดว่าเป็นบันทึกที่คุณพูดถึงในคำถามของคุณ

สมมติว่าชื่อไฟล์โลคัสของคุณคือ locustfile.py และคุณรันตั๊กแตนบนเครื่องของคุณ คุณสามารถเริ่มตั๊กแตนได้ภายใน locust --host=http://127.0.0.1 --logfile=locustfile.log จากนั้นคุณจะสามารถรันการทดสอบตั๊กแตนบน http://127.0.0.1:8089/ ได้

person Brian    schedule 09.08.2016

ตัวเลือก --logfile ที่คนอื่นกล่าวถึงน่าจะเป็นเส้นทางที่ง่ายที่สุด โปรดทราบว่าคุณอาจต้องการบันทึกข้อความของคุณแทนที่จะพิมพ์ออกมา ฉันคิดว่าตั๊กแตนตั้งค่า stdout logger พิเศษเพื่อให้ print ข้อความไปที่คอนโซล แต่ไม่ใช่ไปยังไฟล์บันทึก

อีกทางเลือกหนึ่งสำหรับ --logfile คือการใช้ระบบบันทึกของ python เพื่อเพิ่มไฟล์ appender ของคุณเอง นี่เป็นตัวเลือกที่ดีหากคุณต้องการตัวต่อท้ายไฟล์แบบม้วน หรือมีรูปแบบบันทึกที่คุณต้องการมากกว่ารูปแบบที่โลคัสกำหนดค่าไว้

นี่คือตัวอย่างวิธีที่เราตั้งค่าและใช้การบันทึกในการทดสอบตั๊กแตนของเรา สังเกตว่าแต่ละอินสแตนซ์ของชุดงานบันทึกลงในตัวบันทึกของตัวเองอย่างไร ทำให้ง่ายต่อการกรองไฟล์บันทึกเป็นตั๊กแตนตัวเดียว โปรดทราบว่าเราบันทึกข้อผิดพลาด HTTP ทั้งหมดเป็นคำเตือน

from locust import HttpLocust, TaskSet, task
import itertools
import logging
import socket
from logging.handlers import RotatingFileHandler

def append_file_logger():
    root_logger = logging.getLogger()
    log_format = "%(asctime)s.%(msecs)03d000 [%(levelname)s] {0}/%(name)s : %(message)s".format(socket.gethostname())
    formatter = logging.Formatter(log_format, '%Y-%m-%d %H:%M:%S')
    file_handler = RotatingFileHandler('./locust.log', maxBytes=5 * 1024 * 1024, backupCount=3)
    file_handler.setFormatter(formatter)
    file_handler.setLevel(logging.INFO)
    root_logger.addHandler(file_handler)    

append_file_logger()

counter = itertools.count()

class FooTaskSet(TaskSet):
    def on_start(self):
        self.logger = logging.getLogger('locust-%03d' % counter.next())
        self.logger.info('Hatching locust')

    @task
    def send(self):
        response = self.client.post(...)
        if not response.ok:
            self.logger.warn('Error sending post') # TODO add status code, url, and reponse to the log 

ข้อเสนอแนะสุดท้าย : หากคุณมีงานหลายงาน ให้กำหนดค่าให้บันทึกข้อผิดพลาด http ทั้งหมดด้วยรูปแบบเดียวกัน ทำให้ง่ายต่อการดึงข้อมูลจากบันทึกของคุณ

person bigh_29    schedule 17.11.2017

คุณมีข้อผิดพลาดทางไวยากรณ์ในบรรทัดที่ขึ้นต้นด้วย response = self.client.post(... สตริงสุดท้ายจะไม่ถูกปิด: 'X-Auth-Token':'xxxx}

เปลี่ยนเป็น 'X-Auth-Token':'xxxx'} และสคริปต์ควรจะทำงานได้ดี

เมื่อเริ่มต้น Locust ด้วยสคริปต์ที่คุณโพสต์ (โดยมีข้อผิดพลาดทางไวยากรณ์) คุณจะได้รับข้อยกเว้นและการติดตามสแต็กทันที

person heyman    schedule 26.09.2014
comment
เมื่อฉันแทนที่โทเค็นจริงด้วย x ฉันคิดว่าฉันเอาเครื่องหมายคำพูดปิดออกโดยไม่ได้ตั้งใจ ในสคริปต์ของฉันมันอยู่ที่นั่น ข้อผิดพลาดที่ฉันเห็นคือ 500 ฉันสงสัยว่าบันทึกของ Locust อยู่ที่ไหนเพื่อที่ฉันจะได้ดูและดูว่าโพสต์นั้นเป็นอย่างไร เมื่อฉันใช้บุรุษไปรษณีย์ที่มี URL เนื้อความ และส่วนหัวเดียวกัน มันใช้งานได้ดี - person Beenz; 26.09.2014
comment
ฉันเห็น. ฉันไม่แน่ใจว่าคุณหมายถึงบันทึกประเภทใด วิธีหนึ่งในการแก้ปัญหาคือส่งคำขอโดยใช้ทั้งบุรุษไปรษณีย์และ Locust เพื่อ requestb.in จากนั้นดูว่ามีอะไรบ้าง แตกต่าง - person heyman; 26.09.2014

ในกรณีที่ไม่ชัดเจน จะไม่มีการตั้งค่าเริ่มต้น https://github.com/locustio/locust/blob/master/locust/main.py

บรรทัดที่ 167

# log file
parser.add_option(
    '--logfile',
    action='store',
    type='str',
    dest='logfile',
    default=None,
    help="Path to log file. If not set, log will go to stdout/stderr",
)

เพียงผ่านตำแหน่งที่ต้องการในกรณีที่ทำงานเป็นกระบวนการพื้นหลังตามที่กล่าวไว้

person Priyeshj    schedule 17.10.2016

เพิ่มโค้ดต่อไปนี้ลงในไฟล์ locust ของคุณ:

import logging
log = logging.getLogger()
log.setLevel(logging.DEBUG)
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
fh = logging.FileHandler('locust.log')
fh.setLevel(logging.DEBUG)

ตอนนี้คุณสามารถเก็บตัวบันทึกหรือคำสั่งการพิมพ์ที่จะบรรจุลงในไฟล์ "locust.log" ของคุณ
สิ่งนี้ควรทำสิ่งมหัศจรรย์สำหรับคุณ

person Ashutosh Sharma    schedule 18.07.2019