我正在使用蝗虫对我们的应用进行压力测试。
由于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 :(得分:6)
通过在启动蝗虫时添加--logfile=locustfile.log
参数,您的print
消息将被重定向到名为locustfile.log
的文件,我认为这是您提到的 log 在你的问题。
假设您的蝗虫文件名为locustfile.py
。你在本地机器上运行蝗虫。你可以locust --host=http://127.0.0.1 --logfile=locustfile.log
开始蝗虫。然后,您就可以在http://127.0.0.1:8089/
上运行蝗虫测试。
答案 1 :(得分:1)
其他人提到的--logfile
选项可能是最简单的路线。请注意,您可能希望记录消息而不是打印消息。我认为locust会设置一个特殊的stdout记录器,以便print
消息进入控制台,但不会进入日志文件。
--logfile
的替代方法是利用python的日志系统添加自己的文件追加器。如果您需要滚动文件追加器,或者您更喜欢使用蝗虫配置格式的日志格式,这是一个不错的选择。
以下是我们如何在蝗虫测试中设置和使用日志记录的示例。请注意taskset的每个实例如何记录到自己的记录器。这样可以轻松地将日志文件过滤到单个蝗虫。另请注意,我们将所有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错误。可以轻松从日志中提取数据。
答案 2 :(得分:0)
您在response = self.client.post(...
开头的行上有语法错误。最后一个字符串永远不会关闭:'X-Auth-Token':'xxxx}
。
将其更改为'X-Auth-Token':'xxxx'}
,脚本应该可以正常工作。
使用您发布的脚本启动Locust时(语法错误),您将立即获得异常和堆栈跟踪。
答案 3 :(得分: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",
)
只需传递首选位置,以防作为后面提到的后台进程运行。
答案 4 :(得分:0)
将以下代码段添加到您的蝗虫文件中:
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” 文件中。
这应该为你做魔术。