Skip to content

Commit fbd792e

Browse files
committed
wagtail: fix and improve locust teardown
1 parent d2abfd0 commit fbd792e

File tree

1 file changed

+40
-33
lines changed

1 file changed

+40
-33
lines changed

Benchmark/wagtail/locustfile.py

Lines changed: 40 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import re
55
import logging
66
from locust import HttpUser, task, between
7+
from requests.adapters import HTTPAdapter
78

89
def id_generator(size=6, chars=string.ascii_uppercase + string.digits):
910
return ''.join(random.choice(chars) for _ in range(size))
@@ -14,7 +15,7 @@ class admin(HttpUser):
1415
num_editors = 0
1516
admin_instance = None
1617
blogpage_id = None
17-
stopped = False
18+
homepage_id = None
1819

1920
def make_new_editor(self):
2021
with self.client.post(f"/admin/users/new/", data={
@@ -37,7 +38,7 @@ def make_new_editor(self):
3738
return admin.num_editors - 1
3839

3940
def make_blog_index_page(self):
40-
with self.client.post("/admin/pages/add/blog/blogindexpage/3/", data={
41+
with self.client.post(f"/admin/pages/add/blog/blogindexpage/{admin.get_homepage_id()}/", data={
4142
"title": "Blog",
4243
"slug": "blog",
4344
"intro": """{"blocks":[{"key":"60mvf","text":"This is our blog!","type":"unstyled","depth":0,"inlineStyleRanges":[],"entityRanges":[],"data":{}}],"entityMap":{}}""",
@@ -54,31 +55,12 @@ def make_blog_index_page(self):
5455
}, catch_response=True) as response:
5556
response.success()
5657

57-
def make_home_page(self):
58-
with self.client.post("/admin/pages/add/home/homepage/1/", data={
59-
"title": "Home",
60-
"slug": "home",
61-
"comment_notifications": "on",
62-
"comments-TOTAL_FORMS": "0",
63-
"comments-INITIAL_FORMS": "0",
64-
"comments-MIN_NUM_FORMS": "0",
65-
"action-publish": "action-publish",
66-
"csrfmiddlewaretoken": self.csrftoken,
67-
}, headers={
68-
'X-CSRFToken': self.csrftoken,
69-
}, cookies={
70-
"csrftoken": self.csrftoken,
71-
}, catch_response=True) as response:
72-
response.success()
73-
7458
def on_start(self):
7559
# create csrf token
7660
response = self.client.get("/admin/login/")
7761
self.csrftoken = response.cookies['csrftoken']
7862

7963
self.login()
80-
81-
self.make_home_page()
8264
self.make_blog_index_page()
8365

8466
def login(self):
@@ -93,7 +75,7 @@ def login(self):
9375
"csrftoken": self.csrftoken,
9476
})
9577

96-
def on_stop(self):
78+
def delete_editors(self):
9779
# get list of user Ids and delete them
9880
ids_to_delete = set()
9981

@@ -117,18 +99,16 @@ def on_stop(self):
11799
}, cookies={
118100
"csrftoken": self.csrftoken,
119101
})
120-
121-
# delete blog
122-
response = self.client.post(f"/admin/pages/{admin.get_blogpage_id()}/delete/", data={
102+
103+
def delete_blog(self):
104+
self.client.post(f"/admin/pages/{admin.get_blogpage_id()}/delete/", data={
123105
"csrfmiddlewaretoken": self.csrftoken,
124106
}, headers={
125107
'X-CSRFToken': self.csrftoken,
126108
}, cookies={
127109
"csrftoken": self.csrftoken,
128110
})
129111

130-
admin.stopped = True
131-
132112
@staticmethod
133113
def create_editor(env):
134114
if not admin.admin_instance:
@@ -139,17 +119,30 @@ def create_editor(env):
139119
@staticmethod
140120
def get_blogpage_id():
141121
if not admin.blogpage_id:
142-
with admin.admin_instance.client.get(f"/admin/pages/3/", catch_response=True) as response:
122+
with admin.admin_instance.client.get(f"/admin/pages/{admin.get_homepage_id()}/", catch_response=True) as response:
143123
response.success()
144-
admin.blogpage_id = re.findall(r'href="/admin/pages/(\d+)/add_subpage', response.text)[-1]
124+
admin.blogpage_id = re.findall(r'/admin/pages/(\d+)/add_subpage', response.text)[-1]
145125
return admin.blogpage_id
146126

127+
@staticmethod
128+
def get_homepage_id():
129+
if not admin.homepage_id:
130+
with admin.admin_instance.client.get(f"/admin/pages/", catch_response=True) as response:
131+
response.success()
132+
admin.homepage_id = re.findall(r'/admin/pages/(\d+)/add_subpage', response.text)[-1]
133+
return admin.homepage_id
134+
147135

148136
class editor(HttpUser):
149137
wait_time = between(5, 10)
150138
fixed_count = 1000
151139
weight = 10
152140
blogs = set() # set of blog slugs
141+
num_instances = 0
142+
143+
def __init__(self, *args, **kwargs):
144+
super().__init__(*args, **kwargs)
145+
self.client.mount('http://', HTTPAdapter(pool_maxsize=editor.fixed_count))
153146

154147
def on_start(self):
155148
# create csrf token
@@ -160,11 +153,12 @@ def on_start(self):
160153
self.logged_in = False
161154

162155
self.login()
156+
editor.num_instances += 1
163157

164158
def on_stop(self):
165-
if admin.stopped:
166-
return
167-
admin.admin_instance.on_stop()
159+
editor.num_instances -= 1
160+
if editor.num_instances == 0:
161+
admin.admin_instance.delete_editors()
168162

169163
def login(self):
170164
# login as editor
@@ -218,14 +212,27 @@ def create_blog_post(self):
218212
editor.blogs.add(blog_slug)
219213

220214

221-
222215
class reader(HttpUser):
223216
wait_time = between(1, 3)
224217
fixed_count = 10000
225218
weight = 1
219+
num_instances = 0
220+
221+
def __init__(self, *args, **kwargs):
222+
super().__init__(*args, **kwargs)
223+
self.client.mount('http://', HTTPAdapter(pool_maxsize=reader.fixed_count))
224+
225+
def on_start(self):
226+
reader.num_instances += 1
227+
228+
def on_stop(self):
229+
reader.num_instances -= 1
230+
if reader.num_instances == 0:
231+
admin.admin_instance.delete_blog()
226232

227233
@task
228234
def view_blog_index(self):
235+
if not admin.blogpage_id: return
229236
with self.client.get("/blog/", catch_response=True) as response:
230237
response.success()
231238

0 commit comments

Comments
 (0)