start_test & prepare_env

Overview

start_test is the high-level entrypoint that picks a user template, seeds the parameter resolver, and asks prepare_env to build a Locust environment in the requested mode (local / master / worker).

Signature

from je_load_density import start_test

start_test(
    user_detail_dict={"user": "fast_http_user"},
    user_count=50,
    spawn_rate=10,
    test_time=60,
    web_ui_dict=None,                  # {"host": "...", "port": ...}
    runner_mode="local",               # "local" | "master" | "worker"
    master_bind_host="*",
    master_bind_port=5557,
    master_host="127.0.0.1",
    master_port=5557,
    expected_workers=0,
    tasks=...,
    variables={"host": "https://api.example.com"},
    csv_sources=[{"name": "users", "file_path": "users.csv"}],
)

Supported user types

user

Template

http_user

locust.HttpUser wrapper backed by requests.

fast_http_user

locust.FastHttpUser wrapper backed by geventhttpclient.

websocket_user

WebSocket frame loop (lazy websocket-client import).

grpc_user

Unary gRPC calls against operator-supplied stubs.

mqtt_user

MQTT publish / subscribe loop.

socket_user

Raw TCP / UDP send-recv.

prepare_env

prepare_env is the lower-level layer behind start_test. It is useful when you want to build a Locust environment manually, for example to integrate with another runner.

from je_load_density import prepare_env
from je_load_density.wrapper.user_template.fast_http_user_template import (
    FastHttpUserWrapper, set_wrapper_fasthttp_user,
)

set_wrapper_fasthttp_user(
    {"user": "fast_http_user"},
    tasks=[{"method": "get", "request_url": "https://example.com/"}],
)
prepare_env(
    user_class=FastHttpUserWrapper,
    user_count=50,
    spawn_rate=10,
    test_time=60,
    runner_mode="local",
)

Distributed mode

Master:

start_test(
    user_detail_dict={"user": "fast_http_user"},
    runner_mode="master",
    master_bind_host="0.0.0.0",
    master_bind_port=5557,
    expected_workers=4,
    user_count=200,
    spawn_rate=20,
    test_time=300,
    tasks=[...],
)

Worker (run on each node, on the same network as master):

start_test(
    user_detail_dict={"user": "fast_http_user"},
    runner_mode="worker",
    master_host="10.0.0.10",
    master_port=5557,
    tasks=[...],
)

The master waits for expected_workers workers to register before ramping up. Workers join the master and run the requested user count proportional to the cluster size.