[Erp5-report] r46000 arnaud.fontaine - in /erp5/trunk/utils: erp5.utils.benchmark/examples/...

nobody at svn.erp5.org nobody at svn.erp5.org
Mon Aug 29 09:07:44 CEST 2011


Author: arnaud.fontaine
Date: Mon Aug 29 09:07:44 2011
New Revision: 46000

URL: http://svn.erp5.org?rev=46000&view=rev
Log:
Instead of defining timeNAMEInSecond, just wrap NAME and return the time spent
in seconds which can be later converted in pystones if necessary

Modified:
    erp5/trunk/utils/erp5.utils.benchmark/examples/createPerson.py
    erp5/trunk/utils/erp5.utils.test_browser/examples/testAddPerson.py
    erp5/trunk/utils/erp5.utils.test_browser/src/erp5/utils/test_browser/browser.py

Modified: erp5/trunk/utils/erp5.utils.benchmark/examples/createPerson.py
URL: http://svn.erp5.org/erp5/trunk/utils/erp5.utils.benchmark/examples/createPerson.py?rev=46000&r1=45999&r2=46000&view=diff
==============================================================================
--- erp5/trunk/utils/erp5.utils.benchmark/examples/createPerson.py [utf8] (original)
+++ erp5/trunk/utils/erp5.utils.benchmark/examples/createPerson.py [utf8] Mon Aug 29 09:07:44 2011
@@ -14,10 +14,10 @@ def createPerson(result, browser):
   """
   # Go to Persons module (person_module)
   result('Go to person module',
-         browser.mainForm.timeSubmitSelectModuleInSecond(value='/person_module'))
+         browser.mainForm.submitSelectModule(value='/person_module'))
 
   # Create a new person and record the time elapsed in seconds
-  result('Add Person', browser.mainForm.timeSubmitNewInSecond())
+  result('Add Person', browser.mainForm.submitNew())
 
   # Check whether it has been successfully created
   assert browser.getTransitionMessage() == 'Object created.'
@@ -27,26 +27,26 @@ def createPerson(result, browser):
   browser.mainForm.getControl(name='field_my_last_name').value = 'Person'
 
   # Submit the changes, record the time elapsed in seconds
-  result('Save', browser.mainForm.timeSubmitSaveInSecond())
+  result('Save', browser.mainForm.submitSave())
 
   # Check whether the changes have been successfully updated
   assert browser.getTransitionMessage() == 'Data updated.'
 
   # Add phone number
   result('Add telephone',
-         browser.mainForm.timeSubmitSelectActionInSecond(value='add Telephone'))
+         browser.mainForm.submitSelectAction(value='add Telephone'))
 
   # Fill telephone title and number
   browser.mainForm.getControl(name='field_my_title'). value = 'Personal'
   browser.mainForm.getControl(name='field_my_telephone_number').value = '0123456789'
 
   # Submit the changes, record the time elapsed in seconds
-  result('Save', browser.mainForm.timeSubmitSaveInSecond())
+  result('Save', browser.mainForm.submitSave())
 
   # Check whether the changes have been successfully updated
   assert browser.getTransitionMessage() == 'Data updated.'
 
   # Validate it
-  result('Validate', browser.mainForm.timeSubmitSelectWorkflowInSecond(value='validate_action'))
-  result('Validated', browser.mainForm.timeSubmitDialogConfirmInSecond())
+  result('Validate', browser.mainForm.submitSelectWorkflow(value='validate_action'))
+  result('Validated', browser.mainForm.submitDialogConfirm())
   assert browser.getTransitionMessage() == 'Status changed.'

Modified: erp5/trunk/utils/erp5.utils.test_browser/examples/testAddPerson.py
URL: http://svn.erp5.org/erp5/trunk/utils/erp5.utils.test_browser/examples/testAddPerson.py?rev=46000&r1=45999&r2=46000&view=diff
==============================================================================
--- erp5/trunk/utils/erp5.utils.test_browser/examples/testAddPerson.py [utf8] (original)
+++ erp5/trunk/utils/erp5.utils.test_browser/examples/testAddPerson.py [utf8] Mon Aug 29 09:07:44 2011
@@ -21,7 +21,7 @@ def benchmarkAddPerson(iteration_counter
 
   # Create a new person and record the time elapsed in seconds
   result_dict.setdefault('Create', []).append(
-    browser.mainForm.timeSubmitNewInSecond())
+    browser.mainForm.submitNew())
 
   # Check whether it has been successfully created
   assert browser.getTransitionMessage() == 'Object created.'
@@ -35,7 +35,7 @@ def benchmarkAddPerson(iteration_counter
 
   # Submit the changes, record the time elapsed in seconds
   result_dict.setdefault('Save', []).append(
-    browser.mainForm.timeSubmitSaveInSecond())
+    browser.mainForm.submitSave())
 
   # Check whether the changes have been successfully updated
   assert browser.getTransitionMessage() == 'Data updated.'
@@ -43,7 +43,7 @@ def benchmarkAddPerson(iteration_counter
   # Validate the person and record confirmation
   browser.mainForm.submitSelectWorkflow(value='validate_action')
   result_dict.setdefault('Validate', []).append(
-    browser.mainForm.timeSubmitDialogConfirmInSecond())
+    browser.mainForm.submitDialogConfirm())
 
   # Check whether it has been successfully validated
   assert browser.getTransitionMessage() == 'Status changed.'
@@ -58,7 +58,7 @@ def benchmarkAddPerson(iteration_counter
   browser.mainForm.getListboxControl(2, 2).value = 'Foo%'
 
   result_dict.setdefault('Filter', []).append(
-    browser.mainForm.timeSubmitInSecond())
+    browser.mainForm.submit())
 
   # Get the line number
   line_number = browser.getListboxPosition("Foo%(counter)d Bar%(counter)d" % \

Modified: erp5/trunk/utils/erp5.utils.test_browser/src/erp5/utils/test_browser/browser.py
URL: http://svn.erp5.org/erp5/trunk/utils/erp5.utils.test_browser/src/erp5/utils/test_browser/browser.py?rev=46000&r1=45999&r2=46000&view=diff
==============================================================================
--- erp5/trunk/utils/erp5.utils.test_browser/src/erp5/utils/test_browser/browser.py [utf8] (original)
+++ erp5/trunk/utils/erp5.utils.test_browser/src/erp5/utils/test_browser/browser.py [utf8] Mon Aug 29 09:07:44 2011
@@ -49,58 +49,37 @@ def measurementMetaClass(prefix):
   """
   class MeasurementMetaClass(type):
     """
-    Meta class to define automatically C{time*InSecond} and
-    C{time*InPystone} methods automatically according to given
+    Meta class to automatically wrap methods whose prefix starts with
     C{prefix}, and also to define C{lastRequestSeconds} and
     C{lastRequestPystones} on other classes besides of Browser.
     """
     def __new__(metacls, name, bases, dictionary):
