import time import os from locust import Locust, events, task, TaskSet import RepoBenchmark startdir = os.getcwd() class P4RepoTestClient(object): """ Simple, sample client implementation that calls p4/svn commands and fires locust events on request_success and request_failure, so that all requests gets tracked in locust's statistics. """ def __init__(self): pass def do_work(self, config): request_type = "repo_tasks" name = "p4" start_time = time.time() try: rb = RepoBenchmark.P4Benchmark(startdir, config) rb.run() except Exception as e: total_time = int((time.time() - start_time) * 1000) events.request_failure.fire(request_type=request_type, name=name, response_time=total_time, exception=e) else: total_time = int((time.time() - start_time) * 1000) events.request_success.fire(request_type=request_type, name=name, response_time=total_time, response_length=0) class P4RepoTestLocust(Locust): """ This is the abstract Locust class which should be subclassed. It provides RepoTest client that can be used to make requests that will be tracked in Locust's statistics. """ def __init__(self, *args, **kwargs): super(P4RepoTestLocust, self).__init__(*args, **kwargs) self.client = P4RepoTestClient() class P4RepoUser(P4RepoTestLocust): min_wait = 1000 max_wait = 10000 def __init__(self, *args, **kwargs): super(P4RepoUser, self).__init__(*args, **kwargs) self.config = RepoBenchmark.readConfig(startdir) self.min_wait = self.config["general"]["min_wait"] self.max_wait = self.config["general"]["max_wait"] class task_set(TaskSet): @task(10) def do_work(self): self.client.do_work(RepoBenchmark.readConfig(startdir))