Перейти к содержимому

Фотография

Многократные запуски браузера в одном TestCase


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 4

#1 pilot_max

pilot_max

    Новый участник

  • Members
  • Pip
  • 4 сообщений
  • ФИО:алейников максим сергеевич

Отправлено 06 марта 2011 - 13:28

Здравствуйте дорогие тестировщики.
Присутствовал на докладе Алексея Баранцева (26 февраля, Киев).
Он не однократно повторял, что браузер нужно открывать всего один раз во время выполнения всех тестов, но спросить как это реализуется я не успел. Пишу тесткейсы с помощью PHPUnit, но ввиду того, что он унаследовал от JUnit предпологаю, что решине проблемы похожи.
Вот код:
class MyTestCase extends PHPUnit_Extensions_SeleniumTestCase {

    function setUp() {
        $this->setBrowser("*firefox");
        $this->setBrowserUrl("http://my_site.com/");
    }

    function testLogin(){
       $this->open("/login.php");
       //...
    }

    function testLogout(){
       $this->open("/logout.php");
       //...
    }  
}

Проблема в том, что для каждого тестового метода производится своя инициализация setUp(). В PHPUnit manual копался, но так ничего и не нашел. Кат произвести инициализацию для пачки тестовых методов? Буду очень вам признателен, если вы окажите свою помощь.
Заранее спасибо.
  • 0

#2 barancev

barancev

    Администратор

  • Admin
  • PipPipPipPipPipPip
  • 6 872 сообщений
  • ФИО:Алексей Баранцев
  • Город:Россия, Москва


Отправлено 06 марта 2011 - 18:07

Первый шаг в нужном направлении -- использовать setUpBeforeClass вместо обычного setUp.
Но это недостаточно решительный шаг, потому что всё равно будет для каждого класса отдельный браузер.

Для полноценного решения надо переделывать инициализацию и завершение.
Да, я показывал, как это делается на Java с использованием TestNG, благо он предоставляет нужные возможности.
Однако есть более универсальное решение, которое годится для любых фреймворков.
У меня есть готовая реализация для Ruby+RSpec, я постараюсь описать это в виде заметки, и попробую сделать ещё реализацию для PHP.
В двух словах -- надо реализовать singleton-обёртку вокруг браузера (или чуть более сложно -- factory, если нужно работать с несколькими браузерами одновременно)
  • 0
Алексей Баранцев
Тренинги для тестировщиков (тестирование производительности, защищенности, тест-дизайн, автоматизация):
Линейка тренингов по Selenium

#3 jonnykh

jonnykh

    Новый участник

  • Members
  • Pip
  • 10 сообщений
  • ФИО:Иван Неверов
  • Город:Харьков

Отправлено 08 марта 2011 - 13:34

Здравствуйте дорогие тестировщики.
Присутствовал на докладе Алексея Баранцева (26 февраля, Киев).
Он не однократно повторял, что браузер нужно открывать всего один раз во время выполнения всех тестов, но спросить как это реализуется я не успел. Пишу тесткейсы с помощью PHPUnit, но ввиду того, что он унаследовал от JUnit предпологаю, что решине проблемы похожи.
Вот код:

class MyTestCase extends PHPUnit_Extensions_SeleniumTestCase {

    function setUp() {
        $this->setBrowser("*firefox");
        $this->setBrowserUrl("http://my_site.com/");
    }

    function testLogin(){
       $this->open("/login.php");
       //...
    }

    function testLogout(){
       $this->open("/logout.php");
       //...
    }  
}

Проблема в том, что для каждого тестового метода производится своя инициализация setUp(). В PHPUnit manual копался, но так ничего и не нашел. Кат произвести инициализацию для пачки тестовых методов? Буду очень вам признателен, если вы окажите свою помощь.
Заранее спасибо.


Также был на конференции в Киеве.
Столкнулся с похожей проблемой для своего проекта на Ruby. Автоматизация ведется с помощью RSpec.
Проблема была также в том чтобы использовать не закрытую сессию для тестов запущенных по-отдельности (последовательными процессами)
Решил проблему следующим образом:
1) Добавил возможность устанавливать id сессии в Selenium::Client::Driver
2) Добавил возможность сохранять/читать/удалять id сессии в/из файл(а)
Далее работа ведется следующим образом:
  • если в файл сессии существует -> установить id сессии для клиента
  • если нет -> создать новую сессию (с сохранением id сессии)
  • на установленной в первом пункте сессии выполняю очистку куки (вместо logout, т.к. быстрее), если сервер не отвечает в течении 3 секунд или ошибка - создаю новую сессию (с сохранением id сессии)
Эффект - примерно 30 секунд на каждый тест экономии ( 140 вместо 170 ).
P.S. Алексею, спасибо за отличный доклад и повод для размышлений :)
  • 0

#4 kylie

kylie

    Новый участник

  • Members
  • Pip
  • 28 сообщений

Отправлено 18 марта 2011 - 09:21

Здраствуйте Алексей!
Я тоже была в Киеве и слушала ваш доклад. Вы расказывали чтобы стартовал браузер один раз, нужно несколько тестов обьеденить в метод и использовать @BeforeMethod. Но у меня тесты написаны несколько по-другому, как отдельные класы. И я использую @BeforeClass для запуска браузера. Скажите пожалуйста, как мне сделать запуск браузера один раз?
  • 0

#5 KaNoN

KaNoN

    АЦЦКИЙ СОТОНА

  • Members
  • PipPipPipPipPipPip
  • 1 260 сообщений
  • ФИО:Колесник Николай
  • Город:Днепропетровск > Киев > Лондон

Отправлено 21 марта 2011 - 17:13

Здраствуйте Алексей!
Я тоже была в Киеве и слушала ваш доклад. Вы расказывали чтобы стартовал браузер один раз, нужно несколько тестов обьеденить в метод и использовать @BeforeMethod. Но у меня тесты написаны несколько по-другому, как отдельные класы. И я использую @BeforeClass для запуска браузера. Скажите пожалуйста, как мне сделать запуск браузера один раз?

Попробуйте воспользоваться аннотацией BeforeSuite. В вашем случае это должно помочь. В крайнем случае посмотрите, какие еще аннотации доступны, например, здесь. И уж в самом крайнем случае копните TestNG в направлении Listeners. Можно подрихтовать прослушиватель событий так, чтобы он делал все, что нужно только при старте тестов.
  • 0


Количество пользователей, читающих эту тему: 1

0 пользователей, 1 гостей, 0 анонимных