Metadata-Version: 2.1
Name: aioload
Version: 0.4.0
Summary: Load test tool
Home-page: https://github.com/sonic182/aioload
Author: Johanderson Mogollon
Author-email: johanderson@mogollon.com.ve
License: MIT
Keywords: testing loadtest load
Platform: UNKNOWN
Classifier: Development Status :: 5 - Production/Stable
Classifier: Intended Audience :: Developers
Classifier: Topic :: Software Development
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python :: 3.6
Classifier: Programming Language :: Python :: 3.7
Requires-Dist: aiosonic (==0.8.1)
Requires-Dist: chardet (==3.0.4)
Requires-Dist: cycler (==0.10.0)
Requires-Dist: h2 (==4.0.0)
Requires-Dist: hpack (==4.0.0)
Requires-Dist: hyperframe (==6.0.0)
Requires-Dist: kiwisolver (==1.3.1)
Requires-Dist: matplotlib (<=3.1.1)
Requires-Dist: numpy (==1.19.4)
Requires-Dist: pandas (==1.1.4)
Requires-Dist: pillow (==8.0.1)
Requires-Dist: pyparsing (==2.4.7)
Requires-Dist: python-dateutil (==2.8.1)
Requires-Dist: pytz (==2020.4)
Requires-Dist: six (==1.15.0)
Provides-Extra: test
Requires-Dist: aiohttp (==3.7.3) ; extra == 'test'
Requires-Dist: async-timeout (==3.0.1) ; extra == 'test'
Requires-Dist: attrs (==20.3.0) ; extra == 'test'
Requires-Dist: certifi (==2020.11.8) ; extra == 'test'
Requires-Dist: chardet (==3.0.4) ; extra == 'test'
Requires-Dist: coverage (==5.3) ; extra == 'test'
Requires-Dist: coveralls (==2.2.0) ; extra == 'test'
Requires-Dist: docopt (==0.6.2) ; extra == 'test'
Requires-Dist: flake8 (==3.8.4) ; extra == 'test'
Requires-Dist: idna (==2.10) ; extra == 'test'
Requires-Dist: importlib-metadata (==2.0.0) ; extra == 'test'
Requires-Dist: iniconfig (==1.1.1) ; extra == 'test'
Requires-Dist: mccabe (==0.6.1) ; extra == 'test'
Requires-Dist: multidict (==5.0.2) ; extra == 'test'
Requires-Dist: packaging (==20.4) ; extra == 'test'
Requires-Dist: pluggy (==0.13.1) ; extra == 'test'
Requires-Dist: py (==1.9.0) ; extra == 'test'
Requires-Dist: pycodestyle (==2.6.0) ; extra == 'test'
Requires-Dist: pyflakes (==2.2.0) ; extra == 'test'
Requires-Dist: pyparsing (==2.4.7) ; extra == 'test'
Requires-Dist: pytest-aiohttp (==0.3.0) ; extra == 'test'
Requires-Dist: pytest-asyncio (==0.14.0) ; extra == 'test'
Requires-Dist: pytest-cov (==2.10.1) ; extra == 'test'
Requires-Dist: pytest-flake8 (==1.0.6) ; extra == 'test'
Requires-Dist: pytest-mock (==3.3.1) ; extra == 'test'
Requires-Dist: pytest (==6.1.2) ; extra == 'test'
Requires-Dist: requests (==2.25.0) ; extra == 'test'
Requires-Dist: six (==1.15.0) ; extra == 'test'
Requires-Dist: toml (==0.10.2) ; extra == 'test'
Requires-Dist: typing-extensions (==3.7.4.3) ; extra == 'test'
Requires-Dist: urllib3 (==1.26.2) ; extra == 'test'
Requires-Dist: yarl (==1.6.3) ; extra == 'test'
Requires-Dist: zipp (==3.4.0) ; extra == 'test'
Requires-Dist: uvloop (==0.14.0) ; (sys_platform != "win32" and sys_platform != "cygwin" and platform_python_implementation != "pypy") and extra == 'test'

|Azure Build Status| |build status| |coverage status| |pypi package|


AIOload
=======

https://blog.mogollon.com.ve/2020/01/10/load-testing-with-python/

Load test tool using aiosonic_ http client. For drawing charts we
use matplotlib and pandas.

Usage of uvloop is highly recommended.

Requirements
============

-  python>=3.6

Installation
============

.. code:: bash

  pip install aioload
  # optional, highly recommended, doesn't work on Windows
  pip install uvloop

Usage
=====

you need to specify your request in a settings file like **config.ini**

.. code:: ini

   [http]
   sock_read = 30
   sock_connect = 3


   [test]
   # target url for test
   url = http://localhost:8080/api/v1/something
   # methods: get, post, put, delete
   method = post
   #
   # use body for send body in request
   # if body is json, indicate correct header in headers section
   # comment body line if you're doing a get request
   body = '{"foo": "bar"}'

   # query params if needed, this will transform url
   # in something like http://localhost:8080/api/v1/something?token=something
   [params]
   token = something

   # headers if needed
   [headers]
   content-type = application/json

usage example

.. code:: bash

   > aioload -h
   usage: aioload [-h] [-d] [-v] [-n NUMBER_OF_REQUESTS] [-c CONCURRENCY]
                  [--plot]
                  testfile

   positional arguments:
     testfile              Test file to be executed

   optional arguments:
     -h, --help            show this help message and exit
     -d, --debug           true if present
     -v, --verbose         true if present
     -n NUMBER_OF_REQUESTS, --number_of_requests NUMBER_OF_REQUESTS
                           number of requests to be done, default: 100
     -c CONCURRENCY, --concurrency CONCURRENCY
                           concurrency (requests at the same time), default: 10
     --plot                draw charts if present

   > aioload config.ini -n 3000 -c 100 --plot -v
   2019-05-29 17:20:51,662 - __init__:135 - info - 8cf56ded860f41d8a86dab2aed05218f - starting script... -
   2019-05-29 17:20:55,301 - __init__:102 - info - 8cf56ded860f41d8a86dab2aed05218f - done - min=14.54ms; max=212.21ms; mean=109.36ms; req/s=600.0; req/q_std=333.7; stdev=24.65; codes.200=3000; concurrency=100; requests=3000;

.. figure:: ./charts.jpg


You can override aioload runner methods, here_ is an example. Then you should execute the script you made, in this example: ``python sample/dynamic_test.py conf.ini -v``



Note
====

Python has limits, if your applications is crazy fast like this_ crystal server, the test will be limited by aiosonic's client speed.


Contribute
==========

1. fork
2. create a branch ``feature/your_feature``
3. commit - push - pull request

Dependencies are handled with pip-tools_

thanks :)

.. _this: ./sample/server.cr
.. _aiosonic: https://github.com/sonic182/aiosonic
.. _here: https://github.com/sonic182/aioload/blob/master/sample/dynamic_test.py
.. _pip-tools: https://github.com/jazzband/pip-tools
.. |build status| image:: https://travis-ci.org/sonic182/aioload.svg?branch=master
   :target: https://travis-ci.org/sonic182/aioload
.. |coverage status| image:: https://coveralls.io/repos/github/sonic182/aioload/badge.svg?branch=master
   :target: https://coveralls.io/github/sonic182/aioload?branch=master
.. |pypi package| image:: https://badge.fury.io/py/aioload.svg
    :target: https://badge.fury.io/py/aioload
.. |Azure Build Status| image:: https://dev.azure.com/johander-182/aioload/_apis/build/status/sonic182.aioload?branchName=master
   :target: https://dev.azure.com/johander-182/aioload/_build/latest?definitionId=3&branchName=master

