diff options
| author | Romain Derie <rde@odoo.com> | 2020-03-13 15:17:00 +0000 |
|---|---|---|
| committer | Romain Derie <rde@odoo.com> | 2020-03-19 15:37:49 +0000 |
| commit | ffd6ebff720cf347ab88e631c6ca303f24e0a147 (patch) | |
| tree | 6f1a80e20bfcc2146182d2c0dbc926ac83e008aa /addons/website/tests/test_performance.py | |
| parent | 89bbf76c445e7a2b6d1c1066cdd9910fef559fe6 (diff) | |
[FIX] website: add SQL performance test for page loading
This will ensure the performances stay correct for a blank page (no layout),
a standard page and a homepage (which has its own controller).
Related to #47257
task-2211013
X-original-commit: 08e01b5fc4a71b8f7639a953137fbb546ddf3b3e
Diffstat (limited to 'addons/website/tests/test_performance.py')
| -rw-r--r-- | addons/website/tests/test_performance.py | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/addons/website/tests/test_performance.py b/addons/website/tests/test_performance.py new file mode 100644 index 00000000000..f3c4834a0a7 --- /dev/null +++ b/addons/website/tests/test_performance.py @@ -0,0 +1,62 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +from odoo.tests.common import HttpCase + +EXTRA_REQUEST = 5 +""" During tests, the query on 'base_registry_signaling, base_cache_signaling' + won't be executed on hot state, but 6 new queries related to the test cursor + will be added: + SAVEPOINT "test_cursor_4" + SAVEPOINT "test_cursor_4" + ROLLBACK TO SAVEPOINT "test_cursor_4" + SAVEPOINT "test_cursor_5" + [.. usual SQL Queries .. ] + SAVEPOINT "test_cursor_5" + ROLLBACK TO SAVEPOINT "test_cursor_5" +""" + + +class TestWebsitePerformance(HttpCase): + + def setUp(self): + super().setUp() + + self.page = self.env['website.page'].create({ + 'url': '/sql_page', + 'name': 'Page Test SQL Perf', + 'type': 'qweb', + 'arch': '<t name="Contact Us" t-name="website.contactus"> \ + <t t-call="website.layout"> \ + <div id="wrap"><div class="oe_structure"/></div> \ + </t> \ + </t>', + 'key': 'website.page_test_perf_sql', + 'is_published': True, + }) + + def _get_url_hot_query(self, url): + # ensure worker is in hot state + self.url_open(url) + self.url_open(url) + + sql_count = self.registry.test_cr.sql_log_count + self.url_open(url) + return self.registry.test_cr.sql_log_count - sql_count + + def test_10_perf_sql_queries_page(self): + # standard website.page + expected_sql = 14 + EXTRA_REQUEST + self.assertEqual(self._get_url_hot_query(self.page.url), expected_sql) + + def test_20_perf_sql_queries_homepage(self): + # homepage "/" has its own controller + # add 5 queries for test environment (RELEASE/SAVEPOINT/ROLLBACK test_cursor) + expected_sql = 21 + EXTRA_REQUEST + self.assertEqual(self._get_url_hot_query('/'), expected_sql) + + 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>' + expected_sql = 8 + EXTRA_REQUEST + self.assertEqual(self._get_url_hot_query(self.page.url), expected_sql) |
