Load and performance benchmark tool

Overview

Yandex Tank Build Status Gitter

Yandextank has been moved to Python 3.

Latest stable release for Python 2 here.

Yandex.Tank is an extensible open source load testing tool for advanced linux users which is especially good as a part of an automated load testing suite

Quantiles chart example

Main features

  • different load generators supported:
    • Evgeniy Mamchits' phantom is a very fast (100 000+ RPS) shooter written in C++ (default)
    • JMeter is an extendable and widely known one
    • BFG is a Python-based generator that allows you to write your load scenarios in Python
    • experimental Golang generator: pandora
  • performance analytics backend service: Overload. Store and analyze your test results online
  • several ammo formats supported like plain url list or access.log
  • test autostop plugin: stop your test when the results have became obvious and save time
  • customizable and extendable monitoring that works over SSH

Documentation

Get help

Chat with authors and other performance specialists: Gitter

See also

Comments
  • Can't install on Ubuntu Server 12.04

    Can't install on Ubuntu Server 12.04

    Install clear Ubuntu Server 12.04 64-bit

    $ lsb_release -a
    No LSB modules are available.
    Distributor ID: Ubuntu
    Description:    Ubuntu 12.04 LTS
    Release:    12.04
    Codename:   precise
    $ uname -a
    Linux stamm-ubuntu 3.2.0-23-generic #36-Ubuntu SMP Tue Apr 10 20:39:51 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux
    $ cat /etc/apt/sources.list.d/tank.list 
    # Ubuntu Precise
    deb http://mirror.yandex.ru/mirrors/tank common main
    deb http://mirror.yandex.ru/mirrors/tank precise main
    
    $ sudo apt-get update
    Ign http://mirror.yandex.ru common InRelease
    Ign http://mirror.yandex.ru precise InRelease                               
    Ign http://mirror.yandex.ru common Release.gpg                               
    Ign http://mirror.yandex.ru precise Release.gpg                              
    Ign http://mirror.yandex.ru common Release                                   
    Ign http://mirror.yandex.ru precise Release                                  
    Ign http://mirror.yandex.ru common/main TranslationIndex                     
    Ign http://mirror.yandex.ru precise/main TranslationIndex                    
    Err http://mirror.yandex.ru common/main amd64 Packages                       
      404  Not Found
    Err http://mirror.yandex.ru common/main i386 Packages                        
      404  Not Found
    Err http://mirror.yandex.ru precise/main amd64 Packages                      
      404  Not Found
    Err http://mirror.yandex.ru precise/main i386 Packages                       
      404  Not Found
    Ign http://mirror.yandex.ru common/main Translation-en_US                    
    Ign http://mirror.yandex.ru common/main Translation-en                       
    Ign http://mirror.yandex.ru precise/main Translation-en_US                   
    Ign http://mirror.yandex.ru precise/main Translation-en                      
    Ign http://ru.archive.ubuntu.com precise InRelease                           
    Ign http://ru.archive.ubuntu.com precise-updates InRelease                   
    Ign http://ru.archive.ubuntu.com precise-backports InRelease                 
    Hit http://ru.archive.ubuntu.com precise Release.gpg                         
    Hit http://ru.archive.ubuntu.com precise-updates Release.gpg
    Hit http://ru.archive.ubuntu.com precise-backports Release.gpg
    Hit http://ru.archive.ubuntu.com precise Release
    Hit http://ru.archive.ubuntu.com precise-updates Release                            
    Hit http://ru.archive.ubuntu.com precise-backports Release                          
    Hit http://ru.archive.ubuntu.com precise/main Sources                               
    Hit http://ru.archive.ubuntu.com precise/restricted Sources                         
    Hit http://ru.archive.ubuntu.com precise/universe Sources                           
    Hit http://ru.archive.ubuntu.com precise/multiverse Sources                         
    Hit http://ru.archive.ubuntu.com precise/main amd64 Packages                        
    Hit http://ru.archive.ubuntu.com precise/restricted amd64 Packages                  
    Hit http://ru.archive.ubuntu.com precise/universe amd64 Packages                    
    Hit http://ru.archive.ubuntu.com precise/multiverse amd64 Packages                  
    Hit http://ru.archive.ubuntu.com precise/main i386 Packages                         
    Hit http://ru.archive.ubuntu.com precise/restricted i386 Packages                   
    Hit http://ru.archive.ubuntu.com precise/universe i386 Packages                     
    Hit http://ru.archive.ubuntu.com precise/multiverse i386 Packages                   
    Hit http://ru.archive.ubuntu.com precise/main TranslationIndex                      
    Hit http://ru.archive.ubuntu.com precise/multiverse TranslationIndex                
    Hit http://ru.archive.ubuntu.com precise/restricted TranslationIndex                
    Hit http://ru.archive.ubuntu.com precise/universe TranslationIndex                  
    Hit http://ru.archive.ubuntu.com precise-updates/main Sources                       
    Hit http://ru.archive.ubuntu.com precise-updates/restricted Sources                 
    Hit http://ru.archive.ubuntu.com precise-updates/universe Sources                   
    Hit http://ru.archive.ubuntu.com precise-updates/multiverse Sources                 
    Hit http://ru.archive.ubuntu.com precise-updates/main amd64 Packages                
    Hit http://ru.archive.ubuntu.com precise-updates/restricted amd64 Packages          
    Hit http://ru.archive.ubuntu.com precise-updates/universe amd64 Packages
    Hit http://ru.archive.ubuntu.com precise-updates/multiverse amd64 Packages          
    Hit http://ru.archive.ubuntu.com precise-updates/main i386 Packages                 
    Hit http://ru.archive.ubuntu.com precise-updates/restricted i386 Packages           
    Hit http://ru.archive.ubuntu.com precise-updates/universe i386 Packages             
    Hit http://ru.archive.ubuntu.com precise-updates/multiverse i386 Packages           
    Hit http://ru.archive.ubuntu.com precise-updates/main TranslationIndex              
    Hit http://ru.archive.ubuntu.com precise-updates/multiverse TranslationIndex        
    Hit http://ru.archive.ubuntu.com precise-updates/restricted TranslationIndex        
    Hit http://ru.archive.ubuntu.com precise-updates/universe TranslationIndex          
    Hit http://ru.archive.ubuntu.com precise/main Translation-en 
    Hit http://ru.archive.ubuntu.com precise/multiverse Translation-en
    Hit http://ru.archive.ubuntu.com precise/restricted Translation-en
    Hit http://ru.archive.ubuntu.com precise/universe Translation-en
    Hit http://ru.archive.ubuntu.com precise-updates/main Translation-en
    Hit http://ru.archive.ubuntu.com precise-updates/multiverse Translation-en
    Hit http://ru.archive.ubuntu.com precise-updates/restricted Translation-en
    Hit http://ru.archive.ubuntu.com precise-backports/main Sources
    Hit http://ru.archive.ubuntu.com precise-backports/restricted Sources
    Hit http://ru.archive.ubuntu.com precise-backports/universe Sources
    Hit http://ru.archive.ubuntu.com precise-backports/multiverse Sources
    Hit http://ru.archive.ubuntu.com precise-backports/main amd64 Packages
    Hit http://ru.archive.ubuntu.com precise-backports/restricted amd64 Packages
    Hit http://ru.archive.ubuntu.com precise-backports/universe amd64 Packages
    Hit http://ru.archive.ubuntu.com precise-backports/multiverse amd64 Packages
    Hit http://ru.archive.ubuntu.com precise-backports/main i386 Packages
    Hit http://ru.archive.ubuntu.com precise-backports/restricted i386 Packages
    Hit http://ru.archive.ubuntu.com precise-backports/universe i386 Packages
    Hit http://ru.archive.ubuntu.com precise-backports/multiverse i386 Packages
    Hit http://ru.archive.ubuntu.com precise-backports/main TranslationIndex
    Hit http://ru.archive.ubuntu.com precise-backports/multiverse TranslationIndex
    Hit http://ru.archive.ubuntu.com precise-backports/restricted TranslationIndex
    Hit http://ru.archive.ubuntu.com precise-backports/universe TranslationIndex
    Hit http://ru.archive.ubuntu.com precise-updates/universe Translation-en
    Hit http://ru.archive.ubuntu.com precise-backports/main Translation-en
    Hit http://ru.archive.ubuntu.com precise-backports/multiverse Translation-en
    Hit http://ru.archive.ubuntu.com precise-backports/restricted Translation-en
    Hit http://ru.archive.ubuntu.com precise-backports/universe Translation-en
    Ign http://security.ubuntu.com precise-security InRelease    
    Get:1 http://security.ubuntu.com precise-security Release.gpg [198 B]
    Get:2 http://security.ubuntu.com precise-security Release [49.6 kB]
    Get:3 http://security.ubuntu.com precise-security/main Sources [32.4 kB]
    Get:4 http://security.ubuntu.com precise-security/restricted Sources [14 B]
    Get:5 http://security.ubuntu.com precise-security/universe Sources [7,849 B]
    Get:6 http://security.ubuntu.com precise-security/multiverse Sources [713 B]
    Get:7 http://security.ubuntu.com precise-security/main amd64 Packages [118 kB]
    Get:8 http://security.ubuntu.com precise-security/restricted amd64 Packages [14 B]
    Get:9 http://security.ubuntu.com precise-security/universe amd64 Packages [26.6 kB]
    Get:10 http://security.ubuntu.com precise-security/multiverse amd64 Packages [1,155 B]
    Get:11 http://security.ubuntu.com precise-security/main i386 Packages [121 kB]
    Get:12 http://security.ubuntu.com precise-security/restricted i386 Packages [14 B]                                                                                                                                                                                                                                                                                      
    Get:13 http://security.ubuntu.com precise-security/universe i386 Packages [26.8 kB]                                                                                                                                                                                                                                                                                     
    Get:14 http://security.ubuntu.com precise-security/multiverse i386 Packages [1,394 B]                                                                                                                                                                                                                                                                                   
    Hit http://security.ubuntu.com precise-security/main TranslationIndex                                                                                                                                                                                                                                                                                                   
    Hit http://security.ubuntu.com precise-security/multiverse TranslationIndex                                                                                                                                                                                                                                                                                             
    Hit http://security.ubuntu.com precise-security/restricted TranslationIndex                                                                                                                                                                                                                                                                                             
    Hit http://security.ubuntu.com precise-security/universe TranslationIndex                                                                                                                                                                                                                                                                                               
    Hit http://security.ubuntu.com precise-security/main Translation-en                                                                                                                                                                                                                                                                                                     
    Hit http://security.ubuntu.com precise-security/multiverse Translation-en                                                                                                                                                                                                                                                                                               
    Hit http://security.ubuntu.com precise-security/restricted Translation-en                                                                                                                                                                                                                                                                                               
    Hit http://security.ubuntu.com precise-security/universe Translation-en                                                                                                                                                                                                                                                                                                 
    Fetched 385 kB in 7s (52.8 kB/s)                                                                                                                                                                                                                                                                                                                                        
    W: Failed to fetch http://mirror.yandex.ru/mirrors/tank/dists/common/main/binary-amd64/Packages  404  Not Found
    
    W: Failed to fetch http://mirror.yandex.ru/mirrors/tank/dists/common/main/binary-i386/Packages  404  Not Found
    
    W: Failed to fetch http://mirror.yandex.ru/mirrors/tank/dists/precise/main/binary-amd64/Packages  404  Not Found
    
    W: Failed to fetch http://mirror.yandex.ru/mirrors/tank/dists/precise/main/binary-i386/Packages  404  Not Found
    
    E: Some index files failed to download. They have been ignored, or old ones used instead.
    
    $ sudo apt-get install yandex-load-tank-base
    Reading package lists... Done
    Building dependency tree       
    Reading state information... Done
    E: Unable to locate package yandex-load-tank-base
    
    opened by stamm 14
  • I can`t install yandex-tank on ubuntu 16.04 LTS

    I can`t install yandex-tank on ubuntu 16.04 LTS

    I read many any guids, but was i shut without tank i see these text in terminal:

    [email protected]:$ yandex-tank /home/user1/Документы/dir/load.ini 14:54:42 [WARNING] /etc/yandex-tank is not accessible to get configs list 14:54:42 [INFO] Loading configs... 14:54:42 [INFO] Loading plugins... 14:54:42 [WARNING] Deprecated plugin classname: <module 'yandextank.plugins.ResourceCheck' from '/usr/local/lib/python2.7/dist-packages/yandextank/plugins/ResourceCheck/init.pyc'>. Should be 'Plugin' 14:54:42 [WARNING] Deprecated plugin classname: <module 'yandextank.plugins.ShellExec' from '/usr/local/lib/python2.7/dist-packages/yandextank/plugins/ShellExec/init.pyc'>. Should be 'Plugin' 14:54:42 [WARNING] Deprecated plugin classname: <module 'yandextank.plugins.Phantom' from '/usr/local/lib/python2.7/dist-packages/yandextank/plugins/Phantom/init.pyc'>. Should be 'Plugin' 14:54:42 [WARNING] Deprecated plugin classname: <module 'yandextank.plugins.Aggregator' from '/usr/local/lib/python2.7/dist-packages/yandextank/plugins/Aggregator/init.pyc'>. Should be 'Plugin' 14:54:42 [WARNING] Deprecated plugin classname: <module 'yandextank.plugins.Autostop' from '/usr/local/lib/python2.7/dist-packages/yandextank/plugins/Autostop/init.pyc'>. Should be 'Plugin' 14:54:42 [WARNING] Deprecated plugin classname: <module 'yandextank.plugins.Monitoring' from '/usr/local/lib/python2.7/dist-packages/yandextank/plugins/Monitoring/init.pyc'>. Should be 'Plugin' 14:54:42 [WARNING] Deprecated plugin classname: <module 'yandextank.plugins.Console' from '/usr/local/lib/python2.7/dist-packages/yandextank/plugins/Console/init.pyc'>. Should be 'Plugin' 14:54:42 [WARNING] Deprecated plugin classname: <module 'yandextank.plugins.TipsAndTricks' from '/usr/local/lib/python2.7/dist-packages/yandextank/plugins/TipsAndTricks/init.pyc'>. Should be 'Plugin' 14:54:42 [WARNING] Deprecated plugin classname: <module 'yandextank.plugins.RCAssert' from '/usr/local/lib/python2.7/dist-packages/yandextank/plugins/RCAssert/init.pyc'>. Should be 'Plugin' 14:54:42 [INFO] Performing test 14:54:42 [INFO] Configuring plugins... 14:54:42 [WARNING] Failed TCP connection test using [127.0.0.1]:80 14:54:42 [WARNING] Failed TCP connection test using [127.0.0.1]:80 14:54:42 [WARNING] Failed TCP connection test using [127.0.0.1]:80 14:54:42 [INFO] Exception: Traceback (most recent call last): File "/usr/local/lib/python2.7/dist-packages/yandextank/core/consoleworker.py", line 261, in perform_test self.core.plugins_configure() File "/usr/local/lib/python2.7/dist-packages/yandextank/core/tankcore.py", line 133, in plugins_configure plugin.configure() File "/usr/local/lib/python2.7/dist-packages/yandextank/plugins/Phantom/plugin.py", line 92, in configure self.phantom.read_config() File "/usr/local/lib/python2.7/dist-packages/yandextank/plugins/Phantom/utils.py", line 96, in read_config stream.read_config() File "/usr/local/lib/python2.7/dist-packages/yandextank/plugins/Phantom/utils.py", line 265, in read_config self.address, do_test_connect, explicit_port) File "/usr/local/lib/python2.7/dist-packages/yandextank/plugins/Phantom/utils.py", line 428, in resolve raise RuntimeError(msg % address_str) RuntimeError: All connection attempts failed for 127.0.0.1, use phantom.connection_test=0 to disable it

    14:54:42 [ERROR] All connection attempts failed for 127.0.0.1, use phantom.connection_test=0 to disable it 14:54:42 [INFO] Trying to shutdown gracefully... 14:54:42 [INFO] Finishing test... 14:54:42 [ERROR] Failed finishing plugin <yandextank.plugins.Aggregator.plugin.AggregatorPlugin object at 0x7f1c83f8ddd0>: 'AggregatorPlugin' object has no attribute 'drain' 14:54:42 [INFO] Finishing monitoring 14:54:42 [INFO] Post-processing test... 14:54:42 [INFO] Artifacts dir: logs/2016-08-22_14-54-42.9UOmX_ 14:54:42 [INFO] Done graceful shutdown 14:54:42 [INFO] Close allocated resources... 14:54:42 [INFO] Done performing test with code 1

    What can I do from these? I want use yandex-tank...

    P.S. Russian version: Установил яндекс танк в соответствии со всеми гайдами, но всё равно когда я стреляю из танка в терминале сыпятся ошибки. Всё перепробовал, что можно сделать чтобы починить танк? Мне необходимо просто из него пострелять.

    opened by nigthmare17931 11
  • Нет yandex-tank-jmeter в docker hub

    Нет yandex-tank-jmeter в docker hub

    При запуске по документации http://yandextank.readthedocs.io/en/latest/install.html

    docker run \
        -v $(pwd):/var/loadtest \
        -v $SSH_AUTH_SOCK:/ssh-agent -e SSH_AUTH_SOCK=/ssh-agent \
        --net host \
        -it direvius/yandex-tank-jmeter
    

    Получаю ошибку: docker: Error response from daemon: pull access denied for direvius/yandex-tank-jmeter, repository does not exist or may require 'docker login'.

    В docker залогиненный. Поиск по докер хабу, тоже не дал результатов.

    opened by dubrovin 9
  • Лок-файл захватывается до чтения конфигурации

    Лок-файл захватывается до чтения конфигурации

    [email protected] ~ $yandex-tank -f -v
    /usr/lib64/python2.7/site-packages/pandas/core/computation/__init__.py:18: UserWarning: The installed version of numexpr 2.4.4.dev0 is not supported in pandas and will be not be used
    The minimum supported version is 2.4.6
    
      ver=ver, min_ver=_MIN_NUMEXPR_VERSION), UserWarning)
    2017-07-02 05:49:50,626 [ERROR] root cli.py:91	Exception: Lock file present, cannot continue
    2017-07-02 05:49:50,628 [DEBUG] root cli.py:92	Exception: Traceback (most recent call last):
      File "/usr/lib/python2.7/site-packages/yandextank/core/cli.py", line 87, in main
        worker.configure()
      File "/usr/lib/python2.7/site-packages/yandextank/core/consoleworker.py", line 190, in configure
        raise RuntimeError("Lock file present, cannot continue")
    RuntimeError: Lock file present, cannot continue
    
    [1]    22264 exit 1     yandex-tank -f -v
    [email protected] ~ $yandex-tank -f -v -c non-existing.ini
    /usr/lib64/python2.7/site-packages/pandas/core/computation/__init__.py:18: UserWarning: The installed version of numexpr 2.4.4.dev0 is not supported in pandas and will be not be used
    The minimum supported version is 2.4.6
    
      ver=ver, min_ver=_MIN_NUMEXPR_VERSION), UserWarning)
    2017-07-02 05:49:58,689 [ERROR] root cli.py:91	Exception: Lock file present, cannot continue
    2017-07-02 05:49:58,690 [DEBUG] root cli.py:92	Exception: Traceback (most recent call last):
      File "/usr/lib/python2.7/site-packages/yandextank/core/cli.py", line 87, in main
        worker.configure()
      File "/usr/lib/python2.7/site-packages/yandextank/core/consoleworker.py", line 190, in configure
        raise RuntimeError("Lock file present, cannot continue")
    RuntimeError: Lock file present, cannot continue
    

    Пытался запустить танк от простого пользователя - вижу что не захватывается лок-файл. Прописывание в ~/.yandex-tank или местный .ini в секцию [tank] не помогает - локальный .ini-файл даже не обязан существовать.

    opened by evgkrsk 9
  • 404/Console/Overload

    404/Console/Overload

    @iskhakovan "Добрый день. Пробую использовать яндекс танк из контейнера докера. При завершении стрельбы появляется ошибка HTTPError: 404 Client Error: NOT FOUND for url: https://overload.yandex.net/api/job/292/summary.json?api_token="

    2016-08-25 07:32:55,295 [DEBUG] yandextank.plugins.Overload.client client.py:37 Making request to: https://overload.yandex.net/api/job/292/close.json?api_token=&exitcode=23
    2016-08-25 07:32:55,359 [DEBUG] yandextank.plugins.Overload.client client.py:43 Raw response: [{"success": 1}]
    2016-08-25 07:32:55,359 [DEBUG] yandextank.plugins.Overload.client client.py:49 Response: [{u'success': 1}]
    2016-08-25 07:32:55,359 [INFO] yandextank.plugins.Overload.plugin plugin.py:259 Web link: https://overload.yandex.net/292
    2016-08-25 07:32:55,359 [DEBUG] yandextank.core.tankcore tankcore.py:316        Searching for plugin: <class 'yandextank.plugins.Autostop.plugin.AutostopPlugin'>
    2016-08-25 07:32:55,359 [DEBUG] yandextank.plugins.Overload.client client.py:37 Making request to: https://overload.yandex.net/api/job/292/summary.json?api_token=
    2016-08-25 07:32:55,392 [ERROR] yandextank.core.tankcore tankcore.py:223        Failed post-processing plugin <yandextank.plugins.Overload.plugin.Plugin object at 0x7efd8fcd0f10>: 404 Client Error: NOT FOU$
    2016-08-25 07:32:55,395 [DEBUG] yandextank.core.tankcore tankcore.py:225        Failed post-processing plugin: Traceback (most recent call last):
      File "/usr/local/lib/python2.7/dist-packages/yandextank/core/tankcore.py", line 219, in plugins_post_process
        retcode = plugin.post_process(retcode)
      File "/usr/local/lib/python2.7/dist-packages/yandextank/plugins/Overload/plugin.py", line 276, in post_process
        self.jobno, rps, autostop.cause_criterion.explain())
      File "/usr/local/lib/python2.7/dist-packages/yandextank/plugins/Overload/client.py", line 149, in set_imbalance_and_dsc
        res = self.get_job_summary(jobno)
      File "/usr/local/lib/python2.7/dist-packages/yandextank/plugins/Overload/client.py", line 112, in get_job_summary
        + self.api_token)
      File "/usr/local/lib/python2.7/dist-packages/yandextank/plugins/Overload/client.py", line 47, in get
        resp = self.get_raw(addr)
      File "/usr/local/lib/python2.7/dist-packages/yandextank/plugins/Overload/client.py", line 41, in get_raw
        resp.raise_for_status()
      File "/usr/local/lib/python2.7/dist-packages/requests/models.py", line 862, in raise_for_status
        raise HTTPError(http_error_msg, response=self)
    HTTPError: 404 Client Error: NOT FOUND for url: https://overload.yandex.net/api/job/292/summary.json?api_token=
    
    
    opened by doctornkz 9
  • Fixing log collection for monitoring plugin and StepperWrapper.

    Fixing log collection for monitoring plugin and StepperWrapper.

    Monitoring plugin stores configs files like monitoring_default_*.xml in current working directory, and so does StepperWrapper with access.log_*.stpd and access.log_*.stpd_si.json files.

    opened by vovapi 8
  • Fix Monitoring.collector

    Fix Monitoring.collector

    The xml.etree.ElementTree.find/findall method don't need the root element in path.

    // сломал мониторинг при выпиливании lxml, надо было все-таки нормально проверить // test coming soon...

    opened by ei-grad 8
  • First run

    First run

    Use this config, like in example

    load = const(1,20s)
    
    address=87.250.250.203:80
    header_host = ya.ru
    
    header_http = 1.1
    header_connection = close
    uri = /
    

    I get «400 Bad Request» of all http queries.

    I guess it's nginx block queries, maybe need to add some another headers?

    opened by stamm 8
  • Gevent-based BFG worker

    Gevent-based BFG worker

    What this patch lets you to do: New BFG option worker_type. If it's green, the new worker will be used instead of the existing purely multiprocessing one. This worker spawns bfg.instances worker processes, but this number should be kept law (eg. number of CPU cores). Every worker process will spawn bfg.green_threads_per_instance greenlets, which effectively do just the same as workers in the current implementation: wait for tasks and execute.

    I've made a simple tests runner, which uses ultimate BFG with urllib3 requests inside. Here are two test result. I also have telegraf client on my machine (which runs the Yandex.Tank), so you can look at Memory, CPU, context switches, interrupts and other stuff happening on my machine while executing tests.

    1. Original worker, 1200 instances https://overload.yandex.net/10486
    2. Green worker, 4 instances, 300 greenlets per instance https://overload.yandex.net/10484

    As you can see, green worker consumes significantly less memory (~100Mb vs. ~10Gb). Also result on the old workere are very unstable at the beginning, as it takes much time to start all the processes, it consumes CPU and affects existing workers. And I can't use more than 1500 instances with old worker, as it eats all RAM, hits swap heavily and my machine dies slowly :) With green worker I tried 10k greenlets - no problems detected.

    If somebody finds this PR useful and candidate to be merged - I'll update documentation and some other stuff in this PR.

    opened by Flid 7
  • 422 http response show as 71 Protocol error

    422 http response show as 71 Protocol error

    our rest service use for validation exception 422 code, but when we try use yandex-tank for load testing we show response in cli as 71 Protocol error. when we change status code to other (for ex 200) all ok

    And in phout_*.log we see 1445969781.301 #0 25897 79 24 25611 183 25615 97 765 71 0 1445969782.301 #1 6642 67 13 6456 106 6456 97 765 71 0 1445969783.301 #2 6812 82 24 6595 111 6596 97 765 71 0

    how we can show proper status code in our load test?

    load.ini [tank] artifacts_base_dir=../../../trash/ [phantom] address=127.0.0.1 port=80 ;target's port rps_schedule=step(1,5,1,3m) ;load scheme ammofile=ammo.txt

    ammo.txt 89 GET /api/accounts HTTP/1.1 User-agent: Tank Accept: application/json Host: ololo-pew-pew

    opened by ant-hill 7
  • Installing tank on RHEL 6.6 caused ERROR: Import by filename is not supported.

    Installing tank on RHEL 6.6 caused ERROR: Import by filename is not supported.

    Hi, I have tried to install tank on RHEL 6.6 following these instructions 1 and 2. When launching yandex-tank got following exception:

    # yandex-tank
    18:28:52 INFO: No config passed via cmdline, using ./load.ini
    18:28:52 INFO: Loading configs...
    18:28:52 INFO: Loading plugins...
    18:28:52 INFO: Exception: Traceback (most recent call last):
      File "/usr/lib/python2.6/site-packages/yandextank/core/consoleworker.py", line 224, in configure
        self.core.load_plugins()
      File "/usr/lib/python2.6/site-packages/yandextank/core/tankcore.py", line 242, in load_plugins
        plugin = il.import_module(plugin_path)
      File "/usr/lib/python2.6/site-packages/importlib/__init__.py", line 37, in import_module
        __import__(name)
    ImportError: Import by filename is not supported.
    18:28:52 ERROR: Import by filename is not supported.
    18:28:52 ERROR: Exception: Import by filename is not supported.
    

    I'm not good either in linux nor python so will be grateful for the help

    My load.ini

    [tank]
    plugin_web=Tank/Plugins/WebOnline.py
    plugin_console=Tank/Plugins/ConsoleOnline.py
    plugin_ShellExec=Tank/Plugins/ShellExec.py
    plugin_phantom=Tank/Plugins/Phantom.py
    plugin_aggreg=Tank/Plugins/Aggregator.py
    
    [phantom]
    address=google.ru
    port=80
    rps_schedule=const(2, 2m)
    headers = [Host: google.ru] [Connection: close] [Bloody: yes]
    uris=/
    
    [web]
    port = 80
    interval = 5
    manualstop = 1
    

    Without [tank] section it works with no errors.

    opened by RocketRaccoon 7
  • malloc: Cannot allocate memory

    malloc: Cannot allocate memory

    Hi folks,

    I'm trying to load test a high response time API (~15s) so need to keep a lot of connections. When phantom instances: are 30k and higher, tank starts to fail with a lot of malloc errors:

    2022-12-05 17:47:26.057 +0000 [error] [benchmark_io 32714] mprotect: Cannot allocate memory
    2022-12-05 17:47:26.058 +0000 [error] [benchmark_io 32715] mmap: Cannot allocate memory
    2022-12-05 17:47:26.058 +0000 [error] [benchmark_io 32716] mmap: Cannot allocate memory
    2022-12-05 17:47:26.058 +0000 [error] [benchmark_io 32717] mmap: Cannot allocate memory
    2022-12-05 17:47:26.058 +0000 [error] [benchmark_io 32718] mmap: Cannot allocate memory
    

    Running the latest master version with docker. The machine has a lot of available memory.

    Are there any limitations to number of instances? Can this me remedied?

    opened by IvanVas 0
  • Update Docker build to avoid OpenSSL problems

    Update Docker build to avoid OpenSSL problems

    On the latest Debian, the tank run resulted in the error below. This image addition fixes it.

    Traceback (most recent call last):
      File "/usr/local/bin/yandex-tank", line 5, in <module>
        from yandextank.core.cli import main
      File "/usr/local/lib/python3.8/dist-packages/yandextank/core/__init__.py", line 4, in <module>
        from .tankcore import TankCore  # noqa
      File "/usr/local/lib/python3.8/dist-packages/yandextank/core/tankcore.py", line 25, in <module>
        from yandextank.plugins.DataUploader.client import LPRequisites
      File "/usr/local/lib/python3.8/dist-packages/yandextank/plugins/DataUploader/__init__.py", line 1, in <module>
        from .plugin import Plugin  # noqa
      File "/usr/local/lib/python3.8/dist-packages/yandextank/plugins/DataUploader/plugin.py", line 18, in <module>
        import requests
      File "/usr/lib/python3/dist-packages/requests/__init__.py", line 95, in <module>
        from urllib3.contrib import pyopenssl
      File "/usr/lib/python3/dist-packages/urllib3/contrib/pyopenssl.py", line 46, in <module>
        import OpenSSL.SSL
      File "/usr/local/lib/python3.8/dist-packages/OpenSSL/__init__.py", line 8, in <module>
        from OpenSSL import crypto, SSL
      File "/usr/local/lib/python3.8/dist-packages/OpenSSL/crypto.py", line 1550, in <module>
        class X509StoreFlags(object):
      File "/usr/local/lib/python3.8/dist-packages/OpenSSL/crypto.py", line 1570, in X509StoreFlags
        CB_ISSUER_CHECK = _lib.X509_V_FLAG_CB_ISSUER_CHECK
    AttributeError: module 'lib' has no attribute 'X509_V_FLAG_CB_ISSUER_CHECK'
    
    opened by IvanVas 0
  • JMeter tests cannot started

    JMeter tests cannot started

    After some interface changes in TimeChopper the JMeter tests starts failing.

    <class 'TypeError'>: object of type 'generator' has no len() self.recent_ts = [0] * len(self.sources)

    TimeChopper(self._read_stat_queue(), 3)) TypeError: __init__() takes 2 positional arguments but 3 were given

    opened by gnomeby 1
  • Jmeter does not connect when yandex-tank starts

    Jmeter does not connect when yandex-tank starts

    When I run yandex-tank -c load.yaml the terminal displays the following error:

    Traceback (most recent call last):
      File "/usr/lib/python3.8/threading.py", line 932, in _bootstrap_inner
        self.run()
      File "/usr/local/lib/python3.8/dist-packages/yandextank/core/consoleworker.py", line 197, in run
        self.retcode = self.core.wait_for_finish()
      File "/usr/local/lib/python3.8/dist-packages/yandextank/common/util.py", line 845, in __exit__
        retcode = self.worker.core.plugins_end_test(retcode)
      File "/usr/local/lib/python3.8/dist-packages/yandextank/core/tankcore.py", line 315, in plugins_end_test
        retcode = self.job.aggregator.end_test(retcode)
      File "/usr/local/lib/python3.8/dist-packages/yandextank/aggregator/tank_aggregator.py", line 124, in end_test
        retcode = self.generator.end_test(retcode)
      File "/usr/local/lib/python3.8/dist-packages/yandextank/plugins/JMeter/plugin.py", line 168, in end_test
        self.reader.close()
    AttributeError: 'NoneType' object has no attribute 'close'
    

    I am using Jmeter + Yandex Tank. In Jmeter a simple HTTP Request to a server.

    Yandex Tank load.yaml:

    overload:
            enabled: true
            package: yandextank.plugins.DataUploader
            token_file: token.txt
            job_name: Y-Tank Stress Test
            job_dsc: Test load
    
    
    jmeter:
            enabled: true
            package: yandextank.plugins.JMeter
            jmx: test.jmx
            jmeter_path: /home/dev/programs/apache-jmeter-5.4.1/bin/jmeter
            buffered_seconds: 0
            ext_log: none
            variables:
                    protocol: https
                    host: server.com
                    path: /
                    thread_rpm: 5
                    loops: 1
    
    
    phantom:
            enabled: false
    
    console:
            enabled: true
    
    telegraf:
            enabled: false
    
    opened by DevidzeIL 0
  • Get 'No JSON object could be decoded' when running tank with overload plugin

    Get 'No JSON object could be decoded' when running tank with overload plugin

    Get next error:

    15:49:14 [INFO] Preparing test...
    15:49:14 [INFO] Checking tank resources...
    15:49:14 [INFO] Using OVERLOAD backend
    15:49:14 [INFO] Read authentication token from /var/loadtest/token.txt, token length is 32 bytes
    15:49:14 [INFO] Proxy not set
    15:49:14 [INFO] Detected target: somehost.com
    15:49:14 [WARNING] Failed to create job on lunapark
    15:49:14 [WARNING] ValueError('No JSON object could be decoded',)
    15:49:14 [ERROR] 
    15:49:14 [ERROR] Failed to connect to Lunapark, disabling DataUploader
    

    When run yandex tank inside docker with overload integration.

    Here's the config

    overload:
      enabled: true
      operator: Kirill
      package: yandextank.plugins.DataUploader
      token_file: "/var/loadtest/token.txt"
      job_name: Test
      job_dsc: Basic load scenario
    

    And a run command:

    docker run \
        -v $(pwd):/var/loadtest \
        -v $SSH_AUTH_SOCK:/ssh-agent -e SSH_AUTH_SOCK=/ssh-agent \
        --net host \
        -it direvius/yandex-tank
    
    opened by Kirill380 0
