--- funkload-1.6.2.orig/debian/watch +++ funkload-1.6.2/debian/watch @@ -0,0 +1,3 @@ +# watch control file for uscan +version=3 +http://funkload.nuxeo.org/ funkload-([\d+\.]+|\d+)[a-z]*\.tar\.gz --- funkload-1.6.2.orig/debian/prerm +++ funkload-1.6.2/debian/prerm @@ -0,0 +1,40 @@ +#!/bin/sh +# prerm script for funkload +# +# see: dh_installdeb(1) + +set -e + +# summary of how this script can be called: +# * `remove' +# * `upgrade' +# * `failed-upgrade' +# * `remove' `in-favour' +# * `deconfigure' `in-favour' +# `removing' +# +# for details, see http://www.debian.org/doc/debian-policy/ or +# the debian-policy package + + +case "$1" in + remove|upgrade|deconfigure) + ;; + + failed-upgrade) + ;; + + *) + echo "prerm called with unknown argument \`$1'" >&2 + exit 1 + ;; +esac + +# dh_installdeb will replace this with shell code automatically +# generated by other debhelper scripts. + +#DEBHELPER# + +exit 0 + + --- funkload-1.6.2.orig/debian/rules +++ funkload-1.6.2/debian/rules @@ -0,0 +1,28 @@ +#!/usr/bin/make -f + +PACKAGE=funkload + +export DH_VERBOSE=1 + +UPSTREAM_VERSION=1.6.2 + + +DEB_PYTHON_SYSTEM=pycentral + +DEB_PYTHON_VERSIONS=all + + +include /usr/share/cdbs/1/rules/debhelper.mk +include /usr/share/cdbs/1/rules/simple-patchsys.mk +include /usr/share/cdbs/1/class/python-distutils.mk + +binary-install/funkload:: + cp -a CHANGES.txt debian/funkload/usr/share/doc/funkload/changelog + rm -f debian/funkload/usr/share/doc/funkload/CHANGES.txt.* + cp -a debian/funkload.html debian/funkload/usr/share/doc/funkload + (echo -n "current tree "; bzr revno ) > debian/note-to-self || true + cp -a debian/note-to-self debian/funkload/usr/share/doc/funkload + dh_installman debian/*.1 + perl debian/dh_installoverrides + rm -fr debian/funkload/usr/lib + --- funkload-1.6.2.orig/debian/patches/01-doc-Makefile.patch +++ funkload-1.6.2/debian/patches/01-doc-Makefile.patch @@ -0,0 +1,11 @@ +--- doc/Makefile.orig 2006-01-27 10:37:42.000000000 +0100 ++++ doc/Makefile 2007-12-13 23:13:00.000000000 +0100 +@@ -7,7 +7,7 @@ + TARGET := cvs.in.nuxeo.com:~/public_public_html/funkload + HTML_DOCS := README.html INSTALL.html CHANGES.html + CSS_FILE := ../funkload/data/funkload.css +-RST2HTML := rst2html.py -t --stylesheet-path=$(CSS_FILE) --embed-stylesheet ++RST2HTML := rst2html -t --stylesheet-path=$(CSS_FILE) --embed-stylesheet + + all: doc epydoc + --- funkload-1.6.2.orig/debian/patches/02-funkload-Recorder_py.patch +++ funkload-1.6.2/debian/patches/02-funkload-Recorder_py.patch @@ -0,0 +1,23 @@ +--- funkload/Recorder.py.orig 2006-03-02 11:34:16.000000000 +0100 ++++ funkload/Recorder.py 2007-12-21 23:15:30.000000000 +0100 +@@ -23,6 +23,11 @@ + + Credits goes to Ian Bicking for parsing tcpwatch files. + ++In the Debian package, tcpwatch has been renamed to ++tcpwatch-httpproxy, available in the package with the ++same name. ++ ++ + $Id: Recorder.py 33463 2006-02-24 14:09:21Z bdelbosc $ + """ + import os +@@ -201,7 +206,7 @@ + def startProxy(self): + """Start a tcpwatch session.""" + self.tcpwatch_path = mkdtemp('_funkload') +- cmd = 'tcpwatch.py -p %s -s -r %s' % (self.port, ++ cmd = 'tcpwatch-httpproxy -p %s -s -r %s' % (self.port, + self.tcpwatch_path) + if self.verbose: + cmd += ' | grep "T http"' --- funkload-1.6.2.orig/debian/dh_installoverrides +++ funkload-1.6.2/debian/dh_installoverrides @@ -0,0 +1,69 @@ +#!/usr/bin/perl -w +# +# dh_installoverrides + +=head 1 NAME + +dh_installoverrides = install lintian/linda override files + +=cut + +use strict; +use Debian::Debhelper::Dh_Lib; + +=head 1 SYNOPSIS + +B + +=head1 DESCRIPTION + +dh_installoverrides is a debhelper program that is responsible for +installing lintian and linda overrides into package build directories. + +If a file named debian/package.lintian exists, it is installed +into /usr/share/lintian/overrides/package. +If a file named debian/package.linda exists, it is installed +into /usr/share/linda/overrides/package. + +=cut + +init(); + +foreach my $package (@{$dh{DOPACKAGES}}) { + my $tmp=tmpdir($package); + + my $file=$package; + + my $lintian_overrides=pkgfile($package,"lintian"); + my $linda_overrides=pkgfile($package,"linda"); + + if($lintian_overrides ne '') { + if(! -d "$tmp/usr/share/lintian/overrides") { + doit("install", "-d", "$tmp/usr/share/lintian/overrides"); + } + + doit("install","-p","-m644",$lintian_overrides, + "$tmp/usr/share/lintian/overrides/$file"); + } + + if($linda_overrides ne '') { + if (! -d "$tmp/usr/share/linda/overrides") { + doit("install", "-d", "$tmp/usr/share/linda/overrides"); + } + + doit("install", "-p", "-m644", $linda_overrides, + "$tmp/usr/share/linda/overrides/$file"); + } +} + +=head1 SEE ALSO + +L + +This program is a part of debhelper + +=head1 AUTHOR + +Rene Engelhard + +=cut --- funkload-1.6.2.orig/debian/fl-run-test.1 +++ funkload-1.6.2/debian/fl-run-test.1 @@ -0,0 +1,83 @@ +.TH "FL-RUN-TEST" "1" "11 December 2007" "Debian Project" "Debian manual" +.SH "NAME" +fl\-run\-test \- runs a funkload test file +.SH "SYNOPSIS" +.B fl\-record +.B [ options ] +.B file +.B [ class.method | class | suite ] +.SH "DESCRIPTION" +A FunkLoad test can be used like a standard unittest using a unittest.main() and a 'python MyFile.py'. + +Note that fl\-run\-test can be used to launch normal unittest.TestCase and (if you use python2.4) doctest in a plain text file or embedded in a python docstring. The \-\-debug option makes doctests verbose. +.SH "OPTIONS" +.TP +.B \-\-version +show program's version number and exit +.TP +.B \-\-help, \-h +show this help message and exit +.TP +.B \-\-quiet, \-q +Minimal output. +.TP +.B \-\-verbose, \-v +Verbose output. +.TP +.B \-\-debug, \-d +FunkLoad and doctest debug output. +.TP +.B \-\-debug\-level=DEBUG_LEVEL +Debug level 2 is more verbose. +.TP +.B \-\-url=MAIN_URL, \-uMAIN_URL +Base URL to bench without ending '/'. +.TP +.B \-\-sleep\-time\-min=FTEST_SLEEP_TIME_MIN, \-mFTEST_SLEEP_TIME_MIN +Minumum sleep time between request. +.TP +.B \-\-sleep\-time\-max=FTEST_SLEEP_TIME_MAX, \-MFTEST_SLEEP_TIME_MAX +Maximum sleep time between request. +.TP +.B \-\-dump\-directory=DUMP_DIR +Directory to dump html pages. +.TP +.B \-\-firefox\-view, \-V +Real time view using firefox, you must have a running instance of firefox in the same host. +.TP +.B \-\-no\-color +Monochrome output. +.TP +.B \-\-loop\-on\-pages=LOOP_STEPS, \-lLOOP_STEPS +Loop as fast as possible without concurrency on pages expect a page number or a slice like 3:5. Output some statistics. +.TP +.B \-\-loop\-number=LOOP_NUMBER, \-nLOOP_NUMBER +Number of loop. +.TP +.B \-\-accept\-invalid\-links +Do not fail if css/image links are not reachable. +.TP +.B \-\-simple\-fetch +Don't load additional links like css or images when fetching an html page. +.TP +.B \-\-stop\-on\-fail +Stop tests on first failure or error. +.TP +.B \-\-regex=REGEX, \-eREGEX +The test names must match the regex. +.TP +.B \-\-list +Just list the test names. +.SH "SEE ALSO" +.BR fl\-build\-report (1), +.BR fl\-credential\-ctl (1), +.BR fl\-import\-from\-tm\-recorder (1), +.BR fl\-install\-demo (1), +.BR fl\-monitor\-ctl (1), +.BR fl\-record (1), +.BR fl\-run\-bench (1). +.SH "AUTHOR" +Funkload was written by Benoit Delbosc. +.PP +This manual page was written by Jose Parrella , +for the Debian project (but may be used by others). --- funkload-1.6.2.orig/debian/control +++ funkload-1.6.2/debian/control @@ -0,0 +1,25 @@ +Source: funkload +Section: web +Priority: extra +Maintainer: Toni Mueller +Build-Depends: python, cdbs, debhelper (>= 5), docbook-to-man, python-docutils, python-central (>= 0.5), python-setuptools +XS-Python-Version: 2.4, 2.5 +Standards-Version: 3.7.3 + +Package: funkload +Architecture: all +Depends: python, python-xml, python-central (>= 0.5), python-setuptools +Suggests: python-gdchart2, +Recommends: tcpwatch-httpproxy +XB-Python-Version: ${python:Versions} +Description: web testing tool + This web testing tool is designed to allow testing the functionality + and performance of web applications in the same spirit as Perl's + WWW::Mechanize. The tool supports recording clicks through a website, + saving them into a Python class which you can later modify, and + playing them back later. This allows you to script your web + applications. 'funkload' also supports performance and load testing + your applications. The package was specifically created with testing + Zope applications in mind. + . + --- funkload-1.6.2.orig/debian/funkload.html +++ funkload-1.6.2/debian/funkload.html @@ -0,0 +1,1701 @@ + + + + + + + FunkLoad + + + + + +
+

