6

アプリのストレステストにイナゴを使用しています。

POST 呼び出しが正しくないように見えるため、エラーが発生します。イナゴのログはどこで確認できますか? 何が問題なのかを確認するために、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

ありがとう!

4

5 に答える 5

11

--logfile=locustfile.logイナゴの起動時にパラメーターを追加すると、printメッセージは というファイルにリダイレクトされます。これは、質問で言及したログlocustfile.logだと思います。

イナゴのファイル名が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人が言及したオプションは、おそらく最も簡単なルートです。メッセージを印刷するのではなく、ログに記録する必要があることに注意してください。printイナゴは、ログ ファイルではなくコンソールにメッセージが送信されるように、特別な stdout ロガーを設定していると思います。

別の方法として、--logfilepython のロギング システムを利用して独自のファイル アペンダーを追加する方法があります。これは、ローリング ファイル アペンダーが必要な場合、または locust が構成する形式よりも好みのログ形式がある場合に適したオプションです。

以下は、イナゴ テストでロギングをセットアップして使用する方法の例です。タスクセットの各インスタンスが独自のロガーにどのようにログを記録するかに注意してください。これにより、ログ ファイルを 1 つのイナゴに簡単にフィルター処理できます。また、すべての 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 に答える