Skip to main content
Help us improve PyPI by participating in user testing. All experience levels needed!

Surcharge is a tool for benchmarking your web server

Project description

Downloads Latest Version


  • ProgressBar issues
  • DNS resolution is wrong


Surcharge is a tool for benchmarking your web server like apache benchmark. Surcharge uses the gevent networking library. Using the greenlets allow to spawn many concurrent requests with little memory. HTTP requests are made with requests library.


This code has been run on Python 2.7

# install by the setup


$ pip install surcharge #and enjoy


Example command

# simple call
$ surcharge --numbers 10 --concurrency 5

# standard stdout
Server: gws


Concurrency level: 5

Options: {'cookies': {}, 'timeout': 2.0}

100% |############################|

Number process requests: 10
Time taken for tests: 0.57
Complete requests: 10
Failed requests: 0
Faster request: 0.045
Slower request: 0.059
Time per request (only success): 0.051
Request per second: 98.57

# call with multiple cookies
$ surcharge --cookies "{'ck':1, 'cook':value}"

# call with HTTP Basic Auth
$ surcharge --auth "user:password"

# bench during 10 seconds
$ surcharge --concurrency 10 --duration 10

Example API

 # see the constructor or the surcharge/ for more details
 >>> from surcharge.core import Surcharger
 >>> surcharge = Surcharger(url='')
 >>> surcharge()

 >>> surcharge.result
 defaultdict(<type 'list'>, {200: [0.06690406799316406]})

 # compute simple stat
 >>> from surcharge.core import SurchargerStats
 >>> surcharge_stats = SurchargerStats(surcharge)
 >>> surcharge_stats()

 >>> surcharge_stats.stats
 {'RPS': 14.20353538774128,
'exec_time': 0.07088184356689453,
'max': 0.0704050064086914,
'min': 0.0704050064086914,
'moy': 0.0704050064086914,
'requests_process': 0.0704050064086914,
'total': 1,
'total_failed': 0,
'total_success': 1}

 # By default, stdout is used to display the stats
 # You can override the SurchargerStats.send method and make what you want with the stats

 # example with a *request" option (auth)
 >>> surcharge = Surcharger(url='', **{'auth': ('user', 'pass')})


    surcharge <url>
        [--numbers=<requests> | --duration=<seconds>]

    -h --help                           Show this screen.
    -v --version                        Show version.
    -m --method=<method>                HTTP method [default: GET].
    -c --concurrency=<clients>          Number of multiple requests to perform at a time [default: 1].
    -n --numbers=<requests>             Number of requests to perform for the benchmarking session [default: 1].
    -D --duration=<seconds>             Duration in seconds. Override the --numbers option [default: 0]
    -T --timeout=<seconds>              You can tell requests to stop waiting for a response after a given number of seconds [default: 2].
    -C --cookies=<cookies>              Send your own cookies. [default: {}]


You can retrieve some informations in the /tmp/surcharge_activity.log log file.

Deprecated - need refactoring

(since 0.8) Overflow is a module of Surcharge. It’s allows to launch several benchmarks dynamically through the network. Overflow uses the zeroMQ library.


This project is lecensed under the MIT license, a copy of which can be found in the LICENSE file.

Project details

Release history Release notifications

This version
History Node


History Node


History Node


History Node


History Node


History Node


History Node


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Filename, size & hash SHA256 hash help File type Python version Upload date
surcharge-0.9.1.tar.gz (13.2 kB) Copy SHA256 hash SHA256 Source None Jan 30, 2015

Supported by

Elastic Elastic Search Pingdom Pingdom Monitoring Google Google BigQuery Sentry Sentry Error logging CloudAMQP CloudAMQP RabbitMQ AWS AWS Cloud computing Fastly Fastly CDN DigiCert DigiCert EV certificate StatusPage StatusPage Status page