Where communities thrive


  • Join over 1.5M+ people
  • Join over 100K+ communities
  • Free without limits
  • Create your own community
People
Repo info
Activity
  • Jul 22 11:44
    zifter closed #858
  • Jul 22 09:24
    szypulka commented #858
  • Jul 22 09:05
    zifter commented #858
  • Jul 02 08:48
    zifter commented #858
  • Jun 28 13:54
    sashayakovtseva opened #860
  • Jun 16 11:17
    dacdodinh99 opened #859
  • Apr 09 16:07
    zifter opened #858
  • Feb 16 12:02
    k-morozov commented #855
  • Feb 12 13:40
    zhangguanzhang commented #845
  • Jan 27 19:50
    megazazik closed #787
  • Dec 29 2020 10:11
    sour59 opened #857
  • Dec 21 2020 04:55
    Taalaibekova31 opened #856
  • Dec 11 2020 10:27
    popov-r commented #773
  • Dec 11 2020 10:26
    popov-r commented #773
  • Dec 10 2020 10:51
    JavaUnchained opened #855
  • Dec 02 2020 21:44

    fomars on master

    Update README.md (compare)

  • Dec 02 2020 21:40
    fomars closed #852
  • Dec 02 2020 19:25
    fomars synchronize #852
  • Dec 02 2020 19:25

    fomars on master

    Merge pull request #839 from ya… add options for influxdb upload… add documentation for ssl and p… and 3 more (compare)

  • Dec 01 2020 12:41
    fomars synchronize #852
GolivetsAndreu
@GolivetsAndreu
Подскажите в чем может быть проблема?
Ivan Tolstosheyev
@itroot

@DannyMartyn

Привет! Помогите, пожалуйста, столкнулся с такой проблемой:
alt
title

Привет! Overload does not support fractional loadschemes yet у тебя получалась из-за float? У меня это происходит из-за выставления составной схемы нагрузки в пандоре:

        rps:
          - {duration: 10s, type: const, ops: 5}
          - {duration: 10s, type: const, ops: 1}
konovalovvlad2
@konovalovvlad2
Все привет. Подскажите, как можно отправлять json данные POST? В доках не нашел
Plombirius
@Plombirius
@konovalovvlad2 использовать jmeter в качестве генератора нагрузки?
Я тут туплю с танком, где можно изменить хост для yandex-tank и yandex-tank-check-ssh c example.org на нужный мне? я слеп и в документации не нашел.
Andrey Filatov
@afilatov

@konovalovvlad2

Все привет. Подскажите, как можно отправлять json данные POST? В доках не нашел

Если в формате uripost, то примерно так

[Host: example.org]
[Content-type: application/json]
[User-Agent: Tank]
18 /route
{"simple": "json"}
26 /route tag1
{"simple": ["json", "#2"]}

Если в формате phantom, то как-то так (только его лучше генераторами генерить):

145 
POST /route HTTP/1.1
Host: example.org
Connection: Keep-Alive
Content-Length: 26
Content-Type: application/json

{"simple": ["json", "#2"]}
Andrey Filatov
@afilatov

@Plombirius

Я тут туплю с танком, где можно изменить хост для yandex-tank и yandex-tank-check-ssh c example.org на нужный мне? я слеп и в документации не нашел.

Возможно неправильно понял вопрос (нужно чуть больше контекста), но у yandex-tank-check-ssh есть аргумент

'-e', '--endpoint', default='example.org', help='which host to try'

https://github.com/yandex/yandex-tank/blob/4fe054cc0c7f1f42d56e34d1c05a44075cdef78f/yandextank/common/util.py#L124

Plombirius
@Plombirius
@afilatov спасибо! именно это и спрашивал. Не догадался как то в коде аргументы поискать.
konovalovvlad2
@konovalovvlad2

@afilatov спасибо большое. У меня вопрос. Вот мой ammo.txt

[Content-Type: application/json]

240 /api/v1/addUserTest
{
   "api_key":"2081b837b451ea0ad723fbe8d2aca5",
   "userData": {
       "email": "",
       "username": "",
       "plainPassword": {
          "first":"123",
          "second":"123"
       },
       "nickname": "sample_nickname",
   }
}

