Skip to main content

Yandex-tank tools

Project description

https://travis-ci.org/travis-ci/travis-web.svg?branch=master https://codecov.io/gh/gaainf/tanktools/branch/master/graph/badge.svg https://img.shields.io/badge/python-2.7-blue.svg https://img.shields.io/badge/python-3.5-blue.svg https://img.shields.io/badge/python-3.6-blue.svg https://img.shields.io/pypi/l/tanktools.svg

Yandex-tank prepare phout file with statistics after load testing. tanktools module helps to parse such files and convert to DataFrame. You can use pandas module in manual mode to handle DataFrame or use build-in functions.

Generate Yandex-tank ammo from pcap or har files using pcap2ammo or har2ammo scrips. HTTP requests are extracted completely with headers and body.

So you can:

  • calc quantiles

  • get information about timings, latency, status codes

  • extract requests by timestamp, tag and other columns

  • group and analyze specific data like total/partial RPS, average request/response size

  • calc statistical metrics

  • convert pcap file to ammo

  • convert har file to ammo

  • filter out and modify requests on ammo generating

Installation

pip install tanktools

Examples

Select DataFrame by timestamp

It is possible to parse a part of staistics by time and overal count

from tanktools import phout
flags = {
    'from_date': '2018-01-18 20:09:50.123',
    'to_date'  : '2018-01-18 20:10:00.456',
    'limit': 100
}
data = phout.parse_phout('phout.log', flags)
print("Total count: %d" % phout.size(data))
Total count: 100

Get RPS

data = phout.parse_phout('phout.log')
rps = phout.get_rps(data)

Select 200 OK responses and print latency median

data = phout.parse_phout('phout.log')
selected_http_responses = data[data.proto_code == 200]
print("Latency median for 200 OK: %d" %
      selected_http_responses.latency.median())
Latency median for 200 OK: 3539

pcap2ammo

Convert pcap file to Yandex-tank ammo

pcap2ammo file.pcap
73
GET https://rambler.ru/ HTTP/1.1\r\n
Host: rambler.ru\r\n
Content-Length: 0\r\n\r\n

Count statistics about HTTP requests

pcap2ammo -S file.pcap

Stats:
    total: 1
    complete: 1
    incorrect: 0
    incomplete: 0

Add or delete headers

Applyed for all requests, containing specified headers

pcap2ammo --add-header 'Referer: http://domain.com' --add-header 'X-Ip: 1.1.1.1' file.pcap
pcap2ammo --delete-header 'Content-Length' file.pcap
pcap2ammo --delete-header 'Connection' --add-header 'Connection: keep-alive' file.pcap

Filter TCP/IP packets

pcap2ammo -f 'ip.src==10.10.10.10 and tcp.dport==8080' file.pcap

Filter HTTP packets

pcap2ammo -F '"rambler.ru" in http.uri' file.pcap

You can use logical expressions in filters

pcap2ammo -F '"keep-alive" in http.headers["connection"] or "Keep-alive" in http.headers["connection"]' file.pcap

String functions over HTTP headers

pcap2ammo -F '"keep-alive" in http.headers["connection"].lower()' file.pcap

Use excluding filters also

pcap2ammo -F '"rambler.ru" != http.headers["host"]' file.pcap

har2ammo

Convert pcap file to Yandex-tank ammo

har2ammo file.har
73
GET https://rambler.ru/ HTTP/1.1\r\n
Host: rambler.ru\r\n
Content-Length: 0\r\n\r\n

Count statistics about HTTP requests

har2ammo -S file.har

Stats:
    total: 1
    complete: 1
    incorrect: 0
    incomplete: 0

Add or delete headers

Applyed for all requests, containing specified headers

har2ammo --add-header 'Referer: http://domain.com' --add-header 'X-Ip: 1.1.1.1' file.har
har2ammo --delete-header 'Content-Length' file.har
har2ammo --delete-header 'Connection' --add-header 'Connection: keep-alive' file.har

Filter HTTP packets

har2ammo -F '"rambler.ru" in http.uri' file.har

You can use logical expressions and python functions in filters

har2ammo -F '"keep-alive" in http.headers["connection"] or "Keep-alive" in http.headers["connection"]' file.har
har2ammo -F '"keep-alive" not in http.headers["connection"].lower()' file.har

Please, see more information about filters in pcaper package description.

Project details


Download files

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

Source Distribution

tanktools-1.0.9.tar.gz (10.2 kB view details)

Uploaded Source

Built Distribution

tanktools-1.0.9-py2.py3-none-any.whl (10.1 kB view details)

Uploaded Python 2 Python 3

File details

Details for the file tanktools-1.0.9.tar.gz.

File metadata

  • Download URL: tanktools-1.0.9.tar.gz
  • Upload date:
  • Size: 10.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.11.0 pkginfo/1.4.2 requests/2.19.1 setuptools/40.4.2 requests-toolbelt/0.8.0 tqdm/4.26.0 CPython/2.7.15

File hashes

Hashes for tanktools-1.0.9.tar.gz
Algorithm Hash digest
SHA256 187ea15b7a0f7b49c2d2e8d281adda506d2350d45ec6a8927ef99ca8db55d107
MD5 ef5ff355bae7d5a964040d735c59469d
BLAKE2b-256 ef342b1e3a66b2923ae1fd95af03b86a8ec67c0ad92ab02070a72b71ce94b505

See more details on using hashes here.

File details

Details for the file tanktools-1.0.9-py2.py3-none-any.whl.

File metadata

  • Download URL: tanktools-1.0.9-py2.py3-none-any.whl
  • Upload date:
  • Size: 10.1 kB
  • Tags: Python 2, Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.11.0 pkginfo/1.4.2 requests/2.19.1 setuptools/40.4.2 requests-toolbelt/0.8.0 tqdm/4.26.0 CPython/2.7.15

File hashes

Hashes for tanktools-1.0.9-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 5f372f89693c7e2321e3e54de9a810b1151a81d99d92877a7c978f094e3d8a8d
MD5 c16a091de04be80f206eef6d18c71575
BLAKE2b-256 ed28008100dbd0cd4c64551cb382625dc208d586e3ed4fb34f705994da736682

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page