+      def timeInSecondDecorator(method):
+        def wrapper(self, *args, **kwargs):
+          """
+          Replaced by the wrapped method docstring
+          """
+          ret = method(self, *args, **kwargs)
+          return (ret is None and self.lastRequestSeconds or
+                  (ret + self.lastRequestSeconds))
+
+        return wrapper
+
       def applyMeasure(method):
         """
-        Inner function to add the C{time*InSecond} and C{time*InPystone}
-        methods to the dictionary of newly created class.
-
-        For example, if the method name is C{submitSave} then
-        C{timeSubmitSaveInSecond} and C{timeSubmitSaveInPystone} will
-        be added to the newly created class.
+        Inner function to wrap timed methods to automatically return the time
+        spent on the request
 
         @param method: Instance method to be called
         @type method: function
         """
-        # Upper the first character
-        method_name_prefix = 'time' + method.func_name[0].upper() + \
-            method.func_name[1:]
-
-        def innerSecond(self, *args, **kwargs):
-          """
-          Call L{%(name)s} method and return the time it took in seconds.
-
-          @param args: Positional arguments given to L{%(name)s}
-          @param kwargs: Keyword arguments given to L{%(name)s}
-          """
-          method(self, *args, **kwargs)
-          return self.lastRequestSeconds
-
-        innerSecond.func_name = method_name_prefix + 'InSecond'
-        innerSecond.__doc__ = innerSecond.__doc__ %  {'name': method.func_name}
-        dictionary[innerSecond.func_name] = innerSecond
-
-        def innerPystone(self, *args, **kwargs):
-          """
-          Call L{%(name)s} method and return the time it took in pystones.
-
-          @param args: Positional arguments given to L{%(name)s}
-          @param kwargs: Keyword arguments given to L{%(name)s}
-          """
-          method(self, *args, **kwargs)
-          return self.lastRequestPystones
+        wrapper_method = timeInSecondDecorator(method)
+        wrapper_method.func_name = method.func_name
+        wrapper_method.__doc__ = method.__doc__
 
-        innerPystone.func_name = method_name_prefix + 'InPystone'
-        innerPystone.__doc__ = innerPystone.__doc__ % {'name': method.func_name}
-        dictionary[innerPystone.func_name] = innerPystone
+        dictionary[method.func_name] = wrapper_method
 
-      # Create time*InSecond and time*InPystone methods only for the
-      # methods prefixed by the given prefix
+      # Only wrap methods prefixed by the given prefix
       for attribute_name, attribute in dictionary.items():
         if attribute_name.startswith(prefix) and callable(attribute):
           applyMeasure(attribute)
@@ -1003,7 +982,6 @@ from zope.testbrowser.browser import Lin
 
 class LinkWithTime(Link):
   """
-  Only define to add timeClick*InSecond() and timeClick*InPystone()
-  methods
+  Only define to wrap click methods to measure the time spent
   """
   __metaclass__ = measurementMetaClass(prefix='click')



More information about the Erp5-report mailing list