Мне надо сгенерерить таких записей в этом файле около 5000 или 10000, не важно. Мне важно чтобы email и username менялись при каждом обстреле сервера. Т.е. если у меня в конфиге const (10, 1m), то мне надо 600 таких записей с уникальными email и username . Как мне его сгенерить ?

phantom:
  address: host:443
  ammo_type: uripost
  ammofile: config/api_add_user.txt
  load_profile:
    load_type: rps
    schedule: const(10,1m)
  ssl: true
console:
  enabled: true
telegraf:
  enabled: false
QABiZone
@QABiZone
коллеги - можно ли послать в phantom HTTPS - запросы ?
Alex A Linch
@ALEXLINCHEVSKY
@Taurreason у меня пока нет такого примера
Timur Torubarov
@nettorta
@QABiZone
phantom:
  ssl: true
konovalovvlad2
@konovalovvlad2
Привет коллеги. У вопрос такой. Допустим у меня в *.txt файле есть такие снаряды. В данном примере 3. Вопрос: перед обстрелом он считывает все три строки или же перед каждой стрельбой берет новые данные из этого файла?
70 /api/v1/deleteUser
{
  "api_key":"2081b837b451ea0ad723fbe8d2aca5",
  "user_id": 999999
}

97 /api/v1/authUser
{
  "api_key":"2081b837b451ea0ad723fbe8d2aca5",
  "username": "adminuser",
  "password": "123"
}

87 /api/v1/dataUser
{
  "api_key":"2081b837b451ea0ad723fbe8d2aca5",
  "user_id": 1,
  "filter": "general"
}
Timur Torubarov
@nettorta
@konovalovvlad2 перед каждым запуском танк генерирует из этого файла длинный файл со всеми запросами, которые будут использованы в тесте. Если у вас будет расписание 500 рпс на 2 часа - танк сгенерит файл с 3600000 запросами, которые будут сгенерированы исходя из файла с патронами, который вы указали. Танк читает из файла патроны сверху вниз, при достижении конца файла начинает читать его заново.
Поэтому ответ на оба ваших вопроса - да. Все три строки и перед каждой стрельбой новые данные из этого файла, если файл вдруг изменился.
Vlad Kvetkin
@VladKvetkin

Всем привет. Возникла такая проблема.
Запускаю танк с JMeter. Тестирование работает, запросы отправляются. Но при завершении зависает на стадии "Stopping load generator and aggregator".

В tank.log последняя запись

2020-01-28 11:07:02,289 [DEBUG] yandextank.aggregator.tank_aggregator tank_aggregator.py:126 Waiting for gun drain to finish

Конфиг танка:

console:
  enabled: true
telegraf:
  enabled: false
overload:
  enabled: true
  package: yandextank.plugins.DataUploader
  api_address: https://overload.yandex.net
  token_file: token.txt
  job_name: jmeter_test
  job_dsc: jmeter_test
jmeter:
  enabled: true
  package: yandextank.plugins.JMeter
  jmeter_path: /usr/local/apache-jmeter-3.3/bin/jmeter
  jmx: test_jmeter.jmx
phantom:
  enabled: false

В чем может быть проблема ?

