From 173fc4cec207868d319cb20705b7a34c7d3e64a4 Mon Sep 17 00:00:00 2001 From: Yghor Kerscher Date: Thu, 26 Oct 2017 21:53:55 +0200 Subject: [PATCH] Load test with Locust.io --- etc/load-testing/locustfile.py | 91 +++++++++++++++++++++++++++++++ etc/load-testing/requirements.txt | 17 ++++++ 2 files changed, 108 insertions(+) create mode 100644 etc/load-testing/locustfile.py create mode 100644 etc/load-testing/requirements.txt diff --git a/etc/load-testing/locustfile.py b/etc/load-testing/locustfile.py new file mode 100644 index 0000000..2d781b9 --- /dev/null +++ b/etc/load-testing/locustfile.py @@ -0,0 +1,91 @@ +from locust import HttpLocust, task, TaskSet +from random import randrange + +class HoogleQueries(TaskSet): + @task + def hoogle_queries(self): + # TODO: Get actual common queries from server logs + _hoogle_queries = [ + "Ord", + "Eq", + "Num", + "pack", + "Text -> String", + "fmap", + "a -> a", + "traverse", + "bracket", + "^.", + ">>>", + "<$>", + "bimap", + "inject" + ] + for q in _hoogle_queries: + self.client.get("/lts/hoogle?q=" + q, name="/lts/hoogle?q=[:query]") + + @task + def stop(self): + self.interrupt() + +class PackageBrowser(TaskSet): + @task(50) + def list_packages(self): + self.client.get("/lts") + + @task(10) + def browse_package(self): + # TODO: Get packages to test from up-to-date listing on Stackage, move out of here + _packages = [ + "accelerate", + "adjunctions", + "aeson", + "binary", + "both", + "extensible-effects", + "hamlet", + "hdocs", + "microlens", + "range", + "sort", + "text", + "universe" + ] + self.client.get("/lts/package/" + _packages[randrange(len(_packages))], name="/lts/package/:package") + + @task(2) + 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(5) + def nightly(self): + self.client.get("/nightly") + + @task(2) + def snapshots(self): + self.client.get("/snapshots") + + @task(2) + def stop(self): + self.interrupt() + +class UserBehaviour(TaskSet): + tasks = { + HoogleQueries : 2, + PackageBrowser : 2, + TopLevelPages : 1 + } + +class WebsiteUser(HttpLocust): + task_set = UserBehaviour + min_wait = 1000 + max_wait = 9000 diff --git a/etc/load-testing/requirements.txt b/etc/load-testing/requirements.txt new file mode 100644 index 0000000..5b1fa01 --- /dev/null +++ b/etc/load-testing/requirements.txt @@ -0,0 +1,17 @@ +certifi==2017.4.17 +chardet==3.0.4 +click==6.7 +Flask==0.12.2 +gevent==1.2.2 +greenlet==0.4.12 +idna==2.5 +itsdangerous==0.24 +Jinja2==2.9.6 +-e git://github.com/locustio/locust.git@072d7752552ff32898253fcd5734c3b64995c17e#egg=locustio +MarkupSafe==1.0 +msgpack-python==0.4.8 +pyzmq==15.2.0 +requests==2.18.1 +six==1.10.0 +urllib3==1.21.1 +Werkzeug==0.12.2