[IMP] website, website_blog, *: also test perf of real use cases

* test_website

The `nocache` URL param was introduced with [1] which allows to bypass
the cache when serving a page.
Bypassing that cache, despite not being the most common flow, was done
in the perf tests since that commit. Ultimately, it was not testing
real use cases anymore (despite still being useful as it would still
prevent perf killer feature to be merged).

This commit ensures the perf tests are also tested with cache.

[1]: https://github.com/odoo/odoo/commit/cbf8d3b3047c94a2ff7fb197bbae92a402e0b58b

task-2774979

closes odoo/odoo#85261

X-original-commit: 5d44d890021cfc7767daa1f366e636288e84f1f6
Signed-off-by: Romain Derie (rde) <rde@odoo.com>
This commit is contained in:
Romain Derie
2022-02-24 17:49:56 +00:00
parent 3ea3b6a9a1
commit dad8dca0da
3 changed files with 33 additions and 13 deletions
@@ -8,3 +8,4 @@ class TestPerformance(UtilPerf):
def test_10_perf_sql_website_controller_minimalist(self):
url = '/empty_controller_test'
self.assertEqual(self._get_url_hot_query(url), 0)
self.assertEqual(self._get_url_hot_query(url, cache=False), 0)
+23 -9
View File
@@ -19,8 +19,10 @@ will be added::
class UtilPerf(HttpCase):
def _get_url_hot_query(self, url):
url += ('?' not in url and '?' or '') + '&nocache'
def _get_url_hot_query(self, url, cache=True):
url += ('?' not in url and '?' or '')
if not cache:
url += '&nocache'
# ensure worker is in hot state
self.url_open(url)
@@ -38,18 +40,22 @@ class TestStandardPerformance(UtilPerf):
self.assertEqual(self.env['res.users'].sudo().browse(2).website_published, False)
url = '/web/image/res.users/2/image_256'
self.assertEqual(self._get_url_hot_query(url), 4)
self.assertEqual(self._get_url_hot_query(url, cache=False), 4)
def test_11_perf_sql_img_controller(self):
self.authenticate('demo', 'demo')
self.env['res.users'].sudo().browse(2).website_published = True
url = '/web/image/res.users/2/image_256'
self.assertEqual(self._get_url_hot_query(url), 3)
self.assertEqual(self._get_url_hot_query(url, cache=False), 3)
def test_20_perf_sql_img_controller_bis(self):
url = '/web/image/website/1/favicon'
self.assertEqual(self._get_url_hot_query(url), 2)
self.assertEqual(self._get_url_hot_query(url, cache=False), 2)
self.authenticate('portal', 'portal')
self.assertEqual(self._get_url_hot_query(url), 2)
self.assertEqual(self._get_url_hot_query(url, cache=False), 2)
class TestWebsitePerformance(UtilPerf):
@@ -86,25 +92,31 @@ class TestWebsitePerformance(UtilPerf):
def test_10_perf_sql_queries_page(self):
# standard untracked website.page
self.assertEqual(self._get_url_hot_query(self.page.url), 9)
self.assertEqual(self._get_url_hot_query(self.page.url), 6)
self.assertEqual(self._get_url_hot_query(self.page.url, cache=False), 9)
self.menu.unlink()
self.assertEqual(self._get_url_hot_query(self.page.url), 11)
self.assertEqual(self._get_url_hot_query(self.page.url), 8)
self.assertEqual(self._get_url_hot_query(self.page.url, cache=False), 11)
def test_15_perf_sql_queries_page(self):
# standard tracked website.page
self.page.track = True
self.assertEqual(self._get_url_hot_query(self.page.url), 17)
self.assertEqual(self._get_url_hot_query(self.page.url), 14)
self.assertEqual(self._get_url_hot_query(self.page.url, cache=False), 17)
self.menu.unlink()
self.assertEqual(self._get_url_hot_query(self.page.url), 19)
self.assertEqual(self._get_url_hot_query(self.page.url), 16)
self.assertEqual(self._get_url_hot_query(self.page.url, cache=False), 19)
def test_20_perf_sql_queries_homepage(self):
# homepage "/" has its own controller
self.assertEqual(self._get_url_hot_query('/'), 16)
self.assertEqual(self._get_url_hot_query('/'), 14)
self.assertEqual(self._get_url_hot_query('/', cache=False), 16)
def test_30_perf_sql_queries_page_no_layout(self):
# website.page with no call to layout templates
self.page.arch = '<div>I am a blank page</div>'
self.assertEqual(self._get_url_hot_query(self.page.url), 7)
self.assertEqual(self._get_url_hot_query(self.page.url), 6)
self.assertEqual(self._get_url_hot_query(self.page.url, cache=False), 7)
def test_40_perf_sql_queries_page_multi_level_menu(self):
# menu structure should not impact SQL requests
@@ -122,10 +134,12 @@ class TestWebsitePerformance(UtilPerf):
menu_bb.parent_id = menu_b
menu_aa.parent_id = menu_a
self.assertEqual(self._get_url_hot_query(self.page.url), 9)
self.assertEqual(self._get_url_hot_query(self.page.url), 6)
self.assertEqual(self._get_url_hot_query(self.page.url, cache=False), 9)
def test_50_perf_sql_web_assets(self):
# assets route /web/assets/..
self.url_open('/') # create assets attachments
assets_url = self.env['ir.attachment'].search([('url', '=like', '/web/assets/%/web.assets_common%.js')], limit=1).url
self.assertEqual(self._get_url_hot_query(assets_url), 0)
self.assertEqual(self._get_url_hot_query(assets_url, cache=False), 0)
@@ -13,7 +13,8 @@ class TestBlogPerformance(UtilPerf):
self.env['website'].search([]).channel_id = False
def test_10_perf_sql_blog_standard_data(self):
self.assertEqual(self._get_url_hot_query('/blog'), 25)
self.assertEqual(self._get_url_hot_query('/blog'), 26)
self.assertEqual(self._get_url_hot_query('/blog', cache=False), 25)
def test_20_perf_sql_blog_bigger_data_scaling(self):
BlogPost = self.env['blog.post']
@@ -25,8 +26,10 @@ class TestBlogPerformance(UtilPerf):
for blog_post in blog_posts:
blog_post.tag_ids += blog_tags
blog_tags = blog_tags[:-1]
self.assertEqual(self._get_url_hot_query('/blog'), 25)
self.assertEqual(self._get_url_hot_query(blog_post[0].website_url), 29)
self.assertEqual(self._get_url_hot_query('/blog'), 26)
self.assertEqual(self._get_url_hot_query('/blog', cache=False), 25)
self.assertEqual(self._get_url_hot_query(blog_post[0].website_url), 30)
self.assertEqual(self._get_url_hot_query(blog_post[0].website_url, cache=False), 29)
def test_30_perf_sql_blog_bigger_data_scaling(self):
BlogPost = self.env['blog.post']
@@ -39,4 +42,6 @@ class TestBlogPerformance(UtilPerf):
blog_post.write({'tag_ids': [[6, 0, random.choices(blog_tags.ids, k=random.randint(0, len(blog_tags)))]]})
self.assertLessEqual(self._get_url_hot_query('/blog'), 28)
self.assertLessEqual(self._get_url_hot_query(blog_post[0].website_url), 31)
self.assertLessEqual(self._get_url_hot_query('/blog', cache=False), 28)
self.assertLessEqual(self._get_url_hot_query(blog_post[0].website_url), 32)
self.assertLessEqual(self._get_url_hot_query(blog_post[0].website_url, cache=False), 31)