Oleg Gumbar
@Brightside56_gitlab
Я верно понимаю, JMeter поддерживает только ammo в jmx?
Спасибо
Andrey Radygin
@andreyradygin
Коллеги, нужна подсказка.
Натравливаю танк на цель, делаю нагрузку const rps, задаю например 600рпс, но больше 300 танк не выдает вообще. Физически - ни во что не упирается, ни в сеть, ни в диски и тд. НО, приложение на 300рпс начинает сильно таймаутить и еррорить, около 20% ошибок и общее время ответа подскакивает.
Так вот, у меня ощущение, что танк искусственно останавливает наращивание рпс из себя, если на каком-то уровне получает определенный процент ошибок и/или медленных ответов.
Наблюдал ли кто такое поведение? Чем это объяснить?
При этом из того же места, в ту же цель, но на статическое приложение, выдает и 15к рпс, без проблем, и соответственно нет ошибок и медленных ответов.
Alex A Linch
@ALEXLINCHEVSKY
@andreyradygin это странно. У меня в статике по динамическим запросам более 1000 рпс стреляет. Хотя упирается в слабеньким генераторе на 20 000 рпс. Иногда достреливал до 24 000 рпс.
Таймауты надо настраивать, по умолчанию у танка стоит 11 секунд ожидания. Я когда свой сервис проверял сначала не поня, почему у таймауты полка , потом перенастроил и некоторые части выдавали latency в 81 секунду. Это было важно посмотреть на связках приложений.
Пробуй и настраивай. Я сейчас пока использую 120 секунд. И пока одним генератором. Если сервис выдержит придется подключать кластер генераторов через gattling_ip компонент
Andrey Filatov
@afilatov
@andreyradygin Посмотрите на кол-во инстансов, которые использует танк в ходе вашего теста. С высокой вероятностью при деградации вашего приложения танк упирается в дефолтный лимит в 1000 инстансов. При этом при среднем времени ответа приложения около 3 секунд танк из 1000 инстансов будет способен выдавать около 300рпс. Чтобы танк не упирался в кол-во инстансов, их можно увеличить в конфиге в секции phantom (https://yandextank.readthedocs.io/en/latest/config_reference.html#id20), например, ориентировочно в соответствии с той же формулой Литтла <Кол-во инстансов> = <Допустимое время ответа сервиса/таймаут, сек> * <Нужный RPS>. Если получаемое кол-во инстансов выходит слишком большим (десятки тысяч), то здесь имеет смысл подумать о нагрузке с нескольких машин
Andrey Radygin
@andreyradygin
Спасибо за инфу! Проверю.
Я тоже что-то такое подозревал про количество инстансов.
И получается, что если приложение сильно начинает тупить - больше 5 секунд на ответ, то и увеличение инстансов может не слишком помочь?
Andrey Filatov
@afilatov
@andreyradygin Если вы хотите добиться того, чтобы в ходе теста танк смог выдать указанное в расписании кол-во RPS и при этом для тестируемого приложения допустимы долгие ответы, то увеличение кол-ва инстансов по указанной выше прикидочной формуле в этом должно помочь. При этом я бы рекомендовал при сильно больших значениях кол-ва инстансов наблюдать за утилизацией ресурсов и ошибками на машинке, с которой подается нагрузка. Можно еще дополнительно понизить таймаут с дефолтных 11 секунд до максимально допустимых у вас, например, 5 секунд, чтобы инстансы быстрее освобождались, но это не всегда допустимо.
Alexandr Popov
@Alex2ndr
Привет!
А авторизация на overload совсем сломалась?
Оно там пытается попасть за каким-то js на login.persona.org...
Plombirius
@Plombirius

Коллеги, а подскажите в какую сторону копать, прикрутил telegraf, к хосту он коннектится загружает агент, потом в консоли показывается что monitoring is online:, но никаких измеряемых параметров не показывает.
При этом в файле agent_xxx.xxx.xxx.xxx.rawdata данные есть
Но в консоль ничего не выводится

phantom:
  enabled: false
jmeter:
  enabled: true
  jmx: /opt/jmeter/testplan/XXX.jmx
  args:
  jmeter_path: /opt/jmeter/apache-jmeter-5.0/bin/jmeter
  jmeter_ver: 5.0
  ext_log: all
console:
  enabled: true
telegraf:
  enabled: true
  package: yandextank.plugins.Telegraf
  config: /home/jtank/yt_mon_teleg

конфиг мониторинга:

<Monitoring>
        <Host address="xxx.xxx.xxx.xxx" interval="1">
                <CPU/> <Memory/>
        </Host>
</Monitoring>
Dmitry Belyavtsev
@vk26
Добрый день! А как прописать в конфиге танка, чтобы в uris прописывать рандомное значение? Что-то типа
/users/search?name={random_string}
Andrey Filatov
@afilatov

@vk26 Если говорить про связку Yandex.Tank + phantom, то она не поддерживает динамические значения в url и телах запросов и изменение запросов в ходе выполнения теста. Вы должны до начала теста сгенерировать статичную ленту запросов с подставленными "рандомными" значениями вида

 /users/search?name=random_string1
 /users/search?name=random_string2
 /users/search?name=random_string3
 /users/search?name=random_string4
 ....

и указать ее в конфигурации теста.
При этом надо учитывать, что полученная лента является все же статичной, поэтому при повторных запусках теста с этой лентой будут прогоняться одни и те же запросы, да и в рамках одного теста при недостаточной длине ленты она может проигрываться много раз. Это может достаточно сильно влиять на результаты тестов, когда тестируемая система использует, например, кеширование результатов запросов или механизмы идемпотентных операции. Частично это можно решить бОльшим размером ленты (кстати, танк поддерживает сжатые gzip ленты) и генерацией новой ленты перед очередным запуском теста. Но все это несколько усложняет процесс тестирования.

Orkhan
@orihomie
Здравствуйте, подскажите, пожалуйста - где можно найти информацию по графикам из результатов запуска нагрузки? Мне нужно понимать - как имплементировать эти самые графики.
winkool
@winkool
Добрый день, прошу прощения за глупый вопрос, но может кто-то скинуть ссылку на инструкцию как запустить танк на windows?
victorkaplunov
@victorkaplunov
@winkool в докер-котейнере запускайте. Для винды даже графический клиент есть.
winkool
@winkool
танк упал что-ли?
GolivetsAndreu
@GolivetsAndreu
Что с overload?
Plombirius
@Plombirius
Схватил следующую ошибку когда складывал данные в инфлюкс, если просто выводить на консоль ошибки нет:
16:33:15 [INFO] Artifacts dir: /home/jtank/logs/2020-02-05_16-33-03.234103
16:33:27 [ERROR] Test interrupted:
<class 'influxdb.exceptions.InfluxDBClientError'>: 400: {"error":"partial write: field type conflict: input field \"custom:cpu-cpu-total_usage_iowait\" on measurement \"monitoring\" is type float, already exists as type integer dropped=1"}
  File "/usr/lib/python2.7/site-packages/yandextank/core/consoleworker.py", line 386, in run
    self.retcode = self.core.wait_for_finish()
  File "/usr/lib/python2.7/site-packages/yandextank/core/tankcore.py", line 290, in wait_for_finish
    retcode = plugin.is_test_finished()
  File "/usr/lib/python2.7/site-packages/yandextank/plugins/Telegraf/plugin.py", line 227, in is_test_finished
    data_len = self.monitoring.poll()
  File "/usr/lib/python2.7/site-packages/yandextank/plugins/Telegraf/collector.py", line 119, in poll
    self.send_collected_data()
  File "/usr/lib/python2.7/site-packages/yandextank/plugins/Telegraf/collector.py", line 149, in send_collected_data
    listener.monitoring_data(copy.deepcopy(data))
  File "/usr/lib/python2.7/site-packages/yandextank/plugins/InfluxUploader/plugin.py", line 82, in monitoring_data
    for chunk in chop(data_list, self.get_option("chunk_size"))
  File "/usr/lib/python2.7/site-packages/yandextank/plugins/InfluxUploader/plugin.py", line 88, in _send_monitoring
    's'
  File "/usr/lib/python2.7/site-packages/influxdb/client.py", line 530, in write_points
    consistency=consistency)
  File "/usr/lib/python2.7/site-packages/influxdb/client.py", line 598, in _write_points
    protocol=protocol
  File "/usr/lib/python2.7/site-packages/influxdb/client.py", line 343, in write
    headers=headers
