Skip to main content

Surcharge

Downloads Latest Version

Issues

  • ProgressBar issues

  • DNS resolution is wrong

Introduction

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.

Requirements

This code has been run on Python 2.7

# install by the setup
greenlet==0.4.0
gevent==0.13.6
requests==1.2.3
progressbar==2.3

Installation

$ pip install surcharge #and enjoy

Tests

Example command

# simple call
$ surcharge http://google.com --numbers 10 --concurrency 5

# standard stdout
Server: gws

URL: http://173.194.67.138:80

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 http://httpbin.org/cookies --cookies "{'ck':1, 'cook':value}"

# call with HTTP Basic Auth
$ surcharge https://secure.test.com --auth "user:password"

# bench during 10 seconds
$ surcharge http://google.com --concurrency 10 --duration 10

Example API

 # see the constructor or the surcharge/cli.py for more details
 >>> from surcharge.core import Surcharger
 >>> surcharge = Surcharger(url='http://google.com')
 >>> 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='http://google.com', **{'auth': ('user', 'pass')})

Usage

Usage:
    surcharge <url>
        [--method=<method>]
        [--concurrency=<clients>]
        [--numbers=<requests> | --duration=<seconds>]
        [--timeout=<seconds>]
        [--cookies=<cookies>]

Options:
    -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: {}]

Logs

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.

License

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

Metadata

Release files for surcharge 0.9.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for surcharge 0.9.1
File Size Uploaded Provenance
surcharge-0.9.1.tar.gz 13.2 kB Without provenance Details

Release files / surcharge-0.9.1.tar.gz

Download URL surcharge-0.9.1.tar.gz
Size 13.2 kB
Tags Source
SHA-256 checksum
How to use checksums
c6b6b02cd3dd17ac42470aa54407955c93ccd0c4ce381c101d2ba108855f78d0
BLAKE2b-256 checksum
How to use checksums
7fdaac7e767dd747ed91b1973536b04556fb330eda170c4af45de4e7ed326b38
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No

Security for surcharge 0.9.1

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page