Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Как написать тесты на экзекутор ? / 25 сообщений из 32, страница 1 из 2
28.08.2017, 17:46
    #39511830
questioner
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как написать тесты на экзекутор ?
Дали задачку написать класс который исполняет задачи. Он может это делать параллельно в некоторых случаях, а в некоторых случаях это запрещено.

Просят написать тесты на эту функциональность. Что-то у меня в голове пазл не сходится как это сделать.

Понятно, что имплементацию таски пишу я сам, но как оттестировать тот факт, что некоторые таски не исполнялись параллельно
...
Рейтинг: 0 / 0
28.08.2017, 23:55
    #39511942
Andrei T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как написать тесты на экзекутор ?
questioner,

Совсем недавно такое делал, глянь здесь . Проверка, что жобы выполнялись последовательно называется assertExecutedInOrder, использует время начала и окончания выполнения каждого жоба (начало выполнения следующего должно быть не раньше окончания предыдущего). Подразумевается, что каждый жоб сам умеет отдать эти два параметра, но в принципе можно их регистрировать независимо в экзекуторе или каком-нибудь листенере.
...
Рейтинг: 0 / 0
29.08.2017, 01:36
    #39511949
Sergunka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как написать тесты на экзекутор ?
questionerДали задачку написать класс который исполняет задачи. Он может это делать параллельно в некоторых случаях, а в некоторых случаях это запрещено.

Просят написать тесты на эту функциональность. Что-то у меня в голове пазл не сходится как это сделать.

Понятно, что имплементацию таски пишу я сам, но как оттестировать тот факт, что некоторые таски не исполнялись параллельно

Вы бы не могли уточнить Вам не сказали как это имплементировать через JUnit, Mock или BDD?

На мой взгляд Вам надо написать сценарии на огурце и прогнать их походу когда проект встанет используя типо  REST API.
...
Рейтинг: 0 / 0
29.08.2017, 07:37
    #39511972
Alexey Tomin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как написать тесты на экзекутор ?
questionerПонятно, что имплементацию таски пишу я сам, но как оттестировать тот факт, что некоторые таски не исполнялись параллельно

Семафор какой-нибудь. Пушишь две "непараллельные" таски. Одна блочит семафор и спит (условную) секунду. Вторая в течении той же (условной) секунды проверяет, что семафор свободен.
...
Рейтинг: 0 / 0
29.08.2017, 08:58
    #39511991
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как написать тесты на экзекутор ?
questionerДали задачку написать класс который исполняет задачи. Он может это делать параллельно в некоторых случаях, а в некоторых случаях это запрещено.

Просят написать тесты на эту функциональность. Что-то у меня в голове пазл не сходится как это сделать.

Понятно, что имплементацию таски пишу я сам, но как оттестировать тот факт, что некоторые таски не исполнялись параллельно
Парень. Такое не тестят обычно. Тестят логику. Там где хотя-бы число состояний счетно.
В параллельном коде число состояний - умножается. Плюс вводятся новые состояния
связанные с ожиданиями. Вобщем протестировать параллельный код настолько
сложно что лучше этим не заниматься. Только очковтирательство получится.

Если ты сможешь - то вынеси логику в отдельный черный ящик и протестируй ее. Без мультипоточности.
...
Рейтинг: 0 / 0
29.08.2017, 10:21
    #39512044
Alexey Tomin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как написать тесты на экзекутор ?
maytonПарень. Такое не тестят обычно. Тестят логику. Там где хотя-бы число состояний счетно.
В параллельном коде число состояний - умножается. Плюс вводятся новые состояния
связанные с ожиданиями. Вобщем протестировать параллельный код настолько
сложно что лучше этим не заниматься. Только очковтирательство получится.

Тестится. Я ловил в тестах ошибку.
Да, надо понимать, что вероятность упасть при ошибке не 100%, но т.к. CI гоняет их постоянно- то проблемы обычно всплывают. Правда надо внимательно писать, чтобы не поймать лишних ошибок.
...
Рейтинг: 0 / 0
29.08.2017, 10:35
    #39512056
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как написать тесты на экзекутор ?
Ваш тест скорее всего настолько сложен что его тоже надо покрыть тестами
...
Рейтинг: 0 / 0
29.08.2017, 12:33
    #39512149
