import time import os from locust import Locust, events, task, TaskSet import RepoBenchmark startdir = os.getcwd() class P4RepoTasks(TaskSet): min_wait = 1000 max_wait = 10000 request_type = "p4" def __init__(self, *args, **kwargs): super(P4RepoTasks, 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"] def on_start(self): name = "sync" count = 0 start_time = time.time() try: self.rb = RepoBenchmark.P4Benchmark(startdir, self.config) existed = self.rb.createWorkspace() if not existed: name = "init_sync" count = self.rb.syncWorkspace() except Exception as e: total_time = int((time.time() - start_time) * 1000) events.request_failure.fire(request_type=self.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=self.request_type, name=name, response_time=total_time, response_length=count) @task(10) def editFiles(self): start_time = time.time() name = "edit/add/delete" count = 0 try: count = self.rb.basicFileActions() except Exception as e: total_time = int((time.time() - start_time) * 1000) events.request_failure.fire(request_type=self.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=self.request_type, name=name, response_time=total_time, response_length=count) name = "commit" try: self.rb.commit() except Exception as e: total_time = int((time.time() - start_time) * 1000) events.request_failure.fire(request_type=self.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=self.request_type, name=name, response_time=total_time, response_length=count) 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. """ task_set = P4RepoTasks def __init__(self, *args, **kwargs): super(P4RepoTestLocust, 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"]