<HTML><BODY style="word-wrap: break-word; -khtml-nbsp-mode: space; -khtml-line-break: after-white-space; "><DIV>(I would be happy to write more up, or post this on a TIP web page?)</DIV><DIV><BR class="khtml-block-placeholder"></DIV>Below is a brief description of how I set up funkload to do functional tests on a SOAP web service that is described by a WSDL file.  I have been writing the web service code with the Zolera SOAP Infrastructure in the ZSI.py module.<DIV><BR class="khtml-block-placeholder"></DIV><DIV>ZSI can be gotten from http://pywebsvcs.sourceforge.net/</DIV><DIV>funkload can be gotten from <A href="http://funkload.nuxeo.org">http://funkload.nuxeo.org</A>/</DIV><DIV><BR class="khtml-block-placeholder"></DIV><DIV>I will assume you have a web service up and running.  Alternatively you can probably plug in whatever wsdl file you want (although you want to make sure you don't unintentionally launch a DOS attack by load testing someone else's web service.)</DIV><DIV><BR class="khtml-block-placeholder"></DIV><DIV>Step 1: Install funkload.  Following the funkload webpage, I installed funkload 1.6.2 with easy_install-2.5 (I am using python 2.5 installed via fink on Mac OS X 10.4)</DIV><DIV>  </DIV><DIV>    sudo easy_install -U funkload</DIV><DIV><BR class="khtml-block-placeholder"></DIV><DIV>This also installed webunit-1.3.8.  Once installed, there are several commands now available:</DIV><DIV><BR class="khtml-block-placeholder"></DIV><DIV>fl-install-demo</DIV><DIV>fl-run-test</DIV><DIV>fl-run-bench</DIV><DIV>fl-build-report</DIV><DIV><BR class="khtml-block-placeholder"></DIV><DIV>and several others.  I'll be describing these four in these notes.</DIV><DIV><BR class="khtml-block-placeholder"></DIV><DIV>Step 2: Setup your tests with funkload.  Funkload is built on top of unittest, which is the unittesting framework in the stdlib.  One of the reasons I chose funkload is because I already had my projects unit tests written with unittests.  This doesn't mean you can just run your existing test with funkload and be done.  Funkload has a class called FunkLoadTestCase which is derived from unittest.TestCase.  It has the same flavor of unittest.TestCase, but adds logging information into the tests.  We'll see this more concretely below.</DIV><DIV><BR class="khtml-block-placeholder"></DIV><DIV>To get things up and running the fastest, I took a look at the demo code.  I did</DIV><DIV><BR class="khtml-block-placeholder"></DIV><DIV>    fl-install-demo</DIV><DIV><BR class="khtml-block-placeholder"></DIV><DIV>which created a funkload-demo in my current directory.  The most useful example for my case was in the xmlrpc subdirectory.  The most important files to take a look at now, are the test_Credential.py file and Credential.conf file.  Funkload tests make use of a config file that is named after the test class.  To create my tests, I copied these two files into another directory and named them test_ws.py and ws.conf.  </DIV><DIV><BR class="khtml-block-placeholder"></DIV><DIV>The web service I am testing has one method called 'query', which takes named arguments: query_string - a query, id_list - a list of strings representing id's to filter by the query.</DIV><DIV><BR class="khtml-block-placeholder"></DIV><DIV>Below are the contents of these files with explanation:</DIV><DIV><BR class="khtml-block-placeholder"></DIV><DIV>ws.conf</DIV><DIV>__BEGIN__</DIV><DIV># FunkLoad test configuration file</DIV><DIV># Main section</DIV><DIV>#</DIV><DIV>[main]</DIV><DIV>title=Test the my web service</DIV><DIV>description=Try to test query method</DIV><DIV># the server url to test - I am running the server locally</DIV><DIV>url=<A href="http://localhost:8080">http://localhost:8080</A>/</DIV><DIV># this is the location of my wsdl file describing the service</DIV><DIV>#  (same directory as the tests)</DIV><DIV>wsdl=ws.wsdl</DIV><DIV><BR class="khtml-block-placeholder"></DIV><DIV><BR class="khtml-block-placeholder"></DIV><DIV># Tests description and configuration</DIV><DIV>#</DIV><DIV>[test_ws]</DIV><DIV>description=Check query method</DIV><DIV><BR class="khtml-block-placeholder"></DIV><DIV># ------------------------------------------------------------</DIV><DIV># Configuration for unit test mode fl-run-test</DIV><DIV>#</DIV><DIV>[ftest]</DIV><DIV><BR class="khtml-block-placeholder"></DIV><DIV># log_to destination =</DIV><DIV># console - to the screen</DIV><DIV># file - to a file</DIV><DIV>log_to = console file</DIV><DIV><BR class="khtml-block-placeholder"></DIV><DIV># log_path = path and file name to store log file</DIV><DIV>log_path = ws-test.log</DIV><DIV><BR class="khtml-block-placeholder"></DIV><DIV># result_path = path to store the xml result file</DIV><DIV>result_path = ws-test.xml</DIV><DIV><BR class="khtml-block-placeholder"></DIV><DIV># sleeptime_min = minimum amount of time in seconds to sleep between requests</DIV><DIV>#                 to the host</DIV><DIV>sleep_time_min = 0</DIV><DIV><BR class="khtml-block-placeholder"></DIV><DIV># sleeptime_max = maximum amount of time in seconds to sleep between requests</DIV><DIV>#                 to the host</DIV><DIV>sleep_time_max = 0</DIV><DIV><BR class="khtml-block-placeholder"></DIV><DIV><BR class="khtml-block-placeholder"></DIV><DIV># ------------------------------------------------------------</DIV><DIV># Configuration for bench mode fl-run-bench</DIV><DIV>#</DIV><DIV>[bench]</DIV><DIV><BR class="khtml-block-placeholder"></DIV><DIV># cycles = list of cycles with their number of concurrent users</DIV><DIV>cycles = 1:20:40</DIV><DIV><BR class="khtml-block-placeholder"></DIV><DIV># duration = duration of a cycle in seconds</DIV><DIV>duration = 20</DIV><DIV><BR class="khtml-block-placeholder"></DIV><DIV># startup_delay = time to wait between starting-up threads in seconds</DIV><DIV>startup_delay = 0.05</DIV><DIV><BR class="khtml-block-placeholder"></DIV><DIV># sleep_time = time to wait between test in seconds</DIV><DIV>sleep_time = 0.5</DIV><DIV><BR class="khtml-block-placeholder"></DIV><DIV># cycle_time = time to wait between cycle in seconds</DIV><DIV>cycle_time = 1</DIV><DIV><BR class="khtml-block-placeholder"></DIV><DIV># same keys than in [ftest] section</DIV><DIV>log_to = file</DIV><DIV>log_path = ws-bench.log</DIV><DIV>result_path = ws-bench.xml</DIV><DIV><BR class="khtml-block-placeholder"></DIV><DIV>sleep_time_min = .1</DIV><DIV>sleep_time_max = .2</DIV><DIV><BR class="khtml-block-placeholder"></DIV><DIV>__END__</DIV><DIV><DIV> <SPAN class="Apple-style-span" style="border-collapse: separate; border-spacing: 0px 0px; color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; text-align: auto; -khtml-text-decorations-in-effect: none; text-indent: 0px; -apple-text-size-adjust: auto; text-transform: none; orphans: 2; white-space: normal; widows: 2; word-spacing: 0px; "><SPAN class="Apple-style-span" style="border-collapse: separate; border-spacing: 0px 0px; color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; text-align: auto; -khtml-text-decorations-in-effect: none; text-indent: 0px; -apple-text-size-adjust: auto; text-transform: none; orphans: 2; white-space: normal; widows: 2; word-spacing: 0px; "><SPAN class="Apple-style-span" style="border-collapse: separate; border-spacing: 0px 0px; color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; text-align: auto; -khtml-text-decorations-in-effect: none; text-indent: 0px; -apple-text-size-adjust: auto; text-transform: none; orphans: 2; white-space: normal; widows: 2; word-spacing: 0px; "><SPAN class="Apple-style-span" style="border-collapse: separate; border-spacing: 0px 0px; color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; text-align: auto; -khtml-text-decorations-in-effect: none; text-indent: 0px; -apple-text-size-adjust: auto; text-transform: none; orphans: 2; white-space: normal; widows: 2; word-spacing: 0px; "><SPAN class="Apple-style-span" style="border-collapse: separate; border-spacing: 0px 0px; color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; text-align: auto; -khtml-text-decorations-in-effect: none; text-indent: 0px; -apple-text-size-adjust: auto; text-transform: none; orphans: 2; white-space: normal; widows: 2; word-spacing: 0px; "><DIV><BR class="khtml-block-placeholder"></DIV><DIV>The config file lists setup information and parameters to use when testing.  See <A href="http://funkload.nuxeo.org/#benching">http://funkload.nuxeo.org/#benching</A> for an explanation of the parameters.  </DIV><DIV><BR class="khtml-block-placeholder"></DIV><DIV>To get my tests to work, I had to dig into the funkload code a bit to figure out how it does the FunkLoadTestCase.xmlrpc method.  I needed to modify it to be able to test my SOAP service described with my wsdl.  I wanted to make a class that derived from FunkLoadTestCase, and further derive that for my test cases (instead of unittest.TestCase).  However, I got some errors about wrong arguments called on __init__ with a cryptic trace.  So I opted for the quick hack (for now), of just adding my soap_wsdl method to my test case class directly.  This is good enough for now:</DIV><DIV><BR class="khtml-block-placeholder"></DIV><DIV>test_ws.py</DIV><DIV>__BEGIN__</DIV><DIV>"""Simple FunkLoad test for WS</DIV><DIV><BR class="khtml-block-placeholder"></DIV><DIV>run test with </DIV><DIV>  &gt; fl-run-test -v test_ws.py </DIV><DIV>run bench with </DIV><DIV>  &gt; fl-run-bench test_ws.py WS.test_ws</DIV><DIV>"""</DIV><DIV>import unittest</DIV><DIV>from random import random</DIV><DIV>import time</DIV><DIV><BR class="khtml-block-placeholder"></DIV><DIV># I am using ZSI to set up the binding to the SOAP service</DIV><DIV>from ZSI.ServiceProxy import ServiceProxy</DIV><DIV>from funkload.FunkLoadTestCase import FunkLoadTestCase</DIV><DIV><BR class="khtml-block-placeholder"></DIV><DIV>class WS(FunkLoadTestCase):</DIV><DIV>    """This test use a configuration file ws.conf."""</DIV><DIV>    </DIV><DIV>    def setUp(self):</DIV><DIV>        """Setting up test."""</DIV><DIV>        self.logd("setUp")</DIV><DIV>        </DIV><DIV>        #get configuration details from ws.conf</DIV><DIV>        self.server_url = self.conf_get('main', 'url')</DIV><DIV>        self.wsdl = self.conf_get('main','wsdl')</DIV><DIV>    </DIV><DIV>    </DIV><DIV>    def soap_wsdl(self, wsdl, url_in, method_name, </DIV><DIV>                  named_params=None, description=None):</DIV><DIV>        """Call a SOAP method_name specified in wsdl with named_params.</DIV><DIV>        </DIV><DIV>        named_params is a dict of params.</DIV><DIV>        Modifying FunkLoadTestCase.xmlrpc method.</DIV><DIV>        Copying method and providing SOAP w/ wsdl details.</DIV><DIV>        """</DIV><DIV>        self.steps += 1</DIV><DIV>        self.page_responses = 0</DIV><DIV>        self.logd('SOAP: %s::%s\n\tCall %i: %s ...' % (wsdl+url_in, </DIV><DIV>                                                       method_name,</DIV><DIV>                                                       self.steps,</DIV><DIV>                                                       description or ''))</DIV><DIV>        response = None</DIV><DIV>        t_start = time.time()</DIV><DIV>        if self._authinfo is not None:</DIV><DIV>            url = url_in.replace('//', '//'+self._authinfo)</DIV><DIV>        else:</DIV><DIV>            url = url_in</DIV><DIV>        try:</DIV><DIV>            server = ServiceProxy(wsdl,url=url)</DIV><DIV>            method = getattr(server, method_name)</DIV><DIV>            if named_params is not None:</DIV><DIV>                response = method(**named_params)</DIV><DIV>            else:</DIV><DIV>                response = method()</DIV><DIV>        except:</DIV><DIV>            etype, value, tback = sys.exc_info()</DIV><DIV>            t_stop = time.time()</DIV><DIV>            t_delta = t_stop - t_start</DIV><DIV>            self.total_time += t_delta</DIV><DIV>            self.step_success = False</DIV><DIV>            self.test_status = 'Error'</DIV><DIV>            self.logd(' Failed in %.3fs' % t_delta)</DIV><DIV>            self._log_xmlrpc_response(wsdl+url_in, method_name, description,</DIV><DIV>                                      response, t_start, t_stop, -1)</DIV><DIV>            if etype is SocketError:</DIV><DIV>                raise SocketError("Can't access %s." % wsdl+url)</DIV><DIV>            raise</DIV><DIV>        t_stop = time.time()</DIV><DIV>        t_delta = t_stop - t_start</DIV><DIV>        self.total_time += t_delta</DIV><DIV>        self.total_xmlrpc += 1</DIV><DIV>        self.logd(' Done in %.3fs' % t_delta)</DIV><DIV>        self._log_xmlrpc_response(wsdl+url_in, method_name, </DIV><DIV>                                  description, response,</DIV><DIV>                                  t_start, t_stop, 200)</DIV><DIV>        self.sleep()</DIV><DIV>        return response</DIV><DIV><BR class="khtml-block-placeholder"></DIV><DIV><BR class="khtml-block-placeholder"></DIV><DIV>    def test_ws(self):</DIV><DIV>        """ my test """</DIV><DIV>        server_url = self.server_url</DIV><DIV>        wsdl = self.wsdl</DIV><DIV>       </DIV><DIV>        ret = self.soap_wsdl(wsdl, server_url, 'query',</DIV><DIV>                named_params = {'search_query': 'test query',</DIV><DIV>                                'id_list': []},</DIV><DIV>                description="Check simple query")</DIV><DIV>       </DIV><DIV>        self.assert_(isinstance(ret,dict), </DIV><DIV>                        'Wrong Return Type, expected dict %s' % ret)</DIV><DIV>                                              </DIV><DIV>        self.logd('ret %s' % ret)</DIV><DIV><BR class="khtml-block-placeholder"></DIV><DIV>    def tearDown(self):</DIV><DIV>        """Setting up test."""</DIV><DIV>        self.logd("tearDown.\n")</DIV><DIV><BR class="khtml-block-placeholder"></DIV><DIV><BR class="khtml-block-placeholder"></DIV><DIV>if __name__ in ('main', '__main__'):</DIV><DIV>    unittest.main()</DIV><DIV><BR class="khtml-block-placeholder"></DIV><DIV><BR class="khtml-block-placeholder"></DIV><DIV>__END__</DIV><DIV><BR class="khtml-block-placeholder"></DIV><DIV>Here I mostly followed the examples I cited above.  The only complication was adding my soap_wsdl method so I could run the test.</DIV><DIV><BR class="khtml-block-placeholder"></DIV><DIV>3.) Run the tests.  I fired up my server on <A href="http://localhost:8080">http://localhost:8080</A>, and executed</DIV><DIV> </DIV><DIV>    fl-run-test -v test_ws.py</DIV><DIV><BR class="khtml-block-placeholder"></DIV><DIV>This gave me what looked like a typical unittest  output to the console, as well as created ws-test.log and ws-test.xml describing the test.</DIV><DIV><BR class="khtml-block-placeholder"></DIV><DIV>4.) Run a bench.  The following did load testing by running the tests over with different numbers of concurrent threads, using the configs we setup earlier:</DIV><DIV><BR class="khtml-block-placeholder"></DIV><DIV>    fl-run-bench test_ws.py WS.test_ws</DIV><DIV><BR class="khtml-block-placeholder"></DIV><DIV>Once again, output was to the console, with ws-bench.log and ws-bench.xml being created which described the benchmark testing.</DIV><DIV><BR class="khtml-block-placeholder"></DIV><DIV>5.) Create a report.  You can generate a nice report of the benchmarking logs by doing</DIV><DIV><BR class="khtml-block-placeholder"></DIV><DIV>    fl-build-report ws-bench.xml</DIV><DIV><BR class="khtml-block-placeholder"></DIV><DIV>or</DIV><DIV><BR class="khtml-block-placeholder"></DIV><DIV>    fl-build-report --html ws-bench.xml</DIV><DIV><BR class="khtml-block-placeholder"></DIV><DIV><BR class="khtml-block-placeholder"></DIV><DIV>These notes outlined the basics of getting setup with funkloader.  There are other rich features.  See <A href="http://funkload.nuxeo.org">http://funkload.nuxeo.org</A>/ for more details.</DIV><DIV><BR class="khtml-block-placeholder"></DIV><DIV>Hope this was helpful,</DIV><DIV><BR class="khtml-block-placeholder"></DIV><DIV>Julius</DIV><DIV><BR class="khtml-block-placeholder"></DIV><DIV>---------------------------------------------------------------------------------------</DIV><DIV>Please Reply to My Permanent Address: <A href="mailto:julius@younglucks.com">julius@younglucks.com</A></DIV><DIV><A href="http://www.openwetware.org/wiki/User:Julius_B._Lucks">http://www.openwetware.org/wiki/User:Julius_B._Lucks</A></DIV><DIV>----------------------------------------------------------------------------------------</DIV><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "><BR class="khtml-block-placeholder"></DIV><BR class="Apple-interchange-newline"></SPAN></SPAN></SPAN></SPAN></SPAN> </DIV><BR><DIV><DIV>On Aug 23, 2007, at 4:12 PM, Grig Gheorghiu wrote:</DIV><BR class="Apple-interchange-newline"><BLOCKQUOTE type="cite"><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">Hi Julius,</DIV><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; min-height: 14px; "><BR></DIV><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">A short write-up on how you set up funkload would be greatly</DIV><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">appreciated by the TIP audience I'm sure :-) The last time I looked at</DIV><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">it, it wasn't trivial to configure.</DIV><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; min-height: 14px; "><BR></DIV><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">Grig</DIV><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; min-height: 14px; "><BR></DIV><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">--- "Julius B. Lucks" &lt;<A href="mailto:julius@younglucks.com">julius@younglucks.com</A>&gt; wrote:</DIV><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; min-height: 14px; "><BR></DIV> <BLOCKQUOTE type="cite"><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">Hey Sylvain,</DIV><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; min-height: 14px; "><BR></DIV><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">Many thanks for the tips.<SPAN class="Apple-converted-space">  </SPAN>It looks like funkload [3] is the best for</DIV><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; min-height: 14px; "><BR></DIV><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">my needs.<SPAN class="Apple-converted-space">  </SPAN>The others look a little heavy for this initial testing. <SPAN class="Apple-converted-space"> </SPAN></DIV><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; min-height: 14px; "><BR></DIV><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">Funkload has been really easy so far to set up and run, especially <SPAN class="Apple-converted-space"> </SPAN></DIV><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">since I have been unittest to do my testing anyway.<SPAN class="Apple-converted-space">  </SPAN>The only thing I</DIV><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; min-height: 14px; "><BR></DIV><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">had to do was to write my own method within the FunkLoadTestCase <SPAN class="Apple-converted-space"> </SPAN></DIV><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">class to handle calling SOAP methods described by WSDL files - <SPAN class="Apple-converted-space"> </SPAN></DIV><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">essentially a modification of the Funkload xmlrpc method.</DIV><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; min-height: 14px; "><BR></DIV><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">Cheers,</DIV><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; min-height: 14px; "><BR></DIV><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">Julius</DIV><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; min-height: 14px; "><BR></DIV><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; min-height: 14px; "><BR></DIV> </BLOCKQUOTE><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">------------------------------------------------------------------------</DIV> <BLOCKQUOTE type="cite"><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; min-height: 14px; "><BR></DIV><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">---------------</DIV><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">Please Reply to My Permanent Address: <A href="mailto:julius@younglucks.com">julius@younglucks.com</A></DIV><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "><A href="http://www.openwetware.org/wiki/User:Julius_B._Lucks">http://www.openwetware.org/wiki/User:Julius_B._Lucks</A></DIV><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; min-height: 14px; "><BR></DIV> </BLOCKQUOTE><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">------------------------------------------------------------------------</DIV> <BLOCKQUOTE type="cite"><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; min-height: 14px; "><BR></DIV><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">----------------</DIV><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; min-height: 14px; "><BR></DIV><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; min-height: 14px; "><BR></DIV><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; min-height: 14px; "><BR></DIV><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">On Aug 23, 2007, at 9:37 AM, Sylvain Hellegouarch wrote:</DIV><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; min-height: 14px; "><BR></DIV> <BLOCKQUOTE type="cite"><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">Depending on your requirements, you may use expensive tools like <SPAN class="Apple-converted-space"> </SPAN></DIV><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">LoadRunner from HP (formerly Mercury) but be ready to spit the</DIV> </BLOCKQUOTE><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">cash.</DIV> <BLOCKQUOTE type="cite"><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; min-height: 14px; "><BR></DIV><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">More seriously, there are several tools that do a decent job in <SPAN class="Apple-converted-space"> </SPAN></DIV><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">that field for free, such as WebLoad [1] or Tsung[2]. I personally<SPAN class="Apple-converted-space"> </SPAN></DIV> </BLOCKQUOTE><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; min-height: 14px; "><BR></DIV> <BLOCKQUOTE type="cite"><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">like Funkload [3] as you design your performance tests as glorified</DIV> </BLOCKQUOTE><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; min-height: 14px; "><BR></DIV> <BLOCKQUOTE type="cite"><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">unit tests and funkload does the job of<SPAN class="Apple-converted-space">  </SPAN>measuring, monitoring and<SPAN class="Apple-converted-space"> </SPAN></DIV> </BLOCKQUOTE><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; min-height: 14px; "><BR></DIV> <BLOCKQUOTE type="cite"><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">gathering data. Simplistic but great to a quick load/perf. test <SPAN class="Apple-converted-space"> </SPAN></DIV><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">mockup I think.</DIV><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; min-height: 14px; "><BR></DIV><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">[1] <A href="http://www.webload.org">http://www.webload.org</A>/</DIV><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">[2] <A href="http://www.process-one.net/en/tsung/">http://www.process-one.net/en/tsung/</A></DIV><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">[3] <A href="http://funkload.nuxeo.org">http://funkload.nuxeo.org</A>/</DIV><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; min-height: 14px; "><BR></DIV><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">- Sylvain</DIV><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; min-height: 14px; "><BR></DIV><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">Julius B. Lucks a écrit :</DIV> <BLOCKQUOTE type="cite"><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">Hi All,</DIV><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; min-height: 14px; "><BR></DIV><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">I am writing a web service server with SOAP/WSDL in python using <SPAN class="Apple-converted-space"> </SPAN></DIV><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">the Zolera Soap Infrastructure module (ZSI - http://<SPAN class="Apple-converted-space"> </SPAN></DIV><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">pywebsvcs.sourceforge.net/).<SPAN class="Apple-converted-space">  </SPAN>I have a stub implementation of my <SPAN class="Apple-converted-space"> </SPAN></DIV><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">service up and running with unittests covering the functionality <SPAN class="Apple-converted-space"> </SPAN></DIV><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">of the service.<SPAN class="Apple-converted-space">  </SPAN>Now I want to create some performance tests/<SPAN class="Apple-converted-space"> </SPAN></DIV><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">benchmarks so that I can get an idea of the resources the service<SPAN class="Apple-converted-space"> </SPAN></DIV> </BLOCKQUOTE></BLOCKQUOTE><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; min-height: 14px; "><BR></DIV> <BLOCKQUOTE type="cite"><BLOCKQUOTE type="cite"><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">is requiring, and compare it to future versions.</DIV><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; min-height: 14px; "><BR></DIV><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">What is the best way to do these performance tests?<SPAN class="Apple-converted-space">  </SPAN>Time my <SPAN class="Apple-converted-space"> </SPAN></DIV><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">unittests? Profile a set of calls on the service, and record the <SPAN class="Apple-converted-space"> </SPAN></DIV><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">timings? Should I seperately do tests on the backend, and backend<SPAN class="Apple-converted-space"> </SPAN></DIV><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">+SOAP messaging?<SPAN class="Apple-converted-space">  </SPAN>Are there any tools for this?</DIV><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; min-height: 14px; "><BR></DIV><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">I appreciate any tips.</DIV><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; min-height: 14px; "><BR></DIV><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">Cheers,</DIV><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; min-height: 14px; "><BR></DIV><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">Julius</DIV><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; min-height: 14px; "><BR></DIV><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; min-height: 14px; "><BR></DIV> </BLOCKQUOTE></BLOCKQUOTE><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">---------------------------------------------------------------------</DIV><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; min-height: 14px; "><BR></DIV> <BLOCKQUOTE type="cite"><BLOCKQUOTE type="cite"><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">------------------</DIV><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">Please Reply to My Permanent Address: <A href="mailto:julius@younglucks.com">julius@younglucks.com</A> <SPAN class="Apple-converted-space"> </SPAN></DIV><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">&lt;<A href="mailto:julius@younglucks.com">mailto:julius@younglucks.com</A>&gt;</DIV><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "><A href="http://www.openwetware.org/wiki/User:Julius_B._Lucks">http://www.openwetware.org/wiki/User:Julius_B._Lucks</A></DIV><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; min-height: 14px; "><BR></DIV> </BLOCKQUOTE></BLOCKQUOTE><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">---------------------------------------------------------------------</DIV><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; min-height: 14px; "><BR></DIV> <BLOCKQUOTE type="cite"><BLOCKQUOTE type="cite"><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">-------------------</DIV><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; min-height: 14px; "><BR></DIV><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; min-height: 14px; "><BR></DIV><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; min-height: 14px; "><BR></DIV><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; min-height: 14px; "><BR></DIV> </BLOCKQUOTE></BLOCKQUOTE><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">---------------------------------------------------------------------</DIV><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; min-height: 14px; "><BR></DIV> <BLOCKQUOTE type="cite"><BLOCKQUOTE type="cite"><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">---</DIV><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; min-height: 14px; "><BR></DIV><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">_______________________________________________</DIV><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">testing-in-python mailing list</DIV><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "><A href="mailto:testing-in-python@lists.idyll.org">testing-in-python@lists.idyll.org</A></DIV><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "><A href="http://lists.idyll.org/listinfo/testing-in-python">http://lists.idyll.org/listinfo/testing-in-python</A></DIV><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; min-height: 14px; "><BR></DIV> </BLOCKQUOTE><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; min-height: 14px; "><BR></DIV> </BLOCKQUOTE><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; min-height: 14px; "><BR></DIV> <BLOCKQUOTE type="cite"><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">_______________________________________________</DIV> </BLOCKQUOTE><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">testing-in-python mailing list</DIV><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "><A href="mailto:testing-in-python@lists.idyll.org">testing-in-python@lists.idyll.org</A></DIV><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "><A href="http://lists.idyll.org/listinfo/testing-in-python">http://lists.idyll.org/listinfo/testing-in-python</A></DIV><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; min-height: 14px; "><BR></DIV> </BLOCKQUOTE><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; min-height: 14px; "><BR></DIV> </BLOCKQUOTE></DIV><BR></DIV></BODY></HTML>