6

我正在使用 locust 对我们的应用程序进行压力测试。

我收到错误,因为 POST 调用似乎不正确。我在哪里可以看到蝗虫的日志?我想看看 post call 的样子,看看有什么问题。

这是我的代码,以防有人可以告诉我我做错了什么:

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

谢谢!

4

5 回答 5

11

--logfile=locustfile.log通过在启动 locust 时添加参数,您的print消息将被重定向到一个名为 的文件locustfile.log,我认为这是您在问题中提到的日志。

假设您的 locust 文件名为locustfile.py. 你在本地机器上运行 locust。你可以开始蝗虫locust --host=http://127.0.0.1 --logfile=locustfile.log。然后你就可以在http://127.0.0.1:8089/.

于 2016-08-09T09:06:51.467 回答
2

--logfile其他人提到的选项可能是最简单的路线。请注意,您可能想要记录您的消息而不是打印它们。我认为 locust 设置了一个特殊的标准输出记录器,以便print消息进入控制台,而不是日志文件。

另一种方法--logfile是利用 python 的日志系统来添加您自己的文件附加程序。如果您需要滚动文件附加程序,或者拥有比 locust 配置的格式更喜欢的日志格式,这是一个不错的选择。

这是我们如何在 locust 测试中设置和使用日志记录的示例。注意任务集的每个实例如何记录到自己的记录器。这使得将日志文件过滤到单个 locust 变得很容易。另请注意,我们将所有 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 错误。使从日志中提取数据变得容易。

于 2017-11-17T01:47:25.957 回答
0

以 .开头的行有语法错误response = self.client.post(...。最后一个字符串永远不会关闭:'X-Auth-Token':'xxxx}.

将其更改为'X-Auth-Token':'xxxx'},脚本应该可以正常工作。

使用您发布的脚本(带有语法错误)启动 Locust 时,您将立即获得异常和堆栈跟踪。

于 2014-09-26T11:45:56.013 回答
0

如果不明显,则没有默认设置。 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",
)

只需传递首选位置,以防如lyen 所述作为后台进程运行。

于 2016-10-17T23:05:06.533 回答
0

将以下代码添加到您的 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”文件中。
这应该为您带来魔力。

于 2019-07-18T11:01:13.360 回答