Запуск selenium тестов из десктопного приложения или как сделать удобный способ запуска тестов для незнающих


(Kirill Tarasevich) #1

Добрый день!

Возможно кто-то сталкивался с задачей или есть идеи по этому поводу.
Очень хочется запихнуть тест в десктопное приложение) Скорее даже это будет не тест а помощник в тестировании.

Юзкейс такой:

  1. Открываешь апликейшн, вводишь необходимые параметры для теста и запускаешь.
  2. Открываются браузеры, начинается магия селениума. (Например создаются N юзеров)
  3. Закрываются браузеры, все хеппи )

Основная идея чтобы любой человек в команде (от девелопера до менеджера) смог не парясь со студией, тестраннерами и прочими инструментами, набить параметризированные юниты для дальнейшей работы.

Заранее спасибо.


(Mykhailo Poliarush) #2

А зачем это все делать через какое-то десктопное приложение?

Будет лучше когда будет запуск даже без настроенной локальной среды и без десктопного приложения. Это будет бомба! :slight_smile: Как это сделать? Установить continuous intergration server в виде jenkins и настройте запуск там. Все кому надо запустить тесты просто захотят на определенный урл, нажимают кнопку и получают результат. Ну вот и все что вам надо.

Настроить запуск через дженкинс значительно быстрое, удобное и масштабируемое решение нежели, свое десктопное приложение на коленках.

Для одного из своих заказчиков по автоматизации тестирования рисовал похожую схему.

Test Automation Infrastructure


(Руслан) #3

вот пример - менеджер нажимает кнопку - тест запускается…параметры для запуска отдельных тестов можно добавить к описанию, а дальше ctrl+C -> ctrl+V.


(vmaximv) #4

Но не забывайте, что что-бы поднять дженкинс, требуются ресурсы (вычислительные) и довольно неслабые, если желающих запустить тесты будет более одного.

При том, что эти ресурсы вполне можно черпать из рабочих станций тестеров/разработчиков/менеджеров.
Так что CI не панацея, хотя и “зрелищная” штука.

В любом случае, писать UI для запуска тестов - это перебор, обычного batch скрипта хватит с головой.


(Mykhailo Poliarush) #5

Да ладно, не так уж и страшно тем более что дженкинс будет крутиться всего на одной машине для всех желающих. http://stackoverflow.com/questions/8747533/jenkins-hudson-ci-minimum-requirements-for-a-linux-rh-installation.

Вряд ли batch скрипта хватит, потому что надо сделать решение, в котором человек без опыта и настроенной среды сможет запускать тесты.


(vmaximv) #6

Имеются ввиду не те ресурсы, которые будет потреблять дженкинс, а те, которые потребуются для браузеров, в случае централизованного запуска автотестов (многопоточность, одновременный запуск различных джобов, ну и ИЕ вдогонку).

Почему не хватит? Если основательно подойти, от пользователя будет требоваться только проверить некоторые настройки в браузере и задать необходимые параметры при запуске батника.


(Mykhailo Poliarush) #7

Это все решаемо.

Если они основательно подойдут, то сразу напишут десктопное приложение, как и говорилось в посте.
Хотя батником тоже можно сделать, но это все равно будет требовать какой-то там настройки.

ИМХО, мне вариант с дженкинсом больше нравиться, да может и придется одному человеку решить все вопросы с настройкой мультипоточности, открытия браузера и тому подобное, зато остальные просто нажимают на кнопку и радуются жизни, или же винят разработчика если что-то там не работает.


(Dmitriy Zverev) #8

Есть еще одна причина отказаться от такой идеи. Если эта магия происходит на windows и с не headless браузером (IE, firefox, …), то менеджеры или другие пользователи идут “курить” (не могут работать с desktop) пока она не закончится.


(Mykhailo Poliarush) #9

Да, это еще один повод построить такой сервис запуска, чтобы не останавливать работу и помогать делать ее быстрее.

ОФФТОП: В наше время модно строить автоматизированные сервисы, которые помогают нам жить проще. Например вот есть сервис удаления ненужной информации :slight_smile: http://devnull-as-a-service.com/


(vmaximv) #10

Как? Есть три джобо-сьюта, каждый из которых ранается в пять потоков. Браузер ИЕ. Три разных пользователя хотят одновременно их запустить.


(Mykhailo Poliarush) #11

Вот так вот сразу по больному месту бьешь спрашиваешь :). Это можно сделать через слейвы и виртуальные машины. Ограничиваешь возможность одновременно запускаемых джобов под слейвы. Настраиваешь определенное количество виртуальных машин и под них настраиваешь слейвы. И при запуске будет выбираться свободная машина и там запускаться тесты.

А если вообще круто делать, то даже можно сделать так чтобы виртуальная машина создавалась только для одного прогона и после прогона убивалась, но это отдельная тема. Например можно использовать http://www.vagrantup.com/


(Dmitriy Romanov) #12

Мы сделали такое приложение в одном из проектов. По факту это был виззард в 7 степов, где можно было выбрать набор тест кейсов, набор и версию браузеров, платформу запуска (локальная машина, СИ сервер или клауд). В случае клауда, можно было выбрать конфигурировать capabilities iOS, Android…Вообщем по факту более 40 параметорв комманд лайн можно конфигурировать в TestManager friednly way. Выбор, конечно, можно сохранить и типичный реран происходит в три клика. Из планов по развитию - сохранение результтов работы в СУБД с репортами, графиками и т.п. Вообщем процесс делегировался с тех. людей на потребителей. Хотя и девелоперы тоже юзают “профайлы” для быстрого локального рерана.


(Александр Шиповалов) #13

У меня сейчас стоит похожая задача. Отдать заказчику тесты, что бы он не парясь - нажимал одну кнопку и тесты запускались. Плохо одно - у меня нет доступа в их репозиторий, а наши безопасники не хотят давать им доступ в наш.


(Sergey Korol) #14

Ну раз все такие упертые и недоверчивые, можно заскедьюлить Jenkins job, который будет выгребать тесты из вашего репозитория, собирать необходимый пакет и копировать в shared space, доступный заказчику.


(Александр Шиповалов) #15

Я тоже склоняюсь к этому…но для начала надо поставить Jenkins заказчику, настроить там jobs, которые будут смотреть не в репозиторий, а внутрь какой то файловой системы. Скажу честно - чувство прекрасного начинает сильно бастовать.