FunkLoad

+ + + + + + + + + + + + + + + +
Author:Benoit Delbosc
Address:
+		  bdelbosc _at_ nuxeo.com
+
+
Version:FunkLoad/1.6.2
Revision:README.txt 51931 2007-07-30 08:00:57Z bdelbosc
Copyright:(C) Copyright 2005 Nuxeo SAS (http://nuxeo.com). + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + version 2 as published by the Free Software Foundation. + 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.
+
+

Abstract

+

This document describes the usage of the FunkLoad tool. This tool + enables to do functional and load testing of web application.

+
+
+

Table of Contents

+ +
+
+

1   Introducing FunkLoad

+
+

1.1   What is FunkLoad ?

+

FunkLoad is a + functional and load web tester, written in Python, whose + main use cases are:

+
    +
  • Functional testing of web projects, and thus regression testing as well.
  • +
  • Performance testing: by loading the web application and monitoring + your servers it helps you to pinpoint bottlenecks, giving a detailed + report of performance measurement.
  • +
  • Load testing tool to expose bugs that do not surface in cursory testing, + like volume testing or longevity testing.
  • +
  • Stress testing tool to overwhelm the web application resources and test + the application recoverability.
  • +
  • Writing web agents by scripting any web repetitive task, like checking if + a site is alive.
  • +
+

Main FunkLoad + features are:

+
    +
  • FunkLoad is + free software distributed under the GNU GPL.
  • +
  • Functional test are pure Python scripts using the pyUnit framework like + normal unit test. Python enable complex scenarios to handle real world + applications.
  • +
  • Truly emulates a web browser (single-threaded) using Richard Jones' + webunit:
      +
    • basic authentication support
    • +
    • cookies support
    • +
    • referrer support
    • +
    • fetching css, javascript and images
    • +
    • emulating a browser cache
    • +
    • file upload and multipart/form-data submission
    • +
    • https support
    • +
    • http_proxy support
    • +
    +
  • +
  • Advanced test runner with many command-line options:
      +
    • set the target server url
    • +
    • display the fetched page in real time in your browser
    • +
    • debug mode
    • +
    • check performance of a single page (or set of pages) inside a test
    • +
    • green/red color mode
    • +
    • select or exclude tests cases using a regex
    • +
    • support normal pyUnit test
    • +
    • support doctest + from a plain text file or embedded in python docstring
    • +
    +
  • +
  • Turn a functional test into a load test: just by invoking the bench runner + you can identify scalability and performance problems.
  • +
  • Detailed bench reports in ReST or HTML (and PDF via ps2pdf) + containing:
      +
    • the bench configuration
    • +
    • tests, pages, requests stats and charts.
    • +
    • the 5 slowest requests.
    • +
    • servers cpu usage, load average, memory/swap usage and network traffic + charts.
    • +
    • an http error summary list
    • +
    +
  • +
  • Easy test customization using a configuration file or command line options.
  • +
  • + Easy test creation using + TCPWatch as proxy + recorder, so you can use your web browser and produce a + FunkLoad + test automatically. +
  • +
  • Provides web assertion helpers.
  • +
  • Provides a funkload.CPSTestCase to ease Zope and Nuxeo CPS testing. +
  • +
  • Easy to install (EasyInstall) + and use, see examples in the demo + folder. +
  • +
+
+
+

1.2   Where to find FunkLoad ?

+

Either:

+
    +
  • +

    Latest stable package using EasyInstall: +

    +
    + sudo easy_install -U funkload
    +
    +
  • +
  • EasyInstall + the latest snapshot +

    +
    + sudo easy_install -f http://funkload.nuxeo.org/snapshots/ funkload
    +
    +
  • +
  • Bleeding edge svn sources:

    +
    +		  easy_install -eb . funkload==dev
    +		  # or
    + svn co http://svn.nuxeo.org/pub/funkload/trunk funkload
    +
    +
  • +
+

See CHANGES file for information about distribution contents.

+
+
+

1.3   Installation

+

See the INSTALL file for + requirement and installation. +

+
+
+

1.4   Examples

+

See the demo + folder contents and a report example.

+

For package installed with easy_install you need to run + fl-install-demo + to extract the demo examples.

+
+
+

1.5   Documentation

+

This page is the main FunkLoad + documentation, there are also:

+
    +
  • CHANGES for information about + distribution contents. +
  • +
  • INSTALL for requirement and installation. +
  • +
  • API documentation generated with + epydoc. +
  • +
  • SLIDES + introducing FunkLoad. +
  • +
+
+
+

1.6   Credits

+

Thanks to Frank Cohen's TestMaker + framework and Richard Jones webunit + package.

+
+
+
+

2   Test runner

+

A FunkLoad test can + be used like a standard unittest using a unittest.main() + and a 'python MyFile.py'.

+

To ease testing FunkLoad + come with an advanced test runner to override + the static configuration file.

+

The loop-on-pages option + enable to check response time of some specific + pages inside a test without changing the script, which make easy to tune a + page in a complex context. Use the debug option to find the page numbers.

+

Note that fl-run-test + can be used to launch normal unittest.TestCase and + (if you use python2.4) doctest in a + plain text file or embedded in a python + docstring. The --debug + option makes doctests verbose.

+
+

2.1   Usage

+
+ fl-run-test [options] file [class.method|class|suite] [...]
+
+
+
+

2.2   Examples

+
+ fl-run-test myFile.py
+	      Run all tests (including doctest with python2.4).
+
+ fl-run-test myFile.py test_suite
+	      Run suite named test_suite.
+
+ fl-run-test myFile.py MyTestCase.testSomething
+	      Run a single test MyTestCase.testSomething.
+
+ fl-run-test myFile.py MyTestCase
+	      Run all 'test*' test methods in MyTestCase.
+
+ fl-run-test myFile.py MyTestCase -u http://localhost
+	      Same against localhost.
+
+ fl-run-test myDocTest.txt
+	      Run doctest from plain text file (requires python2.4).
+
+ fl-run-test myDocTest.txt -d
+	      Run doctest with debug output (requires python2.4).
+
+ fl-run-test myfile.py -V
+	      Run default set of tests and view in real time each
+	      page fetch with firefox.
+
+ fl-run-test  myfile.py MyTestCase.testSomething -l 3 -n 100
+	      Run MyTestCase.testSomething, reload one hundred
+	      time the page 3 without concurrency and as fast as
+	      possible. Output response time stats. You can loop
+	      on many pages using slice -l 2:4.
+
+ fl-run-test myFile.py -e [Ss]ome
+	      Run all tests that match the regex [Ss]ome.
+
+ fl-run-test myFile.py -e '!foo$'
+	      Run all tests that does not ends with foo.
+
+ fl-run-test myFile.py --list
+	      List all the test names.
+
+ fl-run-test -h
+	      More options.
+
+
+
+

2.3   Options

+
+ --version               show program's version number and exit
+ --help, -h              show this help message and exit
+ --quiet, -q             Minimal output.
+ --verbose, -v           Verbose output.
+ --debug, -d             FunkLoad and doctest debug output.
+ --debug-level=DEBUG_LEVEL
+	                 Debug level 2 is more verbose.
+ --url=MAIN_URL, -uMAIN_URL
+			 Base URL to bench without ending '/'.
+ --sleep-time-min=FTEST_SLEEP_TIME_MIN, -mFTEST_SLEEP_TIME_MIN
+			 Minumum sleep time between request.
+ --sleep-time-max=FTEST_SLEEP_TIME_MAX, -MFTEST_SLEEP_TIME_MAX
+			 Maximum sleep time between request.
+ --dump-directory=DUMP_DIR
+			 Directory to dump html pages.
+ --firefox-view, -V      Real time view using firefox, you must have a running
+			 instance of firefox in the same host.
+ --no-color              Monochrome output.
+ --loop-on-pages=LOOP_STEPS, -lLOOP_STEPS
+		         Loop as fast as possible without concurrency on pages
+			 expect a page number or a slice like 3:5. Output some
+			 statistics.
+ --loop-number=LOOP_NUMBER, -nLOOP_NUMBER
+		         Number of loop.
+ --accept-invalid-links  Do not fail if css/image links are not reachable.
+ --simple-fetch          Don't load additional links like css or images when
+			 fetching an html page.
+ --stop-on-fail          Stop tests on first failure or error.
+ --regex=REGEX, -eREGEX  The test names must match the regex.
+ --list                  Just list the test names.
+
+
+
+
+

3   Benching

+

The same FunkLaod test can be turned into a load test, just by invoking the + bench runner fl-run-bench.

+
+

3.1   Principle

+

Here are some definitions used in bench mode:

+
    +
  • CUs: Concurrent Users, which is the number of threads.
  • +
  • STPS: Average of Successful Tests Per Second during a cycle.
  • +
  • SPPS: Average of Successfully Page Per Second during a cycle.
  • +
  • RPS: Average Request Per Second, successfully or not.
  • +
  • max[STPS|SPPS|RPS]: maximum of STPS|SPPS|RPS for a cycle.
  • +
+
+

Page

+

A page is an http get/post request with associated sub requests like + redirects, images or links (css, js files). This is what users see as a + single page.

+
+
+

Test

+

A test is made with 3 methods: setUp/test_name/tearDown. During the test_name + method each get/post request is called a page.

+
+[setUp][page 1]    [page 2] ... [page n]   [tearDown]
+======================================================> time
+	<----------------------------------> test method
+	       <--> sleeptime_min to sleeptime_max
+	<-----> page 1 connection time
+
+
+
+

Cycle

+

A cycle is a load of n concurrents test during a 'duration' period. + Threads are launched every 'startupdelay' seconds, each thread executes + test in a loop.

+

Once all threads have been started we start to record stats.

+

Only tests that end during the 'duration' period are taken into account + for the test stats (in the representation below test like [---X are not + take into account).

+

Only pages and requests that finish during the 'duration' are taken into + account for the request and pages statistic

+

Before a cycle a setUpCycle method is called, after a cycle a tearDownCycle + method is called, you can use these methods to test differents server + configuration for each cycle.

+
+Threads
+^
+|
+|
+|n                   [---test--]   [--------]   [--|---X
+|...
+|                    |                             |
+|2            [------|--]   [--------]   [-------] |
+|                    |                             |
+|1          [------X | [--------]   [-------]   [--|--X
+|                    |                             |
+|[setUpCycle]        |                             |    [tearDownCycle]
+===========================================================> time
+                     <------ cycle duration ------->
+ <----- staging ----->                             <---- staging ----->
+            <-> startupdelay    <---> sleeptime
+
+
+
+

Cycles

+

FunkLoad can execute many cycles with different number of CUs, this way you + can find easily the maximum number of users that your application can + handle.

+

Running n cycles with the same CUs is a good way to see how the application + handles a writing test over time.

+

Running n cycles with the same CUs with a reading test and a setUpCycle that + change the application configuration will help you to find the right tuning.

+
+cvus = [n1, n2, ...]
+
+Threads
+^
+|
+|
+|n2                            __________
+|                             /          \
+|                            /            \
+|n1   _________             /              \
+|    /         \           /                \
+|   /           \         /                  \
+|  /             \       /                    \
+==================================================> time
+      <------->   duration     <-------->
+		  <-----> cycle sleep time
+
+
+
+
+

3.2   Bench runner

+
+

Usage

+
+ fl-run-bench [options] file class.method
+
+
+
+

Examples

+
+fl-run-bench myFile.py MyTestCase.testSomething
+		Bench MyTestCase.testSomething using MyTestCase.conf.
+fl-run-bench -u http://localhost:8080 -c 10:20 -d 30 myFile.py MyTestCase.testSomething
+		Bench MyTestCase.testSomething on localhost:8080
+		with 2 cycles of 10 and 20 users during 30s.
+fl-run-bench -h
+		More options.
+
+
+
+

Options

+
+--version               show program's version number and exit
+--help, -h              show this help message and exit
+--url=MAIN_URL, -uMAIN_URL
+			Base URL to bench.
+--cycles=BENCH_CYCLES, -cBENCH_CYCLES
+			Cycles to bench, this is a list of number of virtual
+			concurrent users, to run a bench with 3 cycles with 5,
+			10 and 20 users use: -c 2:10:20
+--duration=BENCH_DURATION, -DBENCH_DURATION
+			Duration of a cycle in seconds.
+--sleep-time-min=BENCH_SLEEP_TIME_MIN, -mBENCH_SLEEP_TIME_MIN
+			Minimum sleep time between request.
+--sleep-time-max=BENCH_SLEEP_TIME_MAX, -MBENCH_SLEEP_TIME_MAX
+			Maximum sleep time between request.
+--startup-delay=BENCH_STARTUP_DELAY, -sBENCH_STARTUP_DELAY
+			Startup delay between thread.
+--no-color              Monochrome output.
+--accept-invalid-links  Do not fail if css/image links are not reachable.
+--simple-fetch          Don't load additional links like css or images when
+			fetching an html page.
+
+
+
+
+

3.3   Tips

+

Here are few remarks/advices to obtain workable metrics.

+
    +
  • Since it uses significant CPU resources, make sure that performance limits + are not hit by FunkLoad before your server's limit is reached. + Check this by launching a bench from another host.

    +
  • +
  • Having a cycle with one user gives a usefull reference.

    +
  • +
  • A bench is composed of a benching test (or scenario) run many times. A good + benching test should not be too long so you have a higher testing rate (that + is, more benching tests can come to their end).

    +
  • +
  • The cycle duration for the benching test should be long enough. + Around 5 times the duration of a single benching test is a value that is + usually a safe bet. You can obtain this duration of a single benching test by + running fl-run-test myfile.py MyTestCase.testSomething.

    +

    Rationale : Normally a cycle duration of a single benching test should be + enough. But from the testing platform side if there are more than one + concurrent user, there are many threads to start and it takes some time. And on + from the tested platform side it is common that a benching test will last + longer and longer as the server is used by more and more users.

    +
  • +
  • You should use many cycles with the same step interval to produce readable + charts (1:10:20:30:40:50:60 vs 1:10:100)

    +
  • +
  • A benching test must have the same number of page and in the same + order.

    +
  • +
  • Use a Makefile to make reproductible bench.

    +
  • +
  • There is no debug option while doing a bench (since this would be illegible + with all the threads). So, if a bench fails (that is using fl-run-bench), + use fl-run-test -d to debug.

    +
  • +
  • Using fl-record is very easy and very fast to create a scenario. But since + it doesn't support HTTPS, the good practise is to first record a scenario + with fl-record on HTTP, and then change the url back to https in your + FunkLoad test configuration file.

    +
  • +
  • Always use description in post/get/xmlrpc, this improves the + readability of the report.

    +
  • +
+
+
+
+

4   Bench report

+

To produce an HTML or ReST report you need to invoke the fl-build-report, + you can easily produce PDF report using Firefox 'Print To File' in + PostScript then use the ps2pdf converter.

+
+

4.1   Usage

+
+ fl-build-report [options] xmlfile
+
+

fl-build-report analyze a FunkLoad bench xml result file and output a + report.

+
+
+

4.2   Examples

+
+ fl-build-report funkload.xml
+	      ReST rendering into stdout.
+ fl-build-report --html -o /tmp funkload.xml
+	      Build an HTML report in /tmp.
+ fl-build-report -h
+	      More options.
+
+
+
+

4.3   Options

+
+--version               show program's version number and exit
+--help, -h              show this help message and exit
+--html, -H              Produce an html report.
+--output-directory=OUTPUT_DIR, -oOUTPUT_DIR
+			Directory to store reports.
+
+
+ Note that you can preview the report for cycles that have been done while
+ the bench is still running by invoking the above command.
+
+
+
+
+

5   Test Recorder

+
+

5.1   Recording a new FunkLoad test

+

Starting with FunkLoad 1.3.0 you can use fl-record to record your + navigator activity, this requires the TCPWatch python proxy see INSTALL + for information on how to install TCPWatch.

+
    +
  1. Start the recorder:

    +
    + fl-record basic_navigation
    +
    +
  2. +
+
+

This will output something like this:

+
+Hit Ctrl-C to stop recording.
+HTTP proxy listening on :8090
+Recording to directory /tmp/tmpaYDky9_funkload.
+
+
+
    +
  1. Setup your browser proxy and play your scenario
  2. +
+
+
    +
  • in Firefox: Edit > Preferencies > General; Connection Settings set + localhost:8090 as your HTTP proxy

    +
  • +
  • Play your scenario using your navigator

    +
  • +
  • Hit Ctrl-C to stop recording:

    +
    +^C
    +# Saving uploaded file: foo.png
    +# Saving uploaded file: bar.pdf
    +Creating script: ./test_BasicNavigation.py.
    +Creating configuration file: ./BasicNavigation.conf.
    +
    +
  • +
+
+
    +
  1. Replay you scenario:

    +
    + fl-run-test -dV test_BasicNavigation.py
    +
    +
  2. +
+
+ You should see all the steps on your navigator.
+
    +
  1. Implement the dynamic part and assertion
  2. +
+
+
    +
  • Code the dynamic part like getting new url of a created document
  • +
  • Add assertion using FunkLoad helpers
  • +
  • Use a credential server if you want to make a bench with different users + or simply don't want to hard code your login/password.
  • +
+
+

Note that fl-record works fine with multi-part encoded form and file upload + but will failed to record https session.

+
+
+

5.2   The fl-record command

+
+

Usage

+
+ fl-record [options] [test_name]
+
+ fl-record launch a TCPWatch_ proxy and record activities, then output
+	   a FunkLoad script or generates a FunkLoad unit test if test_name
+	   is specified. The default proxy port is 8090.
+
+ Note that tcpwatch.py executable must be accessible from your env.
+
+
+
+

Examples

+
+fl-record foo_bar
+		Run a proxy and create a FunkLoad test case,
+		generates test_FooBar.py and FooBar.conf file.
+		To test it:  fl-run-test -dV test_FooBar.py
+fl-record -p 9090
+		Run a proxy on port 9090, output script to stdout.
+fl-record -i /tmp/tcpwatch
+		Convert a tcpwatch capture into a script.
+
+
+
+

Options

+
+--version               show program's version number and exit
+--help, -h              show this help message and exit
+--verbose, -v           Verbose output
+--port=PORT, -pPORT     The proxy port.
+--tcp-watch-input=TCPWATCH_PATH, -iTCPWATCH_PATH
+			Path to an existing tcpwatch capture.
+
+
+
+
+
+

6   Credential server

+

If you are writing a bench that requires to be logged with different users + FunkLoad provides an xmlrpc credential server to serve login/pwd between the + different threads.

+

It requires 2 files (like unix /etc/passwd and /etc/group) the password file + have the following format:

+
+login1:pwd1
+...
+
+

The group file format is:

+
+group1:user1, user2
+group2:user2
+# you can split group declaration
+group1:user3
+...
+
+

Setup a configuration file like in the demo/cmf folder, then start the + credential server:

+
+ fl-credential-ctl credential.conf start
+
+

More options:

+
+ fl-credential-ctl --help
+
+

See the funkload-demo/cmf example for a credential configuration file.

+
+
+

7   Monitor server

+

If you want to monitor a linux server health during the bench, you have to + run a monitor xmlrpc server on the target server, this require to install + the FunkLoad package.

+

On the server side you need to install the FunkLoad tool then launch the + server using a configuration file (example in the demo/simple + folder.):

+
+ fl-monitor-ctl monitor.conf start
+
+ # more info
+ fl-monitor-ctl --help
+
+

On the bench host side setup your test configuration like this:

+
+ [monitor]
+ hosts = server.to.test.com
+
+ [server.to.test.com]
+ description = The web server
+ port = 8008
+
+

Then run the bench, the report will include server stats.

+

Note that you can monitor multiple hosts and that the monitor is linux + specific.

+
+
+

8   The FunkLoadTestCase

+

FunkLoadTestCase extends the pyUnit unittest.TestCase with browser + capabilities, configuration file helpers and assertions helpers. FunkLoad + provides also some tools to generate random inputs and communicate with + credential servers.

+

Here is an overview of the api, you can find more on

+
+

8.1   Browser API

+
+

get

+
+ get(url, params=None, description=None, ok_codes=None)
+
+

This emulates a browser http GET link. It will fetch the url, submits + appropriate cookies, follow redirection, register new cookies, load css and + javascript.

+

It also simulates a browser cache by not reloading a css, a javascript or an + image twice.

+

Note that this is an emulation with some limitation:

+
    +
  • It is single threaded (it loads images one after the other)
  • +
  • It does not interpret javascript
  • +
  • See trac tickets that starts with Browser: for other limitations
  • +
+

This method returns a webunit HTTPResponse.

+

Parameters:

+
    +
  • url a valid url
  • +
  • params a dico of parameters that going to be append to the url like + url?key1=value1&...
  • +
  • description is used on the bench report to describe the user action
  • +
  • ok_codes is a list of http expected code like [200:301] if the http + response is not in the list get will raise a test failure exception, + if not provided assume that the default list is [200, 301, 302].
  • +
+

Note that if the url already contains encoded parameters you should not + use the params parameter.

+
+
+

post

+
+ post(url, params=None, description=None, ok_codes=None)
+
+

Same interface than the get() but it uses a http post method. + You can upload a file by setting a params like this:

+
+ from webunit.utility import Upload
+ params['file_up'] = Upload('/tmp/foo.txt')
+
+
+
+

exists

+
+ exists(url, params=None, description="Checking existence")
+
+

Return True if the http response code is 200, 301 or 302, and return False if + http code is 404 or 503, other codes will raise a test failure exception.

+
+
+

setBasicAuth

+
+ setBasicAuth(login, password)
+
+

Next requests will use the http basic authentication.

+
+
+

clearBasicAuth

+
+ clearBasicAuth()
+
+

Remove basic auth credential set by setBasicAuth.

+
+
+

setUserAgent

+
+ setUserAgent(agent)
+
+

New in 1.3.0. version.

+

Set a User-Agent http header for the next requests, the default browser + behaviour is to use the agent defined in the configuration file under + [main] + user_agent or to use the default + FunkLoad/version + string. Using this method enable to change the user agent during a test + case.

+
+
+

addHeader

+
+ addHeader(key, value)
+
+

New in 1.3.0. version.

+

Add an http header for the next requests.

+
+
+

clearHeaders

+
+ clearHeaders()
+
+

New in 1.3.0. version.

+

Remove all headers previously added by addHeader or setUserAgent, + and remove the referer as well.

+
+
+
+

8.2   XML RPC API

+

You can test or bench xmlrpc services using the following API.

+
+

xmlrpc

+
+ xmlrpc(url, method_name, params=None, description=None)
+
+

Call the method_name at url using xmlrpclib. You can use the + setBasicAuth method before to handle the http basic authentication. Note + that due to xmlrpclib limitation you can not use an http proxy.

+

Parameters:

+
    +
  • url the url of the xmlrpc server
  • +
  • method_name the name of the procedure to call
  • +
  • params a list of parameters to pass to the method
  • +
  • description is used on the bench report to describe the action
  • +
+
+
+
+

8.3   Assertion helpers API

+

FunkLoad uses the unittest assertion (assert_, assertEquals, + fail, ...), but provides some methods to check the http response. + After fetching a page you can use the following methods.

+
+

getLastUrl

+
+ getLastUrl()
+
+

Return the last accessed page url taking care of redirects.

+
+
+

getLastBaseUrl

+
+ getLastBaseUrl()
+
+

Return the <base /> href value of the last accessed page.

+
+
+

listHref

+
+ listHref(pattern=None)
+
+

Return a list of href anchor url present in the last html response, + filtering href using the pattern + regex if present.

+
+
+

getBody

+
+ getBody()
+
+

Return the last response content.

+
+
+

The response object

+

The response returned by a get or post are webunit HTTPResponse object

+
+ response = self.get(url)
+ print "http response code %s" % response.code
+ print "http header location %s" % response.headers['location']
+ self.assert_('HTML' in response.body)
+
+
+ response.getDOM().getByName('h1')
+
+

getDOM return a SimpleDOM interface of the fetched html page, see the + webunit SimpleDOM api instructions for details.

+
+
+
+

8.4   Configuration file API

+

A FunkLoadTestCase class uses a configuration file to setup variable + configuration, like the base server url to be tested, the test description, + credential access, logging files and other test specific parameters. The test + configuration file have the same name of the FunkLoadTestCase with a '.conf' + extension. See documented examples in the demo folder (fl-install-demo).

+
+

conf_get

+
+ conf_get(section, key, default=_marker)
+
+

Return an entry from the configuration file. Note that the entry may be + overriden by a command line option.

+

Parameters:

+
    +
  • section the section in the configuration file.
  • +
  • key the key.
  • +
  • default a default value.
  • +
+
+
+

conf_getInt

+

Return an integer.

+
+
+

conf_getFloat

+

Return a float.

+
+
+

conf_getList

+

Additional parameter:

+
    +
  • separator the default separator is a colon ':'.
  • +
+

Return a list

+
+
+
+

8.5   Logging

+

A FunkLoadTestCase store its results in an xml file (like request and test + result) and put other log information into a text log and/or output to the + console.

+
+

logd

+
+ logd(message)
+
+

Debug log message

+
+
+

logi

+
+ logi(message)
+
+

Information log message

+
+
+
+

8.6   Lipsum API

+

To generate dummy document contents you can use the funkload.Lipsum api, + this is a very simple "Lorem ipsum" generator.

+

You can see some examples by doing:

+
+ python -c "from funkload.Lipsum import main; main()"
+
+
+

Lipsum

+
+ from funkload.Lipsum import Lipsum
+ lipsum = Lipsum(vocab=V_ASCII, chars=CHARS, sep=SEP)
+
+

Parameters:

+
    +
  • vocab a list of word, Lipsum provide 3 lists V_ASCII, V_DIAC, V_8859_15
  • +
  • chars the list of char used to build an identifier
  • +
  • sep some separators used in sentences like coma, question mark ...
  • +
+
+
+

getWord

+
+ lipsum.getWord()
+
+

Return a random word from the vocabulary.

+
+
+

getUniqWord

+
+ lipsum.getUniqWord(length_min=None, length_max=None):
+
+

Generate a kind of uniq id.

+
+
+

getSubject

+
+ lipsum.getSubject(length=5, prefix=None, uniq=False,
+ length_min=None, length_max=None)
+
+

Return a subject of length word.

+

Parameters:

+
    +
  • length the number of words in the subject
  • +
  • prefix a prefix to add at the beginning of a the subject
  • +
  • uniq add an uniq identifier in the subject
  • +
  • length_min/max the words length is a random between min and max
  • +
+
+
+

getSentence

+
+ lipsum.getSentence()
+
+

Return a sentence with some separators and and a ending point.

+
+
+

getParagraph

+
+ lipsum.getParagraph(length=4)
+
+

Return a paragraph of length sentences.

+
+
+

getMessage

+
+ lipsum.getMessage(length=7)
+
+

Return a message with length Paragraphs.

+
+
+

getPhoneNumber

+
+ lipsum.getPhoneNumber(lang="fr", format="medium")
+
+

Return a random phone number.

+

Parameters:

+
    +
  • lang can be fr or en_US
  • +
  • format can be short, medium or long
  • +
+
+
+

getAddress

+
+ lipsum.getAddress(lang="fr")
+
+

Return a random address.

+
+
+
+

8.7   Utils

+

To communicate with FunkLoad + services like the credential server, there are + some wrappers in the utils module.

+
+

xmlrpc_get_credential

+
+ from funkload.utils import xmlrpc_get_credential
+ xmlrpc_get_credential(credential_host, credential_port, group=None)
+
+

Return a tuple login, password of a user that belong to group if specified.

+
+
+

xmlrpc_list_groups

+

List groups name served by the credential server.

+
+
+

xmlrpc_list_credentials

+

List all login/password served by the credential server.

+
+
+
+
+

9   FunkLoadDocTest

+

Since FunkLoad 1.5 + you can use funkload easily from a doctest:

+
+  >>> from funkload.FunkLoadDocTest import FunkLoadDocTest
+  >>> fl = FunkLoadDocTest()
+  >>> response = fl.get('http://localhost/')
+  >>> 'HTML' in response.body
+  True
+  >>> response
+  <response url="http://127.0.0.1:80/" code="200" message="OK" />
+
+

FunkLoadDocTest exposes the same API than The FunkLoadTestCase.

+
+
+

10   Other Test Cases

+
+

10.1   The ZopeTestCase

+

This class extends the FunkLoadTestCase providing common Zope tasks.

+
+

zopeRestart

+
+ zopeRestart(zope_url, admin_id, admin_pwd, time_out=600)
+
+

Stop and Start the Zope server.

+

Parameters:

+
    +
  • zope_url the zope url.
  • +
  • admin_id and admin_pwd the zope admin credential.
  • +
  • time_out maximum time to wait until the zope server restart.
  • +
+
+
+

zopePackZodb

+
+ zopePackZodb(zope_url, admin_id, admin_pwd, database="main", days=0)
+
+

Pack a zodb database.

+

Parameters:

+
    +
  • database the database to pack.
  • +
  • days removing previous revision that are older than days ago
  • +
+
+
+

zopeFlushCache

+
+ zopeFlushCache(zope_url, admin_id, admin_pwd, database="main")
+
+

Remove all objects from all ZODB in-memory caches.

+
+
+

zopeAddExternalMethod

+
+ zopeAddExternalMethod(parent_url, admin_id, admin_pwd,
+ method_id, module, function, run_it=True)
+
+

Add an External method an run it.

+
+
+
+

10.2   CPSTestCase

+

This class extends the ZopeTestCase providing common Nuxeo CPS tasks. You + need to import the CPSTestCase that works with your CPS for example + CPS338TestCAse or CPS340TestCase.

+
+

cpsCreateSite

+
+ cpsCreateSite(admin_id, admin_pwd,
+ manager_id, manager_password,
+ manager_mail, langs=None,
+ title=None, description=None,
+ interface="portlets", zope_url=None, site_id=None)
+
+

Build a new CPS site.

+

Parameters:

+
    +
  • admin_id and admin_pwd the zope admin credential.
  • +
  • manager_id and manager_pwd the cps manager credential.
  • +
  • zope_url the Zope server url [*].
  • +
  • site_id the CPS site id.
  • +
+ + + + + +
[*]if the zope_url and site_id is not given we guess it using the + server_url
+
+
+

cpsLogin

+
+ cpsLogin(login, password)
+
+

CPS log in.

+
+
+

cpsLogout

+

Logout the user logged in using cpsLogin.

+
+
+

cpsCreateGroup

+
+ cpsCreateGroup(group_name)
+
+

Create a CPS group.

+
+
+

cpsVerifyGroup

+
+ cpsVerifyGroup(group_name)
+
+

Create a CPS group if not present.

+
+
+

cpsCreateUser

+
+ cpsCreateUser(user_id=None, user_pwd=None,
+ user_givenName=None, user_sn=None,
+ user_email=None, groups=None):
+
+

Create a CPS users.

+
+
+

cpsVerifyUser

+

Create a CPS + users if not present.

+
+
+

cpsSetLocalRole

+
+ cpsSetLocalRole(url, name, role)
+
+

Grant role to name in url.

+
+
+

cpsCreateSection

+
+ cpsCreateSection(parent_url, title, description)
+
+
+
+

cpsCreateWorkspace

+
+ cpsCreateWorkspace(parent_url, title, description)
+
+
+
+

cpsCreateDocument

+
+ cpsCreateDocument(parent_url)
+
+

Create a random document in the parent_url container.

+
+
+

cpsCreateNewsItem

+
+ cpsCreateNewsItem(parent_url)
+
+

Create a simple news in the parent_url container.

+
+
+

cpsChangeUiLanguage

+
+ cpsChangeUiLanguage(lang)
+
+

Change the ui locale selection

+
+
+

cpsListDocumentHref

+
+ cpsListDocumentHref(pattern)
+
+

Return a clean list of document href that matches pattern in the previous + page fetched.

+
+
+

cpsSearchDocId

+
+ cpsSearchDocId(doc_id)
+
+

Return the list of url that ends with doc_id, using catalog search.

+
+
+
+
+

11   Todo and bugs

+ +

If you want to report a bug or if you think that something is + missing, send me an email.

+ + + + +
+
+ + + + --- funkload-1.6.2.orig/debian/fl-credential-ctl.1 +++ funkload-1.6.2/debian/fl-credential-ctl.1 @@ -0,0 +1,35 @@ +.TH "FL-CREDENTIAL-CTL" "1" "11 December 2007" "Debian Project" "Debian manual" +.SH "NAME" +fl\-credential\-ctl \- XML\-RPC credential server for funkload +.SH "SYNOPSIS" +.B fl\-credential\-ctl +.B [ options ] +.B config_file +.B [ start | startd | stop | restart | status | test ] +.SH "DESCRIPTION" +fl\-credential\-ctl controls the XML\-RPC based credential server for Funkload. This server is meant to be used in order to write benchs that require authentication. +.PP +A configuration file needs to be setup in order to use this server. Please refer to demo/cmf/credential.conf for an example. +.SH "OPTIONS" +.TP +.B \-\-version +Show program's version number and exit +.TP +.B \-\-help, \-h +Show a help message and exit +.TP +.B \-\-quiet, \-q +Verbose output +.SH "SEE ALSO" +.BR fl\-build\-report (1), +.BR fl\-import\-from\-tm\-recorder (1), +.BR fl\-install\-demo (1), +.BR fl\-monitor\-ctl (1), +.BR fl\-record (1), +.BR fl\-run\-bench (1), +.BR fl\-run\-test (1). +.SH "AUTHOR" +Funkload was written by Benoit Delbosc. +.PP +This manual page was written by Jose Parrella , +for the Debian project (but may be used by others). --- funkload-1.6.2.orig/debian/dirs +++ funkload-1.6.2/debian/dirs @@ -0,0 +1 @@ +usr/bin --- funkload-1.6.2.orig/debian/manpage.sgml +++ funkload-1.6.2/debian/manpage.sgml @@ -0,0 +1,157 @@ + manpage.1'. You may view + the manual page with: `docbook-to-man manpage.sgml | nroff -man | + less'. A typical entry in a Makefile or Makefile.am is: + +manpage.1: manpage.sgml + docbook-to-man $< > $@ + + + The docbook-to-man binary is found in the docbook-to-man package. + Please remember that if you create the nroff version in one of the + debian/rules file targets (such as build), you will need to include + docbook-to-man in your Build-Depends control field. + + --> + + + Toni"> + Müller"> + + December 13, 2007"> + + 1"> + toni@debian.org"> + + FUNKLOAD"> + + + Debian"> + GNU"> + GPL"> +]> + + + +
+ &dhemail; +
+ + &dhfirstname; + &dhsurname; + + + 2003 + &dhusername; + + &dhdate; +
+ + &dhucpackage; + + &dhsection; + + + &dhpackage; + + is a package to support testing and benchmarking of + web applications + + + + &dhpackage; + + + + + + + + DESCRIPTION + + This manual page documents briefly the + &dhpackage; and bar + commands. + + This manual page was written for the &debian; distribution + because the original program does not have a manual page. + Instead, it has documentation in the &gnu; + Info format; see below. + + &dhpackage; is a program that... + + + + OPTIONS + + These programs follow the usual &gnu; command line syntax, + with long options starting with two dashes (`-'). A summary of + options is included below. For a complete description, see the + Info files. + + + + + + + + Show summary of options. + + + + + + + + Show version of program. + + + + + + SEE ALSO + + bar (1), baz (1). + + The programs are documented fully by The Rise and + Fall of a Fooish Bar available via the + Info system. + + + AUTHOR + + This manual page was written by &dhusername; &dhemail; for + the &debian; system (but may be used by others). Permission is + granted to copy, distribute and/or modify this document under + the terms of the &gnu; General Public License, Version 2 any + later version published by the Free Software Foundation. + + + On Debian systems, the complete text of the GNU General Public + License can be found in /usr/share/common-licenses/GPL. + + + +
+ + + + --- funkload-1.6.2.orig/debian/changelog +++ funkload-1.6.2/debian/changelog @@ -0,0 +1,21 @@ +funkload (1.6.2-3) unstable; urgency=low + + * renamed recommends "tcpwatch" to "tcpwatch-httpproxy" + * added python-setup to build-depends (closes: #457240) + * added Jose Miguel Parrella Romero's manpages (thank you!) + * fixed typos in the control file (closes: #457344) + + -- Toni Mueller Fri, 21 Dec 2007 23:19:17 +0100 + +funkload (1.6.2-2) unstable; urgency=low + + * added missing dependency + + -- Toni Mueller Wed, 19 Dec 2007 11:33:38 +0100 + +funkload (1.6.2-1) unstable; urgency=low + + * Initial release (Closes: #351082) + + -- Toni Mueller Wed, 12 Dec 2007 17:07:33 +0100 + --- funkload-1.6.2.orig/debian/funkload.lintian +++ funkload-1.6.2/debian/funkload.lintian @@ -0,0 +1,4 @@ +funkload: package-contains-upstream-install-documentation usr/share/doc/funkload/INSTALL.txt.gz +funkload: extra-license-file usr/share/doc/funkload/LICENSE.txt.gz +funkload: script-not-executable ./usr/share/pycentral/funkload/site-packages/funkload/BenchRunner.py +funkload: script-not-executable ./usr/share/pycentral/funkload/site-packages/funkload/TestRunner.py --- funkload-1.6.2.orig/debian/README.Debian +++ funkload-1.6.2/debian/README.Debian @@ -0,0 +1,8 @@ +I included upstream documentation for reference, but of course, under +Debian, it's usually much more preferable to use the Debian ways of +doing things. + +The manpages were kindly donated by Jose Parella. I included the full +HTML documentation from the original website, but cleaned up the HTML on +the way. + --- funkload-1.6.2.orig/debian/fl-build-report.1 +++ funkload-1.6.2/debian/fl-build-report.1 @@ -0,0 +1,37 @@ +.TH "FL-BUILD-REPORT" "1" "11 December 2007" "Debian Project" "Debian manual" +.SH "NAME" +fl\-build\-report \- converts a testmaker script into a FunkLoad test +.SH "SYNOPSIS" +.B fl\-build\-report +.B [options] +.B xmlfile +.SH "DESCRIPTION" +fl\-build\-report analyzes a FunkLoad XML result file and outputs a report in HTML or ReST. +.PP +You can preview the report for cycles that have been done while the bench is still running by invoking fl\-build\-report. +.SH "OPTIONS" +.TP +.B \-\-version +Show program's version number and exit +.TP +.B \-\-help, \-h +Shows a help message and exit +.TP +.B \-\-html, \-H +Produce an HTML report +.TP +.B \-\-output\-directory=OUTPUT_DIR, \-oOUTPUT_DIR +Defines the directory where reports are outputted +.SH "SEE ALSO" +.BR fl\-credential\-ctl (1), +.BR fl\-import\-from\-tm\-recorder (1), +.BR fl\-install\-demo (1), +.BR fl\-monitor\-ctl (1), +.BR fl\-record (1), +.BR fl\-run\-bench (1), +.BR fl\-run\-test (1). +.SH "AUTHOR" +Funkload was written by Benoit Delbosc. +.PP +This manual page was written by Jose Parrella , +for the Debian project (but may be used by others). --- funkload-1.6.2.orig/debian/postinst +++ funkload-1.6.2/debian/postinst @@ -0,0 +1,41 @@ +#!/bin/sh +# postinst script for funkload +# +# see: dh_installdeb(1) + +set -e + +# summary of how this script can be called: +# * `configure' +# * `abort-upgrade' +# * `abort-remove' `in-favour' +# +# * `abort-remove' +# * `abort-deconfigure' `in-favour' +# `removing' +# +# for details, see http://www.debian.org/doc/debian-policy/ or +# the debian-policy package + + +case "$1" in + configure) + ;; + + abort-upgrade|abort-remove|abort-deconfigure) + ;; + + *) + echo "postinst called with unknown argument \`$1'" >&2 + exit 1 + ;; +esac + +# dh_installdeb will replace this with shell code automatically +# generated by other debhelper scripts. + +#DEBHELPER# + +exit 0 + + --- funkload-1.6.2.orig/debian/compat +++ funkload-1.6.2/debian/compat @@ -0,0 +1 @@ +5 --- funkload-1.6.2.orig/debian/pycompat +++ funkload-1.6.2/debian/pycompat @@ -0,0 +1 @@ +2 --- funkload-1.6.2.orig/debian/fl-install-demo.1 +++ funkload-1.6.2/debian/fl-install-demo.1 @@ -0,0 +1,20 @@ +.TH "FL-INSTALL-DEMO" "1" "11 December 2007" "Debian Project" "Debian manual" +.SH "NAME" +fl\-install\-demo \- installs funkload demonstration files +.SH "SYNOPSIS" +.B fl\-install\-demo +.SH "DESCRIPTION" +fl\-install\-demo installs the funkload demonstration files in ./funkload\-demo +.SH "SEE ALSO" +.BR fl\-build\-report (1), +.BR fl\-credential\-ctl (1), +.BR fl\-import\-from\-tm\-recorder (1), +.BR fl\-monitor\-ctl (1), +.BR fl\-record (1), +.BR fl\-run\-bench (1), +.BR fl\-run\-test (1). +.SH "AUTHOR" +Funkload was written by Benoit Delbosc. +.PP +This manual page was written by Jose Parrella , +for the Debian project (but may be used by others). --- funkload-1.6.2.orig/debian/note-to-self +++ funkload-1.6.2/debian/note-to-self @@ -0,0 +1 @@ +current tree 10 --- funkload-1.6.2.orig/debian/postrm +++ funkload-1.6.2/debian/postrm @@ -0,0 +1,39 @@ +#!/bin/sh +# postrm script for funkload +# +# see: dh_installdeb(1) + +set -e + +# summary of how this script can be called: +# * `remove' +# * `purge' +# * `upgrade' +# * `failed-upgrade' +# * `abort-install' +# * `abort-install' +# * `abort-upgrade' +# * `disappear' +# +# for details, see http://www.debian.org/doc/debian-policy/ or +# the debian-policy package + + +case "$1" in + purge|remove|upgrade|failed-upgrade|abort-install|abort-upgrade|disappear) + ;; + + *) + echo "postrm called with unknown argument \`$1'" >&2 + exit 1 + ;; +esac + +# dh_installdeb will replace this with shell code automatically +# generated by other debhelper scripts. + +#DEBHELPER# + +exit 0 + + --- funkload-1.6.2.orig/debian/copyright +++ funkload-1.6.2/debian/copyright @@ -0,0 +1,28 @@ +This package was debianized by Toni Mueller on +Wed, 12 Dec 2007 17:07:33 +0100. + +It was downloaded from http://funkload.nuxeo.com/, which is also the +homepage of the project. + +Upstream Author: Benoit Delbosc + +Copyright: (C) Copyright 2005 Nuxeo SAS (http://nuxeo.com). + +License (taken verbatim from the upstream's LICENSE.txt file): + +---- cut +This program is free software; you can redistribute it and/or modify it under +the terms of the GNU General Public License version 2 as published by the Free +Software Foundation. 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. +---- cut + +You should have received a copy of the GNU General Public License +along with this program. If not, see . + + +The Debian packaging is (C) 2007, Toni Mueller and +is licensed under the GPL, see `/usr/share/common-licenses/GPL'. + --- funkload-1.6.2.orig/debian/fl-run-bench.1 +++ funkload-1.6.2/debian/fl-run-bench.1 @@ -0,0 +1,57 @@ +.TH "FL-RUN-BENCH" "1" "11 December 2007" "Debian Project" "Debian manual" +.SH "NAME" +fl\-record \- runs a funkload test +.SH "SYNOPSIS" +.B fl\-record +.B [ options ] +.B file +.B class.method +.SH "DESCRIPTION" +A funkload test can be turned into a load test, just by invoking the bench runner fl\-run\-bench. +.SH "OPTIONS" +.TP +.B \-\-version +show program's version number and exit +.TP +.B \-\-help, \-h +show this help message and exit +.TP +.B \-\-url=MAIN_URL, \-uMAIN_URL +Base URL to bench. +.TP +.B \-\-cycles=BENCH_CYCLES, \-cBENCH_CYCLES +Cycles to bench, this is a list of number of virtual concurrent users, to run a bench with 3 cycles with 5, 10 and 20 users use: \-c 2:10:20 +.TP +.B \-\-duration=BENCH_DURATION, \-DBENCH_DURATION +Duration of a cycle in seconds. +.TP +.B \-\-sleep\-time\-min=BENCH_SLEEP_TIME_MIN, \-mBENCH_SLEEP_TIME_MIN +Minimum sleep time between request. +.TP +.B \-\-sleep\-time\-max=BENCH_SLEEP_TIME_MAX, \-MBENCH_SLEEP_TIME_MAX +Maximum sleep time between request. +.TP +.B \-\-startup\-delay=BENCH_STARTUP_DELAY, \-sBENCH_STARTUP_DELAY +Startup delay between thread. +.TP +.B \-\-no\-color +Monochrome output. +.TP +.B \-\-accept\-invalid\-links +Do not fail if css/image links are not reachable. +.TP +.B \-\-simple\-fetch +Don't load additional links like css or images when fetching an html page. +.SH "SEE ALSO" +.BR fl\-build\-report (1), +.BR fl\-credential\-ctl (1), +.BR fl\-import\-from\-tm\-recorder (1), +.BR fl\-install\-demo (1), +.BR fl\-monitor\-ctl (1), +.BR fl\-record (1), +.BR fl\-run\-test (1). +.SH "AUTHOR" +Funkload was written by Benoit Delbosc. +.PP +This manual page was written by Jose Parrella , +for the Debian project (but may be used by others). --- funkload-1.6.2.orig/debian/preinst +++ funkload-1.6.2/debian/preinst @@ -0,0 +1,37 @@ +#!/bin/sh +# preinst script for funkload +# +# see: dh_installdeb(1) + +set -e + +# summary of how this script can be called: +# * `install' +# * `install' +# * `upgrade' +# * `abort-upgrade' +# for details, see http://www.debian.org/doc/debian-policy/ or +# the debian-policy package + + +case "$1" in + install|upgrade) + ;; + + abort-upgrade) + ;; + + *) + echo "preinst called with unknown argument \`$1'" >&2 + exit 1 + ;; +esac + +# dh_installdeb will replace this with shell code automatically +# generated by other debhelper scripts. + +#DEBHELPER# + +exit 0 + + --- funkload-1.6.2.orig/debian/fl-monitor-ctl.1 +++ funkload-1.6.2/debian/fl-monitor-ctl.1 @@ -0,0 +1,35 @@ +.TH "FL-MONITOR-CTL" "1" "11 December 2007" "Debian Project" "Debian manual" +.SH "NAME" +fl\-monitor\-ctl \- monitors server health during funkload benchs +.SH "SYNOPSIS" +.B fl\-monitor\-ctl +.B [ options ] +.B config_file +.B [ start | startd | stop | restart | status | test ] +.SH "DESCRIPTION" +fl\-monitor\-ctl monitors server health during a Funkload bench. It is implemented as an XML\-RPC server. +.PP +A configuration file needs to be setup in order to use this server. Please refer to demo/simple/credential.conf for an example. +.SH "OPTIONS" +.TP +.B \-\-version +Show program's version number and exit +.TP +.B \-\-help, \-h +Show a help message and exit +.TP +.B \-\-quiet, \-q +Verbose output +.SH "SEE ALSO" +.BR fl\-build\-report (1), +.BR fl\-credential\-ctl (1), +.BR fl\-import\-from\-tm\-recorder (1), +.BR fl\-install\-demo (1), +.BR fl\-record (1), +.BR fl\-run\-bench (1), +.BR fl\-run\-test (1). +.SH "AUTHOR" +Funkload was written by Benoit Delbosc. +.PP +This manual page was written by Jose Parrella , +for the Debian project (but may be used by others). --- funkload-1.6.2.orig/debian/fl-import-from-tm-recorder.1 +++ funkload-1.6.2/debian/fl-import-from-tm-recorder.1 @@ -0,0 +1,31 @@ +.TH "FL-IMPORT-FROM-TM-RECORDER" "1" "11 December 2007" "Debian Project" "Debian manual" +.SH "NAME" +fl\-import\-from\-tm\-recorder \- converts TestMaker scripts into funkload scripts +.SH "SYNOPSIS" +.B fl\-import\-from\-tm\-recorder +.B [ options ] +.B tm_script +.SH "DESCRIPTION" +fl\-import\-from\-tm\-recorder converts a TestMaker script built with the TM Recorder into a FunkLoad script and configuration file. +.PP +Given any *.tm file, this script will generate scenarioName.py and scenarioName.conf, which are then usable by fl\-run\-test. +.SH "OPTIONS" +.TP +.B \-\-help, \-h +Show a help message and exit +.TP +.B \-\-output\-directory=OUTPUT_DIR, \-o OUTPUT_DIR +Directory where HTML pages will be dumped +.SH "SEE ALSO" +.BR fl\-build\-report (1), +.BR fl\-credential\-ctl (1), +.BR fl\-install\-demo (1), +.BR fl\-monitor\-ctl (1), +.BR fl\-record (1), +.BR fl\-run\-bench (1), +.BR fl\-run\-test (1). +.SH "AUTHOR" +Funkload was written by Benoit Delbosc. +.PP +This manual page was written by Jose Parrella , +for the Debian project (but may be used by others). --- funkload-1.6.2.orig/debian/docs +++ funkload-1.6.2/debian/docs @@ -0,0 +1,8 @@ +CHANGES.txt +INSTALL.txt +LICENSE.txt +README.txt +README.txt +TODO.txt +TODO.txt +funkload.egg-info/ --- funkload-1.6.2.orig/debian/fl-record.1 +++ funkload-1.6.2/debian/fl-record.1 @@ -0,0 +1,38 @@ +.TH "FL-RECORD" "1" "11 December 2007" "Debian Project" "Debian manual" +.SH "NAME" +fl\-record \- records a live funkload test using TCPWatch +.SH "SYNOPSIS" +.B fl\-record +.B [ options ] +.B test_case +.SH "DESCRIPTION" +fl\-record uses TCPWatch to setup a proxy server which is then used by a browser and records activities. It generates a Funkload script or a unit test if a name is passed to the script. +.SH "OPTIONS" +.TP +.B \-\-version +Show program's version number and exit +.TP +.B \-\-help, \-h +Show a help message and exit +.TP +.B \-\-verbose, \-v +Verbose output +.TP +.B \-\-port=PORT, \-p PORT +TCP port where the proxy listens (Defaults to 8090) +.TP +.B \-\-tcp\-watch\-input=TCPWATCH_PATH, \-i TCPWATCH_PATH +Path to an existing TCPWatch capture +.SH "SEE ALSO" +.BR fl\-build\-report (1), +.BR fl\-credential\-ctl (1), +.BR fl\-import\-from\-tm\-recorder (1), +.BR fl\-install\-demo (1), +.BR fl\-monitor\-ctl (1), +.BR fl\-run\-bench (1), +.BR fl\-run\-test (1). +.SH "AUTHOR" +Funkload was written by Benoit Delbosc. +.PP +This manual page was written by Jose Parrella , +for the Debian project (but may be used by others). --- funkload-1.6.2.orig/funkload.egg-info/SOURCES.txt +++ funkload-1.6.2/funkload.egg-info/SOURCES.txt @@ -1,13 +1,6 @@ -CHANGES.txt -INSTALL.txt -LICENSE.txt -Makefile README.txt -THANKS -TODO.txt -ez_setup.py +setup.cfg setup.py -doc/Makefile funkload/BenchRunner.py funkload/CPS338TestCase.py funkload/CPS340DocTest.py @@ -19,7 +12,6 @@ funkload/FunkLoadDocTest.py funkload/FunkLoadTestCase.py funkload/Lipsum.py -funkload/Makefile funkload/Monitor.py funkload/PatchWebunit.py funkload/Recorder.py @@ -38,33 +30,6 @@ funkload.egg-info/requires.txt funkload.egg-info/top_level.txt funkload.egg-info/zip-safe -funkload/data/ConfigurationTestCase.tpl -funkload/data/ScriptTestCase.tpl -funkload/data/funkload.css -funkload/demo/README.txt -funkload/demo/cmf/Cmf.conf -funkload/demo/cmf/README.txt -funkload/demo/cmf/credential.conf -funkload/demo/cmf/groups.txt -funkload/demo/cmf/passwords.txt -funkload/demo/cmf/test_Cmf.py -funkload/demo/simple/README.txt -funkload/demo/simple/Simple.conf -funkload/demo/simple/monitor.conf -funkload/demo/simple/test_Simple.py -funkload/demo/xmlrpc/Credential.conf -funkload/demo/xmlrpc/Makefile -funkload/demo/xmlrpc/README.txt -funkload/demo/xmlrpc/cred.conf -funkload/demo/xmlrpc/monitor.conf -funkload/demo/xmlrpc/test_Credential.py -funkload/demo/zope/README.txt -funkload/demo/zope/Zope.conf -funkload/demo/zope/test_Zope.py -funkload/tests/__init__.py -funkload/tests/doctest_dummy.txt -funkload/tests/test_Install.py -funkload/tests/test_dummy.py scripts/fl-build-report scripts/fl-credential-ctl scripts/fl-import-from-tm-recorder