Есть отличная удаленная работа для php+codeception+jenkins+allure+docker спецов. 100% remote! Присоединиться к проекту

Запуск тестов по динамическому расисанию и с разным данными

selenium
Теги: #<Tag:0x00007f7b692709e8>

(Максим Дворак) #1

В общем для лучшего понимания ситуации опишу что есть на данный момент и что примерно хочу увидеть в итоге ))

На данный момент всё работет через дополнение к Firefox - iMacros. На машинах в режиме 24\7 запущен браузер в котором js скрипт парсит код (около 200 разных задач), время запуска и параметры, после выполнения отсылает результат выполнения на сервер и получает данные для следующего запуска. Таких машин запущено одновременно на данный момент около 400 (хотя доходило и до 1500).
Сейчас думаю отойти от imacros и перейти на selenium для экономии ресурсов.

Собственно сам вопрос - как правильно всё это дело организовать??? Как я это себе представляю:

  • сервер с чем-то типа jenkins.
  • SeleniumServer
  • каждые 30 секунд запрос к базе данных на получение списка тестов и параметров которые нужно выполнить.
  • запускаем тесты на свободных машинах, если таковых нет добавляем в очередь на выполнение

как мне кажется такой подход сократит расходы на содержание серверов в 2-3 раза, что при моём обьёме существенная сумма.


(Sergey Pirogov) #2

Сколько есть тестов? Если грамотно написать все, то 400 машинок можно сократить до 2-3


(Максим Дворак) #3

Посмотрел по логам в базе данных - в среднем в сутки 400000 запросов на поучение кода для выпонения в imacros. Сейчас всё настроено таким образом что при появлении новой задачи я пишу кусок кода который будет выполнятся, задаю период (например каждые 15 минут), потом каждая машина подхватывает этот код начинает выполнять каждые 15 минут. Период выполнения и параметры могут отличаться для каждой машины, поэтому всё построено так что каждая машина получает кусок кода который ей нужно выполнить, выполняет его, отсылает результат обратно на сервер, он его обрабатывает и выдает следующую ближайшую по времени задачу.


(Максим Дворак) #4

Возможно со стороны мое описание выглядит несколько сумбурно. Одной из проблем является то что если один из серверов падает или с ним возникают другие траблы, то часть его работы остается не выполненной. Также часто бывает что со своим куском задач нода справилась быстрее она просто уходит в ожидание, а на других нодах в это время может скапливаться очередь. Хотелось бы чтобы центральный сервер получал список задач и распределял их по доступным машинам. Например каждые 10 секунд появляется 100 заданий центральный сервер получает список и код и начинает выполнять используя максимум доступных ресурсов или добавляет их в очередь на выполнение.


(Goshko Nazar) #5

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

ЗЫ. У вас это похоже на какое то нагрузочное тестирование, попробуйте для этого использовать специализированные инструменты, а не js-клацалку)