From 8514b3d71073db540813b64139acfe4beff4c828 Mon Sep 17 00:00:00 2001 From: Yghor Kerscher Date: Tue, 31 Oct 2017 16:54:52 +0100 Subject: [PATCH] Load test with multiple different snapshots. --- etc/load-testing/locustfile.py | 62 +++++++++++++++++++++++++++------- 1 file changed, 50 insertions(+), 12 deletions(-) diff --git a/etc/load-testing/locustfile.py b/etc/load-testing/locustfile.py index 2d781b9..86978ae 100644 --- a/etc/load-testing/locustfile.py +++ b/etc/load-testing/locustfile.py @@ -1,6 +1,25 @@ from locust import HttpLocust, task, TaskSet from random import randrange +def random_element(xs): + return xs[randrange(len(xs))] + +def select_snapshot(): + _snapshots = [ + "lts", + "nightly", + "lts-9.10", + "lts-9.7", + "lts-9.6", + "lts-9.5", + "lts-8.8", + "nightly-2017-07-05", + "nightly-2017-05-30", + "nightly-2017-03-25", + "lts-7.20", + ] + return random_element(_snapshots) + class HoogleQueries(TaskSet): @task def hoogle_queries(self): @@ -21,18 +40,25 @@ class HoogleQueries(TaskSet): "bimap", "inject" ] + _snapshot = select_snapshot() for q in _hoogle_queries: - self.client.get("/lts/hoogle?q=" + q, name="/lts/hoogle?q=[:query]") + self.client.get("/" + _snapshot + "/hoogle?q=" + q, name="/:snapshot/hoogle?q=[:query]") @task def stop(self): self.interrupt() -class PackageBrowser(TaskSet): - @task(50) - def list_packages(self): - self.client.get("/lts") +class Documentation(TaskSet): + @task + def docs(self): + _snapshot = select_snapshot() + self.client.get("/" + _snapshot + "/docs", name="/:snapshot/docs") + @task + def stop(self): + self.interrupt() + +class PackageBrowser(TaskSet): @task(10) def browse_package(self): # TODO: Get packages to test from up-to-date listing on Stackage, move out of here @@ -51,21 +77,31 @@ class PackageBrowser(TaskSet): "text", "universe" ] - self.client.get("/lts/package/" + _packages[randrange(len(_packages))], name="/lts/package/:package") + _snapshot = select_snapshot() + self.client.get("/" + _snapshot + "/package/" + random_element(_packages), name="/:snapshot/package/:package") @task(2) def stop(self): self.interrupt() +class Snapshots(TaskSet): + @task + def updateSnapshots(self): + self.client.get("/download/snapshots.json") + + @task + def stop(self): + self.interrupt() + class TopLevelPages(TaskSet): - @task(30) - def docs(self): - self.client.get("/docs") - @task(20) def install(self): self.client.get("/install") + @task(10) + def lts(self): + self.client.get("/lts") + @task(5) def nightly(self): self.client.get("/nightly") @@ -80,9 +116,11 @@ class TopLevelPages(TaskSet): class UserBehaviour(TaskSet): tasks = { - HoogleQueries : 2, + HoogleQueries : 5, PackageBrowser : 2, - TopLevelPages : 1 + Documentation : 2, + Snapshots : 1, + TopLevelPages : 1, } class WebsiteUser(HttpLocust):