[Erp5-report] r13191 - /erp5/trunk/products/ERP5Type/tests/testPerformance.py

nobody at svn.erp5.org nobody at svn.erp5.org
Fri Mar 2 17:29:54 CET 2007


Author: aurel
Date: Fri Mar  2 17:29:53 2007
New Revision: 13191

URL: http://svn.erp5.org?rev=13191&view=rev
Log:
add test for performance

Added:
    erp5/trunk/products/ERP5Type/tests/testPerformance.py   (with props)

Added: erp5/trunk/products/ERP5Type/tests/testPerformance.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5Type/tests/testPerformance.py?rev=13191&view=auto
==============================================================================
--- erp5/trunk/products/ERP5Type/tests/testPerformance.py (added)
+++ erp5/trunk/products/ERP5Type/tests/testPerformance.py Fri Mar  2 17:29:53 2007
@@ -1,0 +1,182 @@
+##############################################################################
+#
+# Copyright (c) 2006 Nexedi SARL and Contributors. All Rights Reserved.
+#          Aurelien Calonne <aurel at nexedi.com>
+#
+# WARNING: This program as such is intended to be used by professional
+# programmers who take the whole responsability of assessing all potential
+# consequences resulting from its eventual inadequacies and bugs
+# End users who are looking for a ready-to-use solution with commercial
+# garantees and support are strongly adviced to contract a Free Software
+# Service Company
+#
+# This program is Free Software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+#
+##############################################################################
+
+import os, sys
+if __name__ == '__main__':
+    execfile(os.path.join(sys.path[0], 'framework.py'))
+
+# Needed in order to have a log file inside the current folder
+os.environ['EVENT_LOG_FILE'] = os.path.join(os.getcwd(), 'zLOG.log')
+os.environ['EVENT_LOG_SEVERITY'] = '-300'
+
+from Products.ERP5Type.tests.ERP5TypeTestCase import ERP5TypeTestCase
+from zLOG import LOG
+from Products.CMFCore.tests.base.testcase import LogInterceptor
+from Products.ERP5Type.tests.utils import createZODBPythonScript
+from Products.ERP5Type.ERP5Type import ERP5TypeInformation
+from Products.ERP5Type.Cache import clearCache
+from DateTime import DateTime
+from time import time
+
+# Define variable to chek if performance are good or not
+# XXX These variable are specific to the testing environment
+MIN_OBJECT_VIEW=0.110
+MAX_OBJECT_VIEW=0.120
+MIN_MODULE_VIEW=0.125
+MAX_MODULE_VIEW=0.175
+MIN_OBJECT_CREATION=0.020
+MAX_OBJECT_CREATION=0.0215
+MIN_TIC=0.080
+MAX_TIC=0.087
+LISTBOX_COEF=0.02472
+
+class TestPerformance(ERP5TypeTestCase, LogInterceptor):
+
+    # Some helper methods
+    quiet = 0
+    run_all_test = 1
+
+    def getTitle(self):
+      return "Performance"
+
+    def getBusinessTemplateList(self):
+      """
+        Return the list of business templates.
+      """
+      return ('erp5_base',
+              'erp5_ui_test',)
+
+    def getBarModule(self):
+      """
+      Return the bar module
+      """
+      return self.getPortal()['bar_module']
+
+    def afterSetUp(self):
+      """
+        Executed before each test_*.
+      """
+      self.login()
+      self.bar_module = self.getBarModule()
+
+
+    def test_00_viewBarObject(self, quiet=quiet, run=run_all_test):
+      """
+      Estimate average time to render object view
+      """
+      if not run : return
+      if not quiet:
+        message = 'Test form to view Bar object'
+        LOG('Testing... ', 0, message)
+      # Some init to display form with some value
+      gender = self.getPortal().portal_categories['gender']
+      gender.newContent(id='male', title='Male', portal_type='Category')
+      gender.newContent(id='female', title='Female', portal_type='Category')
+
+      bar = self.bar_module.newContent(id='bar',
+                                       portal_type='Bar',
+                                       title='Bar Test',
+                                       quantity=10000,)
+      bar.setReference(bar.getRelativeUrl())
+      get_transaction().commit()
+      self.tic()
+      # Check performance
+      before_view = time()
+      for x in xrange(100):
+          bar.Bar_viewPerformance()
+      after_view = time()
+      req_time = (after_view - before_view)/100.
+      if not quiet:
+          print "time to view object form %s < %s < %s\n" %(MIN_OBJECT_VIEW, req_time, MAX_OBJECT_VIEW)
+      self.failUnless(MIN_OBJECT_VIEW < req_time < MAX_OBJECT_VIEW)
+
+    def test_01_viewBarModule(self, quiet=quiet, run=run_all_test):
+      """
+      Estimate average time to render module view
+      """
+      if not run : return
+      if not quiet:
+        message = 'Test form to view Bar module'
+        LOG('Testing... ', 0, message)
+      # remove previous object
+      self.bar_module.manage_delObjects(['bar'])
+      get_transaction().commit()
+      self.tic()
+      view_result = {}
+      tic_result = {}
+      add_result = {}
+      # add object in bar module
+      for i in xrange(10):
+          before_add = time()
+          for x in xrange(100):
+            p = self.bar_module.newContent(portal_type='Bar',
+                                           title='Bar Test',
+                                           quantity="%4d" %(x,))
+          after_add = time()
+          get_transaction().commit()
+          before_tic = time()
+          self.tic()
+          after_tic = time()
+          before_form = time()
+          for x in xrange(100):
+            self.bar_module.BarModule_viewBarList()
+          after_form = time()
+          # store result
+          key = "%06d" %(100*i+100,)
+          view_result[key] = (after_form - before_form)/100.
+          tic_result[key] = (after_tic - before_tic)/100.
+          add_result[key] = (after_add - before_add)/100.
+
+      # check result
+      keys = view_result.keys()
+      keys.sort()
+      i = 0
+      for key in keys:
+        module_value = view_result[key]
+        tic_value = tic_result[key]
+        add_value = add_result[key]
+        min_view = MIN_MODULE_VIEW + LISTBOX_COEF * i
+        max_view = MAX_MODULE_VIEW + LISTBOX_COEF * i
+        if not quiet:
+            print "nb objects = %s\n\tadd = %s < %s < %s" %(key, MIN_OBJECT_CREATION, add_value, MAX_OBJECT_CREATION)
+            print "\ttic = %s < %s < %s" %(MIN_TIC, tic_value, MAX_TIC)
+            print "\tview = %s < %s < %s" %(min_view, module_value, max_view)
+            print 
+        self.failUnless(min_view < module_value < max_view)
+        self.failUnless(MIN_OBJECT_CREATION < add_value < MAX_OBJECT_CREATION)
+        self.failUnless(MIN_TIC < tic_value < MAX_TIC)
+        i += 1
+
+if __name__ == '__main__':
+    framework()
+else:
+    import unittest
+    def test_suite():
+        suite = unittest.TestSuite()
+        suite.addTest(unittest.makeSuite(TestPerformance))
+        return suite

Propchange: erp5/trunk/products/ERP5Type/tests/testPerformance.py
------------------------------------------------------------------------------
    svn:executable = *




More information about the Erp5-report mailing list