From dad8dca0da23143eb2f28debde5139e907368a2e Mon Sep 17 00:00:00 2001 From: Romain Derie Date: Mon, 21 Feb 2022 23:02:36 +0000 Subject: [PATCH] [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) --- addons/test_website/tests/test_performance.py | 1 + addons/website/tests/test_performance.py | 32 +++++++++++++------ addons/website_blog/tests/test_performance.py | 13 +++++--- 3 files changed, 33 insertions(+), 13 deletions(-) diff --git a/addons/test_website/tests/test_performance.py b/addons/test_website/tests/test_performance.py index 961f12e8220..49856546221 100644 --- a/addons/test_website/tests/test_performance.py +++ b/addons/test_website/tests/test_performance.py @@ -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) diff --git a/addons/website/tests/test_performance.py b/addons/website/tests/test_performance.py index 55182ea724b..e3de8a93aa2 100644 --- a/addons/website/tests/test_performance.py +++ b/addons/website/tests/test_performance.py @@ -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 = '
I am a blank page
' - 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) diff --git a/addons/website_blog/tests/test_performance.py b/addons/website_blog/tests/test_performance.py index 7b90d2ec167..63df54c4c4b 100644 --- a/addons/website_blog/tests/test_performance.py +++ b/addons/website_blog/tests/test_performance.py @@ -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)