p4_locust.py #3

  • //
  • guest/
  • robert_cowham/
  • p4benchmark/
  • main/
  • p4_locust.py
  • View
  • Commits
  • Open Download .zip Download (2 KB)
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
# Change User Description Committed
#6 24711 Robert Cowham Restructure and tidy up
#5 19799 Robert Cowham Refactored to put some common stuff in RepoLocust.py
#4 19798 Robert Cowham Log exceptions.
Refactor Svn as well
#3 19797 Robert Cowham Refactored timing
#2 19796 Robert Cowham Refactored into taskset
#1 19773 Robert Cowham Initial version of benchmark scripts