2014-09-25 99 views
1

我使用蝗虫来压力测试我们的应用程序。我在哪里可以找到蝗虫日志?

我收到错误,因为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 

谢谢!

+0

我在Locust中看到这个错误:HTTPError('500服务器错误:服务器错误') – Beenz 2014-09-26 13:52:41

回答

0

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

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

当您使用您发布的脚本启动Locust(语法错误)时,您将立即得到一个Exception和堆栈跟踪。

+0

当我用x's替换实际的令牌时,我想我偶然拿出了结束语。在我的脚本中,它在那里。我看到的错误是500。我想知道Locust的日志在哪里,这样我就可以看看帖子的样子。当我使用邮差与相同的网址,身体和头 - 它工作正常。 – Beenz 2014-09-26 13:56:54

+0

我明白了。我不确定你指的是什么样的日志。调试问题的一种方法可能是使用postman和Locust对http://requestb.in/执行请求,然后查看不同之处。 – heyman 2014-09-26 18:08:25

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/上运行蝗虫测试。

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提到的优选的位置。

0

其他人提到的--logfile选项可能是最简单的路线。请注意,您可能想记录您的消息而不是打印它们。我想蝗虫会建立一个特殊的stdout记录器,使得print消息进入控制台,但不会记录到日志文件。

--logfile的替代方法是利用python的日志记录系统添加自己的文件appender。如果你需要一个滚动文件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错误。使您可以轻松从日志中提取数据。

相关问题