https://github.com/lujeni/surcharge
Tool for benchmarking your web server like apache benchmark
https://github.com/lujeni/surcharge
Last synced: about 1 year ago
JSON representation
Tool for benchmarking your web server like apache benchmark
- Host: GitHub
- URL: https://github.com/lujeni/surcharge
- Owner: Lujeni
- License: mit
- Created: 2013-03-10T01:01:13.000Z (about 13 years ago)
- Default Branch: master
- Last Pushed: 2019-10-02T22:22:59.000Z (over 6 years ago)
- Last Synced: 2025-04-14T22:55:50.919Z (about 1 year ago)
- Language: Python
- Homepage:
- Size: 66.4 KB
- Stars: 8
- Watchers: 2
- Forks: 1
- Open Issues: 2
-
Metadata Files:
- Readme: README.rst
- License: LICENSE.txt
Awesome Lists containing this project
README
=========
Surcharge
=========
.. image:: https://img.shields.io/pypi/dm/surcharge.svg
:target: https://pypi.python.org/pypi/surcharge/
:alt: Downloads
.. image:: https://img.shields.io/pypi/v/surcharge.svg
:target: https://pypi.python.org/pypi/surcharge/
:alt: 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(, {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
[--method=]
[--concurrency=]
[--numbers= | --duration=]
[--timeout=]
[--cookies=]
Options:
-h --help Show this screen.
-v --version Show version.
-m --method= HTTP method [default: GET].
-c --concurrency= Number of multiple requests to perform at a time [default: 1].
-n --numbers= Number of requests to perform for the benchmarking session [default: 1].
-D --duration= Duration in seconds. Override the --numbers option [default: 0]
-T --timeout= You can tell requests to stop waiting for a response after a given number of seconds [default: 2].
-C --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.