Load test with multiple different snapshots.

This commit is contained in:
Yghor Kerscher 2017-10-31 16:54:52 +01:00
parent 173fc4cec2
commit 8514b3d710

View File

@ -1,6 +1,25 @@
from locust import HttpLocust, task, TaskSet from locust import HttpLocust, task, TaskSet
from random import randrange 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): class HoogleQueries(TaskSet):
@task @task
def hoogle_queries(self): def hoogle_queries(self):
@ -21,18 +40,25 @@ class HoogleQueries(TaskSet):
"bimap", "bimap",
"inject" "inject"
] ]
_snapshot = select_snapshot()
for q in _hoogle_queries: 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 @task
def stop(self): def stop(self):
self.interrupt() self.interrupt()
class PackageBrowser(TaskSet): class Documentation(TaskSet):
@task(50) @task
def list_packages(self): def docs(self):
self.client.get("/lts") _snapshot = select_snapshot()
self.client.get("/" + _snapshot + "/docs", name="/:snapshot/docs")
@task
def stop(self):
self.interrupt()
class PackageBrowser(TaskSet):
@task(10) @task(10)
def browse_package(self): def browse_package(self):
# TODO: Get packages to test from up-to-date listing on Stackage, move out of here # TODO: Get packages to test from up-to-date listing on Stackage, move out of here
@ -51,21 +77,31 @@ class PackageBrowser(TaskSet):
"text", "text",
"universe" "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) @task(2)
def stop(self): def stop(self):
self.interrupt() self.interrupt()
class Snapshots(TaskSet):
@task
def updateSnapshots(self):
self.client.get("/download/snapshots.json")
@task
def stop(self):
self.interrupt()
class TopLevelPages(TaskSet): class TopLevelPages(TaskSet):
@task(30)
def docs(self):
self.client.get("/docs")
@task(20) @task(20)
def install(self): def install(self):
self.client.get("/install") self.client.get("/install")
@task(10)
def lts(self):
self.client.get("/lts")
@task(5) @task(5)
def nightly(self): def nightly(self):
self.client.get("/nightly") self.client.get("/nightly")
@ -80,9 +116,11 @@ class TopLevelPages(TaskSet):
class UserBehaviour(TaskSet): class UserBehaviour(TaskSet):
tasks = { tasks = {
HoogleQueries : 2, HoogleQueries : 5,
PackageBrowser : 2, PackageBrowser : 2,
TopLevelPages : 1 Documentation : 2,
Snapshots : 1,
TopLevelPages : 1,
} }
class WebsiteUser(HttpLocust): class WebsiteUser(HttpLocust):