[IMP] test_event_full: add performance tests
Add performance test for event and registration creation. This serves as a base for future cleaning and improvements for both models and performance in event models targeting v16. Task-2703285 (Event performance improvements) Task-2703289 (Event testing and coverage) Part-of: odoo/odoo#81068
This commit is contained in:
@@ -5,4 +5,5 @@ from . import common
|
||||
from . import test_event_crm
|
||||
from . import test_event_event
|
||||
from . import test_event_security
|
||||
from . import test_performance
|
||||
from . import test_wevent_register
|
||||
|
||||
@@ -0,0 +1,334 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
||||
|
||||
from datetime import timedelta
|
||||
from freezegun import freeze_time
|
||||
|
||||
from odoo.addons.test_event_full.tests.common import TestEventFullCommon
|
||||
from odoo.tests.common import users, warmup, Form
|
||||
from odoo.tests import tagged
|
||||
|
||||
|
||||
@tagged('event_performance')
|
||||
class EventPerformanceCase(TestEventFullCommon):
|
||||
|
||||
def setUp(self):
|
||||
super(EventPerformanceCase, self).setUp()
|
||||
# patch registry to simulate a ready environment
|
||||
self.patch(self.env.registry, 'ready', True)
|
||||
self._flush_tracking()
|
||||
|
||||
def _flush_tracking(self):
|
||||
""" Force the creation of tracking values notably, and ensure tests are
|
||||
reproducible. """
|
||||
self.env['base'].flush()
|
||||
self.cr.flush()
|
||||
|
||||
|
||||
@tagged('event_performance')
|
||||
class TestEventPerformance(EventPerformanceCase):
|
||||
|
||||
@users('event_user')
|
||||
@warmup
|
||||
def test_event_create_batch_notype(self):
|
||||
""" Test multiple event creation (import) """
|
||||
batch_size = 20
|
||||
|
||||
# simple without type involved
|
||||
with freeze_time(self.reference_now), self.assertQueryCount(event_user=459): # tef only: 459 (453) - com runbot: 453 - ent runbot 453
|
||||
self.env.cr._now = self.reference_now # force create_date to check schedulers
|
||||
event_values = [
|
||||
dict(self.event_base_vals,
|
||||
website_menu=False)
|
||||
for x in range(batch_size)
|
||||
]
|
||||
self.env['event.event'].create(event_values)
|
||||
|
||||
@users('event_user')
|
||||
@warmup
|
||||
def test_event_create_batch_notype_website(self):
|
||||
""" Test multiple event creation (import) """
|
||||
batch_size = 20
|
||||
|
||||
# simple without type involved + website
|
||||
with freeze_time(self.reference_now), self.assertQueryCount(event_user=5604): # tef only: 5179 (5174) - com runbot: 5178 - ent runbot 5603
|
||||
self.env.cr._now = self.reference_now # force create_date to check schedulers
|
||||
event_values = [
|
||||
dict(self.event_base_vals,
|
||||
website_menu=True
|
||||
)
|
||||
for x in range(batch_size)
|
||||
]
|
||||
self.env['event.event'].create(event_values)
|
||||
|
||||
@users('event_user')
|
||||
@warmup
|
||||
def test_event_create_batch_wtype(self):
|
||||
""" Test multiple event creation (import) """
|
||||
batch_size = 20
|
||||
event_type = self.env['event.type'].browse(self.test_event_type.ids)
|
||||
|
||||
# complex with type
|
||||
with freeze_time(self.reference_now), self.assertQueryCount(event_user=804): # tef only: 804 (798) - com runbot: 798 - ent runbot 798
|
||||
self.env.cr._now = self.reference_now # force create_date to check schedulers
|
||||
event_values = [
|
||||
dict(self.event_base_vals,
|
||||
event_type_id=event_type.id,
|
||||
website_menu=False,
|
||||
)
|
||||
for x in range(batch_size)
|
||||
]
|
||||
self.env['event.event'].create(event_values)
|
||||
|
||||
@users('event_user')
|
||||
@warmup
|
||||
def test_event_create_batch_wtype_website(self):
|
||||
""" Test multiple event creation (import) """
|
||||
batch_size = 20
|
||||
event_type = self.env['event.type'].browse(self.test_event_type.ids)
|
||||
|
||||
# complex with type + website
|
||||
with freeze_time(self.reference_now), self.assertQueryCount(event_user=5956): # tef only: 5531 (5526) - com runbot: 5530 - ent runbot 5955
|
||||
self.env.cr._now = self.reference_now # force create_date to check schedulers
|
||||
event_values = [
|
||||
dict(self.event_base_vals,
|
||||
event_type_id=event_type.id,
|
||||
)
|
||||
for x in range(batch_size)
|
||||
]
|
||||
self.env['event.event'].create(event_values)
|
||||
|
||||
|
||||
@users('event_user')
|
||||
@warmup
|
||||
def test_event_create_form_notype(self):
|
||||
""" Test a single event creation using Form """
|
||||
has_social = 'social_menu' in self.env['event.event'] # otherwise view may crash in enterprise
|
||||
|
||||
# no type, no website
|
||||
with freeze_time(self.reference_now), self.assertQueryCount(event_user=240): # tef only: 186 - com runbot: 185
|
||||
self.env.cr._now = self.reference_now # force create_date to check schedulers
|
||||
with Form(self.env['event.event']) as event_form:
|
||||
event_form.name = 'Test Event'
|
||||
event_form.date_begin = self.reference_now + timedelta(days=1)
|
||||
event_form.date_end = self.reference_now + timedelta(days=5)
|
||||
event_form.website_menu = False
|
||||
if has_social:
|
||||
event_form.social_menu = False
|
||||
_event = event_form.save()
|
||||
|
||||
@users('event_user')
|
||||
@warmup
|
||||
def test_event_create_form_notype_website(self):
|
||||
""" Test a single event creation using Form """
|
||||
has_social = 'social_menu' in self.env['event.event'] # otherwise view may crash in enterprise
|
||||
|
||||
# no type, website
|
||||
with freeze_time(self.reference_now), self.assertQueryCount(event_user=748): # tef only: 632 - com runbot: 632
|
||||
self.env.cr._now = self.reference_now # force create_date to check schedulers
|
||||
with Form(self.env['event.event']) as event_form:
|
||||
event_form.name = 'Test Event'
|
||||
event_form.date_begin = self.reference_now + timedelta(days=1)
|
||||
event_form.date_end = self.reference_now + timedelta(days=5)
|
||||
event_form.website_menu = True
|
||||
if has_social:
|
||||
event_form.social_menu = False
|
||||
_event = event_form.save()
|
||||
|
||||
@users('event_user')
|
||||
@warmup
|
||||
def test_event_create_form_type_website(self):
|
||||
""" Test a single event creation using Form """
|
||||
event_type = self.env['event.type'].browse(self.test_event_type.ids)
|
||||
has_social = 'social_menu' in self.env['event.event'] # otherwise view may crash in enterprise
|
||||
|
||||
# type and website
|
||||
with freeze_time(self.reference_now), self.assertQueryCount(event_user=795): # tef only: 681 - com runbot: 683
|
||||
self.env.cr._now = self.reference_now # force create_date to check schedulers
|
||||
with Form(self.env['event.event']) as event_form:
|
||||
event_form.name = 'Test Event'
|
||||
event_form.date_begin = self.reference_now + timedelta(days=1)
|
||||
event_form.date_end = self.reference_now + timedelta(days=5)
|
||||
event_form.event_type_id = event_type
|
||||
if has_social:
|
||||
event_form.social_menu = False
|
||||
|
||||
@users('event_user')
|
||||
@warmup
|
||||
def test_event_create_single_notype(self):
|
||||
""" Test a single event creation """
|
||||
# simple without type involved
|
||||
with freeze_time(self.reference_now), self.assertQueryCount(event_user=41): # tef only: 41 (35) - com runbot: 35
|
||||
self.env.cr._now = self.reference_now # force create_date to check schedulers
|
||||
event_values = dict(
|
||||
self.event_base_vals,
|
||||
website_menu=False
|
||||
)
|
||||
self.env['event.event'].create([event_values])
|
||||
|
||||
@users('event_user')
|
||||
@warmup
|
||||
def test_event_create_single_notype_website(self):
|
||||
""" Test a single event creation """
|
||||
# simple without type involved + website
|
||||
with freeze_time(self.reference_now), self.assertQueryCount(event_user=379): # tef only: 353 (348) - com runbot: 352 - ent runbot 378
|
||||
self.env.cr._now = self.reference_now # force create_date to check schedulers
|
||||
event_values = dict(
|
||||
self.event_base_vals,
|
||||
website_menu=True
|
||||
)
|
||||
self.env['event.event'].create([event_values])
|
||||
|
||||
@users('event_user')
|
||||
@warmup
|
||||
def test_event_create_single_wtype(self):
|
||||
""" Test a single event creation """
|
||||
event_type = self.env['event.type'].browse(self.test_event_type.ids)
|
||||
|
||||
# complex with type
|
||||
with freeze_time(self.reference_now), self.assertQueryCount(event_user=81): # tef only: 81 (75) - com runbot: 75 - ent runbot 75
|
||||
self.env.cr._now = self.reference_now # force create_date to check schedulers
|
||||
event_values = dict(
|
||||
self.event_base_vals,
|
||||
event_type_id=event_type.id,
|
||||
website_menu=False
|
||||
)
|
||||
self.env['event.event'].create([event_values])
|
||||
|
||||
@users('event_user')
|
||||
@warmup
|
||||
def test_event_create_single_wtype_website(self):
|
||||
""" Test a single event creation """
|
||||
event_type = self.env['event.type'].browse(self.test_event_type.ids)
|
||||
|
||||
# complex with type + website
|
||||
with freeze_time(self.reference_now), self.assertQueryCount(event_user=426): # tef only: 400 (395) - com runbot: 399 - ent runbot 425
|
||||
self.env.cr._now = self.reference_now # force create_date to check schedulers
|
||||
event_values = dict(
|
||||
self.event_base_vals,
|
||||
event_type_id=event_type.id,
|
||||
)
|
||||
self.env['event.event'].create([event_values])
|
||||
|
||||
|
||||
@tagged('event_performance', 'registration_performance')
|
||||
class TestRegistrationPerformance(EventPerformanceCase):
|
||||
|
||||
@users('event_user')
|
||||
@warmup
|
||||
def test_registration_create_batch(self):
|
||||
""" Test multiple registrations creation (batch of 10 without partner
|
||||
and batch of 10 with partner)
|
||||
|
||||
# TODO: with self.profile(collectors=['sql']) as _profile:
|
||||
"""
|
||||
event = self.env['event.event'].browse(self.test_event.ids)
|
||||
|
||||
with freeze_time(self.reference_now), self.assertQueryCount(event_user=873): # tef only: 828 - com runbot 871
|
||||
self.env.cr._now = self.reference_now # force create_date to check schedulers
|
||||
registration_values = [
|
||||
dict(reg_data,
|
||||
event_id=event.id)
|
||||
for reg_data in self.customer_data
|
||||
]
|
||||
registration_values += [
|
||||
{'event_id': event.id,
|
||||
'partner_id': partner.id,
|
||||
} for partner in self.partners
|
||||
]
|
||||
self.env['event.registration'].create(registration_values)
|
||||
|
||||
@users('event_user')
|
||||
@warmup
|
||||
def test_registration_create_batch_website(self):
|
||||
""" Test multiple registrations creation (batch of 10 without partner
|
||||
and batch of 10 with partner) with some additional informations (register
|
||||
form like) """
|
||||
event = self.env['event.event'].browse(self.test_event.ids)
|
||||
|
||||
with freeze_time(self.reference_now), self.assertQueryCount(event_user=944): # tef only: 898 - com runbot 941
|
||||
self.env.cr._now = self.reference_now # force create_date to check schedulers
|
||||
registration_values = [
|
||||
dict(reg_data,
|
||||
event_id=event.id)
|
||||
for reg_data in self.website_customer_data
|
||||
]
|
||||
registration_values += [
|
||||
{'event_id': event.id,
|
||||
'partner_id': partner.id,
|
||||
'registration_answer_ids': self.website_customer_data[0]['registration_answer_ids'],
|
||||
} for partner in self.partners
|
||||
]
|
||||
self.env['event.registration'].create(registration_values)
|
||||
|
||||
@users('event_user')
|
||||
@warmup
|
||||
def test_registration_create_form_customer(self):
|
||||
""" Test a single registration creation using Form """
|
||||
event = self.env['event.event'].browse(self.test_event.ids)
|
||||
|
||||
with freeze_time(self.reference_now), self.assertQueryCount(event_user=238): # tef only: 218 - com runbot 223
|
||||
self.env.cr._now = self.reference_now # force create_date to check schedulers
|
||||
with Form(self.env['event.registration']) as reg_form:
|
||||
reg_form.event_id = event
|
||||
reg_form.email = 'email.00@test.example.com'
|
||||
reg_form.mobile = '0456999999'
|
||||
reg_form.name = 'My Customer'
|
||||
reg_form.phone = '0456000000'
|
||||
_registration = reg_form.save()
|
||||
|
||||
@users('event_user')
|
||||
@warmup
|
||||
def test_registration_create_form_partner(self):
|
||||
""" Test a single registration creation using Form """
|
||||
event = self.env['event.event'].browse(self.test_event.ids)
|
||||
|
||||
with freeze_time(self.reference_now), self.assertQueryCount(event_user=241): # tef only: 221 - com runbot 225
|
||||
self.env.cr._now = self.reference_now # force create_date to check schedulers
|
||||
with Form(self.env['event.registration']) as reg_form:
|
||||
reg_form.event_id = event
|
||||
reg_form.partner_id = self.partners[0]
|
||||
_registration = reg_form.save()
|
||||
|
||||
@users('event_user')
|
||||
@warmup
|
||||
def test_registration_create_single_customer(self):
|
||||
""" Test a single registration creation """
|
||||
event = self.env['event.event'].browse(self.test_event.ids)
|
||||
|
||||
# simple customer data
|
||||
with freeze_time(self.reference_now), self.assertQueryCount(event_user=144): # tef only: 137 - com runbot 142
|
||||
self.env.cr._now = self.reference_now # force create_date to check schedulers
|
||||
registration_values = dict(
|
||||
self.customer_data[0],
|
||||
event_id=event.id)
|
||||
self.env['event.registration'].create([registration_values])
|
||||
|
||||
@users('event_user')
|
||||
@warmup
|
||||
def test_registration_create_single_partner(self):
|
||||
""" Test a single registration creation """
|
||||
event = self.env['event.event'].browse(self.test_event.ids)
|
||||
|
||||
# partner-based customer
|
||||
with freeze_time(self.reference_now), self.assertQueryCount(event_user=151): # tef only: 145 - com runbot 150
|
||||
self.env.cr._now = self.reference_now # force create_date to check schedulers
|
||||
registration_values = {
|
||||
'event_id': event.id,
|
||||
'partner_id': self.partners[0].id,
|
||||
}
|
||||
self.env['event.registration'].create([registration_values])
|
||||
|
||||
@users('event_user')
|
||||
@warmup
|
||||
def test_registration_create_single_website(self):
|
||||
""" Test a single registration creation """
|
||||
event = self.env['event.event'].browse(self.test_event.ids)
|
||||
|
||||
# website customer data
|
||||
with freeze_time(self.reference_now), self.assertQueryCount(event_user=155): # tef only: 146 - com runbot 151
|
||||
self.env.cr._now = self.reference_now # force create_date to check schedulers
|
||||
registration_values = dict(
|
||||
self.website_customer_data[0],
|
||||
event_id=event.id)
|
||||
self.env['event.registration'].create([registration_values])
|
||||
Reference in New Issue
Block a user