andreykaT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как написать тесты на экзекутор ?
лол. убил. тольо что сказал своему коллеге тоже самое про его мегатесты. )))
...
Рейтинг: 0 / 0
29.08.2017, 15:28
    #39512276
Usman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как написать тесты на экзекутор ?
questionerПросят написать тесты на эту функциональностьТут только интеграционный тест
...
Рейтинг: 0 / 0
29.08.2017, 17:10
    #39512353
Alexey Tomin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как написать тесты на экзекутор ?
maytonВаш тест скорее всего настолько сложен что его тоже надо покрыть тестами


Не ударжелся, написал .
Г@внокод, понятное дело. Ну да, мозги надо включать и с первого раза не заработает - ну так красные ленточки на входе были
Если поправить код около "//!!!" тут и тут то можно словить ошибки.
...
Рейтинг: 0 / 0
29.08.2017, 21:46
    #39512467
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как написать тесты на экзекутор ?
Alexey TominmaytonВаш тест скорее всего настолько сложен что его тоже надо покрыть тестами


Не ударжелся, написал .
Г@внокод, понятное дело. Ну да, мозги надо включать и с первого раза не заработает - ну так красные ленточки на входе были
Если поправить код около "//!!!" тут и тут то можно словить ошибки.
Спасибо. Я даже более скажу. У меня есть аналогичный код в тестах со sleep(..).
Но он не для мультипоточности а для JMS(Apache MQ). Дело в том что в некоторых
тестах в силу особенностей технологии нет синхронного assert. Все - асинхронные.
Стоишь как дурак и ждёшь. Придёт месседж или нет? Если не пришел сразу - то не факт
что fail(). Просто надо еще пол-минутки подождать.

Вот таков он этот JMS.
...
Рейтинг: 0 / 0
30.08.2017, 06:56
    #39512566
Alexey Tomin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как написать тесты на экзекутор ?
maytonУ меня есть аналогичный код в тестах со sleep(..).
Но он не для мультипоточности а для JMS(Apache MQ). Дело в том что в некоторых
тестах в силу особенностей технологии нет синхронного assert. Все - асинхронные.
Стоишь как дурак и ждёшь. Придёт месседж или нет? Если не пришел сразу - то не факт
что fail(). Просто надо еще пол-минутки подождать.

Вот таков он этот JMS.

Чем дальше, тем больше прихожу к убеждению, что JMS используется намного больше, чем нужно. И даже можно.
Очередь/топик нужны только когда ответ вообще не нужен. Во всех остальных случаях есть инструменты и подходы лучше. Типа REST/gRPC и nginx/consul/костыли_в_mesos/... для отказа от конфигов.
Если надо ждать ответа от очереди- значит архитектор идиот.
...
Рейтинг: 0 / 0
30.08.2017, 08:45
    #39512577
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как написать тесты на экзекутор ?
Alexey TominЧем дальше, тем больше прихожу к убеждению, что JMS используется намного больше, чем нужно. И даже можно.
Очередь/топик нужны только когда ответ вообще не нужен. Во всех остальных случаях есть инструменты и подходы лучше. Типа REST/gRPC и nginx/consul/костыли_в_mesos/... для отказа от конфигов.
Если надо ждать ответа от очереди- значит архитектор идиот.
Нет. У нас JMS реально нужен. :) Для нашей системы это natural way.
...
Рейтинг: 0 / 0
30.08.2017, 10:46
    #39512639
Alexey Tomin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как написать тесты на экзекутор ?
maytonУ нас JMS реально нужен. :) Для нашей системы это natural way.

Тогда зачем тестировать ответ?
...
Рейтинг: 0 / 0
30.08.2017, 19:52
    #39513008
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как написать тесты на экзекутор ?
Тестируем потому что требование заказчика. Тесты - ендпоинт. То есть тестится не какой-то модуль а
Полный цикл работы приложения. Начиная от того как jms сообщение зашло.
...
Рейтинг: 0 / 0
31.08.2017, 06:03
    #39513107
Alexey Tomin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как написать тесты на экзекутор ?
maytonТестируем потому что требование заказчика. Тесты - ендпоинт. То есть тестится не какой-то модуль а
Полный цикл работы приложения. Начиная от того как jms сообщение зашло.

Ну это как раз интеграционные тесты. А на subj можно и unit
...
Рейтинг: 0 / 0
31.08.2017, 06:58
    #39513116
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как написать тесты на экзекутор ?
Ваш тест не тестирует параллельной работы.

