Size: a a a

QA — Load & Performance

2020 August 30

VG

Viktor Ganeles in QA — Load & Performance
Alexander
Попробую чуть подробнее. Между А и Б нет связи на уровне теста кроме того, что в конце теста из должно быть отправлено равное количество. А отправляются сами по себе. Параллельно им отправляются сами по себе Б, но с небольшой задержкой относительно А, например поток 1 А1, 5 секкунд пауза, поток 2 Б1. Мне не нужно ждать Б1, чтобы отправить А2 в потоке 1. Елинственное, на чем застрял, мне нужно, чтобы поток 2 отправил в течение теста ровно такое же количество запросов Б, какое количество А отправил поток 1. Грубо говоря синхронизировать их по количеству между собой.
А если произошла ошибка в запросе А, соответствующий запрос Б нужно тоже не выполнять?
источник

A

Alexander in QA — Load & Performance
Viktor Ganeles
А если произошла ошибка в запросе А, соответствующий запрос Б нужно тоже не выполнять?
Нет, счетчик не должен учитывать failed запросы
источник

DS

Dmytro Slobodianiuk in QA — Load & Performance
Alexander
Нет, счетчик не должен учитывать failed запросы
а если запрос Б вернул таймаут, кто зафейлит запрос А?
источник

VG

Viktor Ganeles in QA — Load & Performance
Тогда всё вообще просто:

Делаете 2 тред-группы
- первая кидает запросы А каждые Х секунд
- вторая выжидает х/2 и выполняет запросы Б каждые Х секунд
источник

VG

Viktor Ganeles in QA — Load & Performance
Главное добиться, что бы они с одинаковой интенсивностью долбили.

Разместите в корне каждой тред группы FlowControlAction
И в нём Constant Throughput Timer
источник

A

Alexander in QA — Load & Performance
Viktor Ganeles
А если произошла ошибка в запросе А, соответствующий запрос Б нужно тоже не выполнять?
Сейчас пробую есои коротко две Thread группы, первая ведет счетчик и передает в проперти, а вторая группа ведет свой счетчик до тех пор пока он не сровняется со счетчиком из первой группы
источник

VG

Viktor Ganeles in QA — Load & Performance
Зачем это делать если мы не проверяем запросы на фейлы?
источник

A

Alexander in QA — Load & Performance
Viktor Ganeles
Главное добиться, что бы они с одинаковой интенсивностью долбили.

Разместите в корне каждой тред группы FlowControlAction
И в нём Constant Throughput Timer
Не смогу олин в один по кооичеству синхронизировать
источник

VG

Viktor Ganeles in QA — Load & Performance
А, так если зафейлилс А, не нужно выполнять и Б
Понял
источник

A

Alexander in QA — Load & Performance
Viktor Ganeles
Зачем это делать если мы не проверяем запросы на фейлы?
Проверяем, просто из описания выпустил, те счетчик повышается при успешном запросе
источник

VG

Viktor Ganeles in QA — Load & Performance
Ну тогда всё верно

Мой вариант, полюс запрос А увеличивает счётчик в проперти, а запрос Б ведёт свой счётчик и при выполнении проверяет, что счётчик Б меньше счётчика А
источник

A

Alexander in QA — Load & Performance
Viktor Ganeles
Ну тогда всё верно

Мой вариант, полюс запрос А увеличивает счётчик в проперти, а запрос Б ведёт свой счётчик и при выполнении проверяет, что счётчик Б меньше счётчика А
Да, спасибо, примерно этот вариант пробую как раз
источник

VG

Viktor Ganeles in QA — Load & Performance
Проблема может возникнуть если у А будет много потоков и они одновременно будут обновлять проперти
источник

VG

Viktor Ganeles in QA — Load & Performance
Тогда надёжнее вариант с аналогом очереди реализовать:

Поток А добавляет в очередь тикеты

Поток Б при выполнении забирает из очереди тикеты

Если в очереди нет тикетов - запрос Б не выполняется
источник

VG

Viktor Ganeles in QA — Load & Performance
Очередь, наверное, можно реализовать на основе SharedHashMap

@smirnovqa её активно использовал
источник

A

Alexander in QA — Load & Performance
Viktor Ganeles
Тогда надёжнее вариант с аналогом очереди реализовать:

Поток А добавляет в очередь тикеты

Поток Б при выполнении забирает из очереди тикеты

Если в очереди нет тикетов - запрос Б не выполняется
Классная идея, спасибо
источник

S7

Sam 7 in QA — Load & Performance
Viktor Ganeles
Тогда надёжнее вариант с аналогом очереди реализовать:

Поток А добавляет в очередь тикеты

Поток Б при выполнении забирает из очереди тикеты

Если в очереди нет тикетов - запрос Б не выполняется
У джиметра же есть функция counter.  Можно создать два счетчика А и Б. А инкрементится  потоками А и читается в потоках Б.  Счётчик Б инкрементинтся только в потоках Б и сравнивается со счетчиком А
источник

S7

Sam 7 in QA — Load & Performance
Этот counter потокобезопасный вроде
источник

VG

Viktor Ganeles in QA — Load & Performance
Sam 7
У джиметра же есть функция counter.  Можно создать два счетчика А и Б. А инкрементится  потоками А и читается в потоках Б.  Счётчик Б инкрементинтся только в потоках Б и сравнивается со счетчиком А
О, спасибо, а я и не знал
Изобретаю велосипеды :)
источник

AG

Alexander Grigoryev in QA — Load & Performance
Омг, я тоже не знал 🌚
источник