nifantova
@nifantova
Добрый вечер. Использую bfg для нагрузочного тестирования, при относительно небольшом rps получаю следующую ошибку: [ERROR] Results full. Data corrupted
В чем может быть дело?
winkool
@winkool
подскажите пожалуйста при попытке запуска теста из примера BFG выдаёт такую ошибку "Scenario not found: default"
load.yaml
core:
lock_dir: .
phantom:
enabled: false
bfg:
enabled: true
instances: 10
ammofile: ammo.txt
gun_config:
class_name: LoadTest
module_path: ./
module_name: bfg
init_param: Hello
gun_type: ultimate
load_profile:
load_type: rps
schedule: const(1, 30s)
uploader:
enabled: true
package: yandextank.plugins.DataUploader
api_address: https://overload.yandex.net
token_file: token.txt
console:
enabled: true # enable console output
telegraf:
enabled: false # let's disable telegraf monitoring for the first time
ammo.txt и файл bfg.py как в примере https://yandextank.readthedocs.io/en/latest/core_and_modules.html#bfg
Plombirius
@Plombirius
А почему я получаю неизвестные поля на grafana_dashboard & grafana_root на всякий случай, делал копи паст из документации, но ошибка сохранилась:
jtank@TestingGround ~]$ yandex-tank -c ./yandex_tank_jmeter_influx.yaml
No handlers could be found for logger "netort.resource"
14:40:02 [ERROR] Config validation error:
Validation error:
influx:
  grafana_dashboard:
  - unknown field
  grafana_root:
  - unknown field