По сути он просто утверждает что экзекютор когда нибудь остановится.

И из него не очевидно что какая то работа была выполнена.
...
Рейтинг: 0 / 0
31.08.2017, 07:31
    #39513127
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как написать тесты на экзекутор ?
Плюсую, что тестировать параллельную работу это не черный ящик со входом выход тестировать.
Предмет теста не простой).
...
Рейтинг: 0 / 0
31.08.2017, 09:06
    #39513182
Alexey Tomin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как написать тесты на экзекутор ?
maytonВаш тест не тестирует параллельной работы.

Поставь один поток- тест упадёт. Значит тестирует.

maytonПо сути он просто утверждает что экзекютор когда нибудь остановится.
И из него не очевидно что какая то работа была выполнена.

Да, надо дописать в конце выполнения установку флага.
Там тестируется две вещи- задачи одной группы выполняются последовательно, разных- параллельно. Так было в первом сообщении. Больше ничего не тестировал. Да собственно и не надо- там внутри тредпулэкзекьютор, его тестировать не надо.
...
Рейтинг: 0 / 0
31.08.2017, 09:30
    #39513193
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как написать тесты на экзекутор ?
Давай порассуждаем. В чем смысл этого экзекютора. Не вникая в детали твоих групп и прочих категорий.

Я утверждаю что существует момент времени t _когда хотябы два потока работали одновременно.

Это главный поинт и его надо тестировать. Без него этот экзекютор фейк и его работу можно было сэмулировать
Как последовательную.

Как проверить параллельную работу? Вопрос достойный отдельного топика.
...
Рейтинг: 0 / 0
31.08.2017, 09:39
    #39513196
Alexey Tomin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как написать тесты на экзекутор ?
maytonДавай порассуждаем. В чем смысл этого экзекютора. Не вникая в детали твоих групп и прочих категорий.

Я утверждаю что существует момент времени t _когда хотябы два потока работали одновременно.

Это главный поинт и его надо тестировать. Без него этот экзекютор фейк и его работу можно было сэмулировать
Как последовательную.

Как проверить параллельную работу? Вопрос достойный отдельного топика.

Всё просто. Каждая задача выполняется секунду. У нас 5 задач. Через 1.5 секунды в очереди нет задач- значит параллельная работат есть.
Проверим. Сделаем всё в один поток - получим падение теста. Значит проверка есть.
...
Рейтинг: 0 / 0
31.08.2017, 09:44
    #39513200
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как написать тесты на экзекутор ?
Мне кажется критерий потраченного времени - плохой советчик.

Ведь в реальности потока не стоят в sleep а исполняют работу?

Нужен пруф работы
...
Рейтинг: 0 / 0
31.08.2017, 10:58
    #39513240
Alexey Tomin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как написать тесты на экзекутор ?
maytonМне кажется критерий потраченного времени - плохой советчик.

Ведь в реальности потока не стоят в sleep а исполняют работу?

Нужен пруф работы

Зачем? А если тест гоняется на древнем одноядерном процессоре, то он упадёт, что ли?
В реальности всё одно потоки ждут обычно- обычно сеть, или диск. В крайнем случае память. Загрузить ядро работой даже на 50%- это большая удача.

Не надо ударяться в софистику. стоит вполне конкретная задача топикстартера. Этот тест её решает.

Я писал код, в котором, к примеру, можно было выполнять к серверу не более 5 запросов в секунду, при этом ответы были медленные, поэтому работало 30 потоков.
Тесты были, первоначальные ошибки поймали, потом код работал сутками и ограничения не превышал. Так что тесты писать можно. Было бы желание.
...
Рейтинг: 0 / 0
31.08.2017, 13:19
    #39513412
questioner
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как написать тесты на экзекутор ?
Продвинутые люди сказали, что надо писать тесты на jcStress
...
Рейтинг: 0 / 0
31.08.2017, 14:20
    #39513465
Alexey Tomin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как написать тесты на экзекутор ?
questionerПродвинутые люди сказали, что надо писать тесты на jcStress

Классная штука.
Но, насколько я понял, это black-box тест. Если так, то это не замена, а дополнение самописным тестам.
white-box тестирование тоже нужно делать.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Как написать тесты на экзекутор ? / 25 сообщений из 32, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]