この記事では、イベントへのイナゴの適用について引き続き説明します。
initイベントの使用法
initイベントは、各Locustプロセスの開始時にトリガーされます。このイベントメカニズムは、分散テスト要件に特に役立ちます。ワーカープロセスごとにinitイベントを設定できます。たとえば、テストがトリガーされたときに、ワーカープロセスごとにグローバル変数やその他の状態値を取得する必要があります。この種の要件にはinitイベントを使用する方が適切です。以下は公式の事例から引用したものです。
from locust import events,between,User,task
from locust.runners import MasterRunner
class MyUser(User):
wait_time = between(5,8)
@events.init.add_listener
def on_locust_init(environment,**kwargs):
if isinstance(environment.runner,MasterRunner):
print("I'm on master node")
else:
print("I'm on a worker or standalone node")
@task
def task_1(self):
print("it is task1")
@task
def task_2(self):
print("it is task2")
上記のコードを実行した後、コンソールの出力情報は次のようになり、ローカルで実行しているローカストプロセスはワーカー/スタンドアロンノードであることがわかります。これは正しいです。最初は間違いなくマスターノードではないため、理由は次のとおりです。
1)ここでは分散テストではありません。単一のマシンテストとして理解できるため、マスターノードではありません。
2)マスターノードは仮想ユーザーをシミュレートしません。マスターノードは主に、テストの開始時にリアルタイムのデータ表示を表示し、イナゴのWebインターフェイスを実行するために使用されます。
以降の一連のコースでは、分散テストの内容についても詳しく説明しますので、ご期待ください。
[2020-11-26 09:06:41,135] jasondeMacBook-Pro.local/INFO/locust.main: Starting web interface at http://:8089
I'm on a worker or standalone node
[2020-11-26 09:06:41,144] jasondeMacBook-Pro.local/INFO/locust.main: Starting Locust 1.1.1
[2020-11-26 09:06:47,454] jasondeMacBook-Pro.local/INFO/locust.runners: Hatching and swarming 1 users at the rate 1 users/s (0 users already running)...
[2020-11-26 09:06:47,454] jasondeMacBook-Pro.local/INFO/locust.runners: All users hatched: MyUser: 1 (0 already running)
it is task1
it is task2
it is task1
it is task1
it is task2
it is task1
...