import time import os from locust import Locust, events, task, TaskSet import RepoBenchmark startdir = os.getcwd() class Timer(object): def __init__(self, request_type): self.start_time = time.time() self.request_type = request_type def report_failure(self, name, e): total_time = int((time.time() - self.start_time) * 1000) events.request_failure.fire(request_type=self.request_type, name=name, response_time=total_time, exception=e) def report_success(self, name, count): total_time = int((time.time() - self.start_time) * 1000) events.request_success.fire(request_type=self.request_type, name=name, response_time=total_time, response_length=count) 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 t = Timer(self.request_type) 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: t.report_failure(name, e) else: t.report_success(name, count) @task(10) def editFiles(self): start_time = time.time() name = "edit/add/delete" count = 0 t = Timer(self.request_type) try: count = self.rb.basicFileActions() except Exception as e: t.report_failure(name, e) else: t.report_success(name, count) name = "commit" t = Timer(self.request_type) try: self.rb.commit() except Exception as e: t.report_failure(name, e) else: t.report_success(name, count) class P4RepoTestLocust(Locust): """Will be imported and then run by locust""" task_set = P4RepoTasks