Releases(Python2)
Owner
Yandex
Yandex open source projects and technologies
Yandex
Donors data of Tamil Nadu Chief Ministers Relief Fund scrapped from https://ereceipt.tn.gov.in/cmprf/Interface/CMPRF/MonthWiseReport

Tamil Nadu Chief Minister's Relief Fund Donors Scrapped data from https://ereceipt.tn.gov.in/cmprf/Interface/CMPRF/MonthWiseReport Scrapper scrapper.p

Arunmozhi 5 May 18, 2021
Using openpyxl in Python, performed following task

Python-Automation-with-openpyxl Using openpyxl in Python, performed following tasks on an Excel Sheet containing Product Suppliers along with their pr

1 Apr 06, 2022
The evaluator covering all of the metrics required by tasks within the DUE Benchmark.

DUE Evaluator The repository contains the evaluator covering all of the metrics required by tasks within the DUE Benchmark, i.e., set-based F1 (for KI

DUE Benchmark 4 Jan 21, 2022
A simple tool to test internet stability.

pingtest Description A personal project for testing internet stability, intended for use in Linux and Windows.

chris 0 Oct 17, 2021
Minimal example of getting Django + PyTest running on GitHub Actions

Minimal Django + Pytest + GitHub Actions example This minimal example shows you how you can runs pytest on your Django app on every commit using GitHu

Matt Segal 5 Sep 19, 2022
The definitive testing tool for Python. Born under the banner of Behavior Driven Development (BDD).

mamba: the definitive test runner for Python mamba is the definitive test runner for Python. Born under the banner of behavior-driven development. Ins

Néstor Salceda 502 Dec 30, 2022
Test for generating stylized circuit traces from images

I test of an image processing idea to take an image and make neat circuit board art automatically. Inspired by this twitter post by @JackRhysider

Miller Hooks 3 Dec 12, 2022
a plugin for py.test that changes the default look and feel of py.test (e.g. progressbar, show tests that fail instantly)

pytest-sugar pytest-sugar is a plugin for pytest that shows failures and errors instantly and shows a progress bar. Requirements You will need the fol

Teemu 963 Dec 28, 2022
Sixpack is a language-agnostic a/b-testing framework

Sixpack Sixpack is a framework to enable A/B testing across multiple programming languages. It does this by exposing a simple API for client libraries

1.7k Dec 24, 2022
自动化爬取并自动测试所有swagger-ui.html显示的接口

swagger-hack 在测试中偶尔会碰到swagger泄露 常见的泄露如图: 有的泄露接口特别多,每一个都手动去试根本试不过来 于是用python写了个脚本自动爬取所有接口,配置好传参发包访问 原理是首先抓取http://url/swagger-resources 获取到有哪些标准及对应的文档地

jayus 534 Dec 29, 2022
splinter - python test framework for web applications

splinter - python tool for testing web applications splinter is an open source tool for testing web applications using Python. It lets you automate br

Cobra Team 2.6k Dec 27, 2022
Cornell record & replay mock server

Cornell: record & replay mock server Cornell makes it dead simple, via its record and replay features to perform end-to-end testing in a fast and isol

HiredScoreLabs 134 Sep 15, 2022
Subprocesses for Humans 2.0.

Delegator.py — Subprocesses for Humans 2.0 Delegator.py is a simple library for dealing with subprocesses, inspired by both envoy and pexpect (in fact

Amit Tripathi 1.6k Jan 04, 2023
Fills out the container extension form automatically. (Specific to IIT Ropar)

automated_container_extension Fills out the container extension form automatically. (Specific to IIT Ropar) Download the chrome driver from the websit

Abhishek Singh Sambyal 1 Dec 24, 2021
Show coverage stats online via coveralls.io

Coveralls for Python Test Status: Version Info: Compatibility: Misc: coveralls.io is a service for publishing your coverage stats online. This package

Kevin James 499 Dec 28, 2022
Implement unittest, removing all global variable and returning values

Implement unittest, removing all global variable and returning values

Placide 1 Nov 01, 2021
BDD library for the py.test runner

BDD library for the py.test runner pytest-bdd implements a subset of the Gherkin language to enable automating project requirements testing and to fac

pytest-dev 1.1k Jan 09, 2023
A library for generating fake data and populating database tables.

Knockoff Factory A library for generating mock data and creating database fixtures that can be used for unit testing. Table of content Installation Ch

Nike Inc. 30 Sep 23, 2022
Code for "SUGAR: Subgraph Neural Network with Reinforcement Pooling and Self-Supervised Mutual Information Mechanism"

SUGAR Code for "SUGAR: Subgraph Neural Network with Reinforcement Pooling and Self-Supervised Mutual Information Mechanism" Overview train.py: the cor

41 Nov 08, 2022
A pytest plugin, that enables you to test your code that relies on a running PostgreSQL Database

This is a pytest plugin, that enables you to test your code that relies on a running PostgreSQL Database. It allows you to specify fixtures for PostgreSQL process and client.

Clearcode 252 Dec 21, 2022