class LocustRunner: def __init__(self, base_url: str, user: User = RootUser): self.env = Environment(user_classes=[user]) self.env.host = base_url self.env.create_local_runner() def start_web_ui(self): self.env.create_web_ui("127.0.0.1", 8089) def stop_web_ui(self): self.env.web_ui.stop() def run(self, user_count: int, hatch_rate: int, total_run_time: int, csv_prefix: str): self.env.runner.start(user_count, hatch_rate) gevent.spawn(stats_writer, self.env, csv_prefix, True) gevent.spawn_later(total_run_time, lambda: self.env.runner.quit()) def wait_runner(self): self.env.runner.greenlet.join()
def locust_run(c, r, t, base, path, webui): class User(HttpUser): wait_time = constant(1) host = base @task def my_task(self): self.client.get(path) env = Environment(user_classes=[User]) env.create_local_runner() if webui: env.create_web_ui("127.0.0.1", 8089) webbrowser.open('http://127.0.0.1:8089') gevent.spawn(stats_printer(env.stats)) gevent.spawn(stats_history, env.runner) env.runner.start(c, spawn_rate=c) gevent.spawn_later(t, lambda: env.runner.quit()) env.runner.greenlet.join() if webui: env.web_ui.stop()
@task def task_404(self): self.client.get("/non-existing-path") @task def my_task(self): self.client.get("/api/Url/1") # setup Environment and Runner env = Environment(user_classes=[User]) env.create_local_runner() # start a WebUI instance env.create_web_ui("127.0.0.1", 8089) # start a greenlet that periodically outputs the current stats gevent.spawn(stats_printer(env.stats)) # start a greenlet that save current stats to history gevent.spawn(stats_history, env.runner) # start the test env.runner.start(1, spawn_rate=100) # in 60 seconds stop the runner gevent.spawn_later(60, lambda: env.runner.quit()) # wait for the greenlets env.runner.greenlet.join()
print(args) logger.info('Initialising Load Testing') class User(GraphQLLocust): host = args.host tasks = [CountryBehaviour, TimeseriesBehaviour] wait_time = between(args.wait_time_min, args.wait_time_max) logger.info('Setting up Environment and Runner') env = Environment(user_classes=[User], events=events) env.create_local_runner() if args.web: logger.info(f'Launching Web UI in {args.web_host}:{args.web_port}') env.create_web_ui(args.web_host, args.web_port) gevent.spawn(stats_printer(env.stats)) logger.info(f'Starting Run with {args.number_of_users} users with hatch rate {args.user_hatch_rate}') env.runner.start(args.number_of_users, hatch_rate=args.user_hatch_rate) gevent.spawn_later(args.duration, lambda: env.runner.quit()) env.runner.greenlet.join() if args.web: logger.debug('Stopping Web UI') env.web_ui.stop() logger.info(f'Writing results to output directory {args.output_directory}') os.makedirs(args.output_directory, exist_ok=True)