Andrey Filatov
@afilatov
@Plombirius Какой версией Танка вы пользуетесь? Если 1.12.х, то велика вероятность, что полей графаны в конфиге плагина influx уже нет из-за его переписывания в рамках этого коммита (https://github.com/yandex/yandex-tank/commit/5ff33778e930e45ca996f1f63386896fd9015e8c#diff-a206906e042101779559a43db3a6a968), что отражено в документации, которая в репозитории (https://github.com/yandex/yandex-tank/blob/develop/docs/core_and_modules.rst#influxdb ). Попробуйте, версию 1.11.x, там эти параметры есть
Timur Torubarov
@nettorta
@Plombirius просто уберите эти поля, они не имеют никакого смысла в этом плагине
zaborovsky91
@zaborovsky91
Подскажите пожалуйста, я новичок в танке, нужна миним. конфигурация, которая поможет определить максимальное кол-во запросов, которое выдержит сервер при обращение к определенным 3 страницам, и хотя бы в кратце куда/ что смотреть на какие графики?
leha0794
@leha0794

Всем привет, может кто скинуть готовый-рабочий пример, хотя бы с одним запросом, без всяких мониторингов (хочу просто запустить и посмотреть, может пойму так, чем через туториал)
Что-то типа этого (пытался на juice-shop.herokuapp.com проверить)
load.yaml

phantom:
  address: 52.209.151.97:443
  ssl: true
  load_profile:
    load_type: rps
    schedule: const(1, 7s)
  ammofile: /var/loadtest/ammo_local.txt
  ammo_type: uri

ammo_local.txt

[Host: 52.209.151.97]
[Connection: close]
[User-Agent: Tank]
/rest/products/search?q=

Я как только ни пробовал, в ответ получаю 502, 500, 404, 400, но ни как не 200

guard43ru
@guard43ru

Всем привет, yandex-tank не поддерживает HTTPS SNI?

пересобрал контейнер на ubuntu:bionic (OpenSSL 1.1.1), s_client подключается без проблем,
a у танка ошибка SSL error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure (71 Protocol error)

guard43ru
@guard43ru
вобщем поменял phantom на jmeter и все заработало
Alex A Linch
@ALEXLINCHEVSKY

@leha0794 тут немного не верно созданы файлы. в файле ammo_local.txt не должно быть header-ов. их надо прописывать в load.yaml. сам же файл ammo_local.txt должен содержать оставшуюся часть запроса без домена.
load.yaml

phantom:
  address: 52.209.151.97:443
  ssl: true
  load_profile:
    load_type: rps
    schedule: const(1, 7s)
  ammofile: /var/loadtest/ammo_local.txt
  ammo_type: uri
  header_http: '1.1'
  headers:
      - "[Host: 52.209.151.97]"
      - "[Connection: close]"
      - "[User-Agent: Tank]"

ammo_local.tex

/rest/products/search?q=  api-1  
/rest/products/dashboard  api-2 
/rest/products/basket  api-2

api-1 - это тег для конкретного запроса или может быть выставлен у группы запросов
api-2 - это тег для конкретного запроса или может быть выставлен у группы запросов

теги пишутся в конце строки запроса и отделяются символом TAB - \t = </some/api/request>\t<api-tag> (конечно без скобок < и >)