TestNG Мултибраузерность
#1
Отправлено 07 марта 2012 - 21:16
О том как запускать тесты в разных браузерах сейчас и пойдёт речь.
Неглубоко копнув в testng я увидел 2 способа конфигурации разных экземпляров браузеров для одного теста:
1. Группируем тестовые сценарии в конфиге (по группам/классам/пакеджам) передаём сгруппированному сюиту параметр "имя браузера", далее в @Before[Class|Test|Method] конфигуриреум remotewebdriver и передаём это в тестовый метод
2. Создаём с помощью метода @Fabric фабрику тестовык классов которой передаём список браузеров, в итоге она создаёт необходимое кол-во экземпляров тестовых классов в которые мы через конструктор передаём remotewebdriver
Оба методы имеют свою плюсы и минусы, но минусов в обоих для меня подавляющие большинство. В пером мы имеем избыточную конфигурацию, во втором пропавшую возможность использовать dataProvider.
В связи с этим возникает следующий вопрос: Как это реализовать наиболее правильно?
#2
Отправлено 08 марта 2012 - 07:56
Могу предложить третий вариант - сделать не фабрику тестовых классов, а фабрику драйверов. Насколько я понял задачу, необходимо для каждого класса вызывать свой инстанс веб-драйвера. В таком случае, можно формировать и хранить контейнер вида <Имя класса> - <Инстанс драйвера>. Соответственно, в тестах переделать обращения к драйверу на вызов фабрики, который вернет драйвер нужной конфигурации именно для теста, откуда он был вызван. Инициализировать и заполнять контейнер драверов для тестов с фиксированными конфигурациями можно заранее, где нибудь в @BeforeSuite, для особых тестов можно передавать в них параметры и добавлять в контейнер запись при первом вызове.
Надеюсь не слишком сумбурно изложил :). Может у кого-то найдется вариант получше.
#3
Отправлено 08 марта 2012 - 12:12
Последний вопрос, насчет наиболее правильной реализации, тоже очень интересует.
Могу предложить третий вариант - сделать не фабрику тестовых классов, а фабрику драйверов. Насколько я понял задачу, необходимо для каждого класса вызывать свой инстанс веб-драйвера. В таком случае, можно формировать и хранить контейнер вида <Имя класса> - <Инстанс драйвера>. Соответственно, в тестах переделать обращения к драйверу на вызов фабрики, который вернет драйвер нужной конфигурации именно для теста, откуда он был вызван. Инициализировать и заполнять контейнер драверов для тестов с фиксированными конфигурациями можно заранее, где нибудь в @BeforeSuite, для особых тестов можно передавать в них параметры и добавлять в контейнер запись при первом вызове.
Надеюсь не слишком сумбурно изложил :). Может у кого-то найдется вариант получше.
Ну фабрика тестовых классов в свою очередь представляет из себя фабрику драйверов (который передаётся в конструкторе каждому классу) , ведь в любом случае нам надо выполнить каждый тестовый класс с уникальным параметрами драйвера.
Вопрос ведь ещё стоит не только в том как запускать тестовые методы с разными драйверами, а в том как это сделать так что бы ключевой функционал testng (отчётность, датапровайдеры, фабрики) оставался доступным.
Глядя на твой вариант вспомнил его модификацию стандратными средствами testng вместо фабрики, сделать общий dataprovider в котором конфигурировать набор драйверов и передавать его в метод. но это опять приведёт к тому что мы потеряем функционал dataprovider.
В общем я думаю пока на тему написать свой тестранер в котором формировать suite на основе моих правил, что судя по всему хорошенький такой костыль 8)
Количество пользователей, читающих эту тему: 1
0 пользователей, 1 гостей, 0 анонимных