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

Фотография

Переход из Selenium IDE на SeleniumRC+PHPUnit+NetBeans


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

#1 VovanUA

VovanUA

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

  • Members
  • Pip
  • 9 сообщений
  • ФИО:Водницький Володимир Петрович

Отправлено 01 ноября 2010 - 18:38

Помогите новичку в SeleniumRC+PHPUnit+NetBeans.
Возникла необходимость осуществить переход из Selenium IDE на связку SeleniumRC+PHPUnit+NetBeans в связи с нарастающей сложностью проектов и соответственно тестов.
К этому времени у меня уже есть набор тестов на Selenium IDE. Я их конвертирую в формат для связки и добавляю в проект. И тут начинаются проблемы...
1. Как правильно организовать структуру тестов сейчас? У мене есть ряд действий таких как залогиневание клиента, редактирование данных клиента, создание компаний, для клиента, их настройка, и т.д. Все эти действия в Selenium IDE у меня были в отдельных тест-кейсах объединенных в тест-сюит. Нужно ли сейчас в PHPUnit объединять их в одном файле з набором тестов, или же оставить по одному тесту в каждом файле?
2. Если оставлять все как есть то как организовать тест-сюит. Негде не нашел хорошей информации с примерами по создание тест-сюитов NetBeans+PHPUnit.
3. Если же объеденить все в один файл, то после каждого выполнения теста браузер закрывается и теряются некоторые настройки в проекте + приходется заново залогиниватся. Так же й при первом варианте.
4. При входе на сайт нужно пройти залогинивание. В Selenium IDE это был мой первый шаг в тест-сюите. Как сейчас организувать это дело. Если вызывать tearDown() то браузер закриваэться и нужно перезалогиниватся...
Общем, буду рад любой помощи здесь или хорошим ссилкам по теме.
  • 0

#2 Zenturio

Zenturio

    Опытный участник

  • Members
  • PipPipPipPip
  • 386 сообщений
  • ФИО:Дмитрий
  • Город:Смоленск - Москва


Отправлено 02 ноября 2010 - 08:39

Помогите новичку в SeleniumRC+PHPUnit+NetBeans.
Возникла необходимость осуществить переход из Selenium IDE на связку SeleniumRC+PHPUnit+NetBeans в связи с нарастающей сложностью проектов и соответственно тестов.
К этому времени у меня уже есть набор тестов на Selenium IDE. Я их конвертирую в формат для связки и добавляю в проект. И тут начинаются проблемы...
1. Как правильно организовать структуру тестов сейчас? У мене есть ряд действий таких как залогиневание клиента, редактирование данных клиента, создание компаний, для клиента, их настройка, и т.д. Все эти действия в Selenium IDE у меня были в отдельных тест-кейсах объединенных в тест-сюит. Нужно ли сейчас в PHPUnit объединять их в одном файле з набором тестов, или же оставить по одному тесту в каждом файле?
2. Если оставлять все как есть то как организовать тест-сюит. Негде не нашел хорошей информации с примерами по создание тест-сюитов NetBeans+PHPUnit.
3. Если же объеденить все в один файл, то после каждого выполнения теста браузер закрывается и теряются некоторые настройки в проекте + приходется заново залогиниватся. Так же й при первом варианте.
4. При входе на сайт нужно пройти залогинивание. В Selenium IDE это был мой первый шаг в тест-сюите. Как сейчас организувать это дело. Если вызывать tearDown() то браузер закриваэться и нужно перезалогиниватся...
Общем, буду рад любой помощи здесь или хорошим ссилкам по теме.

А раньше позвольте спросить у вас как было?
По идее проще сделать несколько процедур, в которых есть проверки, далее вызывать в одной все эти процедуры... Это и будет один тест
  • 0

#3 VovanUA

VovanUA

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

  • Members
  • Pip
  • 9 сообщений
  • ФИО:Водницький Володимир Петрович

Отправлено 02 ноября 2010 - 13:12

Ранее было так:
Изображение

Сейчас так:
Изображение

Да, можно сделать так как вы написали, но тогда придется объединить все файлы в один... Может есть еще какие-то подходы?
+ Поясните мне как создавать тест-кейси (желательно на примере).
  • 0

#4 frei_by

frei_by

    Постоянный участник

  • Members
  • PipPipPip
  • 177 сообщений
  • ФИО:Дмитрий

Отправлено 02 ноября 2010 - 14:12

protected function tearDown ()
{
parent::tearDown();
}

Расскажите плз для в чём смысл в функции tearDown обращатся к parent::tearDown(); ?
  • 0

#5 VovanUA

VovanUA

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

  • Members
  • Pip
  • 9 сообщений
  • ФИО:Водницький Володимир Петрович

Отправлено 02 ноября 2010 - 15:24

protected function tearDown ()
{
parent::tearDown();
}

Расскажите плз для в чём смысл в функции tearDown обращатся к parent::tearDown(); ?


Без этого обращения у меня не закрывается браузер после завершения теста.
P.S. Я второй день пробую работать на этой связке, так что если что не то говорите.
  • 0

#6 frei_by

frei_by

    Постоянный участник

  • Members
  • PipPipPip
  • 177 сообщений
  • ФИО:Дмитрий

Отправлено 02 ноября 2010 - 15:59

Если коротко, то прочитав сегодня ваш пост с утра (сам где то 3 недели на NetBeans и PHPUnit сижу) попробовал чего-нибудь выгуглить. Нашёл на сайте http://www.phpunit.d...zing-tests.html и http://www.slideshar...selenium-156187 (начиная где-то со 110 салйда). Для использования suite у меня получилась такая конструкция:

вот так я запускаю скрипт,
s1.php
<?php
$output = shell_exec('phpunit c:\\www_pub\\suite.php');
echo "<pre>$output</pre>";
?>

в командную строку через shell_exec передаю вот этот файл:
suite.php
<?php
require_once './sel_s2.php';

class MySuite extends PHPUnit_Framework_TestSuite
{
    public static function Suite()
    {
        return new MySuite('ext1');
    }

    protected function SetUp()
    {
        print "\MySuite::setUp()";
    }

    protected function tearDown()
    {
        print "\MySuite::tearDown()";
    }
}
?>

а вот файл непосредственно тестов:
sel_s2.php
<?php
require_once 'PHPUnit/Extensions/SeleniumTestCase.php';

class ext1 extends PHPUnit_Extensions_SeleniumTestCase
{
    protected function setUp()
    {
        $this->setBrowser('*firefox3');
        $this->setBrowserUrl('http://google.com/');
        print "\next1::setUp()";
    }

    public function test_1 ()
    {
        $this->open('/');
        print "\next1::test_1()";
    }

    public function test_2 ()
    {
        $this->open('/');
        print "\next1::test_2()";
    }

    protected function teardown()
    {
        print "\next1::teardown()";
    }
}
?>

вот это вывод в броузер:
(как-то коробит меня через NetBeans запускать - shift+F6 не не не... лучше так: http://localhost:8080/s1.php)
PHPUnit 3.5.3 by Sebastian Bergmann.

\MySuite::setUp()
ext1::setUp()
ext1::test_1()
ext1::teardown().
ext1::setUp()
ext1::test_2()
ext1::teardown().\MySuite::tearDown()

Time: 21 seconds, Memory: 4.25Mb

OK (2 tests, 0 assertions)

вот примерно так... Пока сам до конца не разобрался....
  • 0

#7 KaNoN

KaNoN

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

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

Отправлено 02 ноября 2010 - 16:38

Если коротко, то прочитав сегодня ваш пост с утра (сам где то 3 недели на NetBeans и PHPUnit сижу) попробовал чего-нибудь выгуглить. Нашёл на сайте http://www.phpunit.d...zing-tests.html и http://www.slideshar...selenium-156187 (начиная где-то со 110 салйда). Для использования suite у меня получилась такая конструкция:

вот так я запускаю скрипт,
s1.php

<?php
$output = shell_exec('phpunit c:\\www_pub\\suite.php');
echo "<pre>$output</pre>";
?>

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

Но если все-таки надо сделать именно в таком виде, в котором статус выполнения отображается именно в окне браузера, то лучше отдельно сделать страницу, которая запустит тесты (причем вывод перенаправить в файл), а затем делает редирект на страницу, которая отображает содержимое файла, куда осуществляется вывод (с обновлением через каждые 10-15 секунд). Это всё настраивается заголовками страницы.

Но все-таки лучше остановиться на запуске тестов из командной строки. В этом случае проще прикручивать тот же Continuous Integration.
  • 0

#8 VovanUA

VovanUA

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

  • Members
  • Pip
  • 9 сообщений
  • ФИО:Водницький Володимир Петрович

Отправлено 02 ноября 2010 - 18:11

А как на счет запуска из среды NetBeans? Стоит ли над етим заморачиватса?
  • 0

#9 frei_by

frei_by

    Постоянный участник

  • Members
  • PipPipPip
  • 177 сообщений
  • ФИО:Дмитрий

Отправлено 03 ноября 2010 - 08:21

Пока что ощущаю только лишь одно. Если вы выбрали связку php (phpunit) + SeleniumRC - вам придётся разобратся с phpunit. Или обновить свои знания о ООП и разобратся с phpunit. Иначе дальше "чижик пыжик" - вы не продвинетесь... Любая пробелма сложнее "залогинится - кликнуть - сверить - начать заново" - будет ставить в тупик, выходом из которого - разобратся с phpunit, или обновить воспоимнания о ООП и разобратся с phpunit. NetBeans тут вовсе не при чём.
  • 0

#10 KaNoN

KaNoN

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

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

Отправлено 03 ноября 2010 - 09:30

А как на счет запуска из среды NetBeans? Стоит ли над етим заморачиватса?

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

#11 frei_by

frei_by

    Постоянный участник

  • Members
  • PipPipPip
  • 177 сообщений
  • ФИО:Дмитрий

Отправлено 03 ноября 2010 - 09:41

Но все-таки лучше остановиться на запуске тестов из командной строки. В этом случае проще прикручивать тот же Continuous Integration.


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

Вот тоже самое с Continuous Integration.
  • 0

#12 frei_by

frei_by

    Постоянный участник

  • Members
  • PipPipPip
  • 177 сообщений
  • ФИО:Дмитрий

Отправлено 03 ноября 2010 - 10:24

Ну есть ещё одни простой способ организовать suite:
называете свои файлы с тестами как *Test.php и складываете их в одну папку.
Потом вызываете из командной строки phpunit и указываете папку с файлами.
phpunit обходит эту папку и выполняет все файлы.

пример команды -
$output = shell_exec('phpunit c:\\www_pub\\tests\\');
либо
меню старт - Выполнить - cmd - копируете туда что-то вроде phpunit path_to_dir и enter...

У меня в примере соответственно папка www_pub на диски C с вложенной папкой test в которой лежит файл - в аттаче.
Попробуйте.

Никакого NetBeanse. Хотя папки создавались и файлы писались именно в нём.

напишите, сработает или нет...

Прикрепленные файлы

  • Прикрепленный файл  sel_s1Test.php   683байт   4 Количество загрузок:

  • 0

#13 VovanUA

VovanUA

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

  • Members
  • Pip
  • 9 сообщений
  • ФИО:Водницький Володимир Петрович

Отправлено 04 ноября 2010 - 07:31


protected function tearDown ()
{
parent::tearDown();
}

Расскажите плз для в чём смысл в функции tearDown обращатся к parent::tearDown(); ?


Без этого обращения у меня не закрывается браузер после завершения теста.
P.S. Я второй день пробую работать на этой связке, так что если что не то говорите.


Немножко не так... Думал что родительская функция класса SeleniumTestCase имеет какое-то описания метода tearDown которое закрывает браузер. Оказывается нету. Почему это в определенный момент помогало закрывать браузер после завершения теста - непонятно. Здесь мне помог переход из версии Selenium RC 2 a6 на a7. В данном примере вызов этого метода не нужен.
  • 0

#14 VovanUA

VovanUA

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

  • Members
  • Pip
  • 9 сообщений
  • ФИО:Водницький Володимир Петрович

Отправлено 04 ноября 2010 - 07:57

Если коротко, то прочитав сегодня ваш пост с утра (сам где то 3 недели на NetBeans и PHPUnit сижу) попробовал чего-нибудь выгуглить. Нашёл на сайте http://www.phpunit.d...zing-tests.html и http://www.slideshar...selenium-156187 (начиная где-то со 110 салйда). Для использования suite у меня получилась такая конструкция:


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

Пока что ощущаю только лишь одно. Если вы выбрали связку php (phpunit) + SeleniumRC - вам придётся разобратся с phpunit. Или обновить свои знания о ООП и разобратся с phpunit. Иначе дальше "чижик пыжик" - вы не продвинетесь... Любая пробелма сложнее "залогинится - кликнуть - сверить - начать заново" - будет ставить в тупик, выходом из которого - разобратся с phpunit, или обновить воспоимнания о ООП и разобратся с phpunit. NetBeans тут вовсе не при чём.

На счет разобраться из PHPUnit я и не спорю. Собственно это и делая сейчас. ООП... По роду деятельности приходится каждый день разбиратся и усовершенствовать знания.
  • 0

#15 VovanUA

VovanUA

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

  • Members
  • Pip
  • 9 сообщений
  • ФИО:Водницький Володимир Петрович

Отправлено 04 ноября 2010 - 08:23

Ну есть ещё одни простой способ организовать suite:
называете свои файлы с тестами как *Test.php и складываете их в одну папку.
Потом вызываете из командной строки phpunit и указываете папку с файлами.
phpunit обходит эту папку и выполняет все файлы.


Это в данном проекте не вариант... Здесь важна последовательность запуска тестов, поскольку все последующие тесты зависят от результатов выполнения предыдущих.

По структуре. Решил сделать класс из необходимыми конфигурационными действиями (залогинивание, и т.п.) и собственно класс из тестами. В одном классе тестов буду проверять один функционал. Все тесты из Selenium IDE пока-что идут в один класс теста (работа из клиентом). В каждом тесте вызываю нужные функции из конфигурационного класса. В последствии еще нужно будит проверить два или три функционала (репорты1, репорты2, пользователи, ...), которые пойдут в своем классе тестов, соответственно в отдельном файле. Ну и потом все файлы объединяю в тест-сюит с помощью класса PHPUnit_Framework_TestSuite. Вот как-то так...
Если где-то просчитался подсказывайте)
  • 0

#16 KaNoN

KaNoN

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

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

Отправлено 04 ноября 2010 - 11:37


Ну есть ещё одни простой способ организовать suite:
называете свои файлы с тестами как *Test.php и складываете их в одну папку.
Потом вызываете из командной строки phpunit и указываете папку с файлами.
phpunit обходит эту папку и выполняет все файлы.


Это в данном проекте не вариант... Здесь важна последовательность запуска тестов, поскольку все последующие тесты зависят от результатов выполнения предыдущих.

А вот этого лучше не допускать. Со временем может возникнуть проблема с разруливанием всех зависимостей. Либо тесты превратятся в бесформенное "спагетти", которое с каждым разом всё труднее будет поддерживать. Так что попробуйте все-таки делать независимые тесты.
  • 0

#17 frei_by

frei_by

    Постоянный участник

  • Members
  • PipPipPip
  • 177 сообщений
  • ФИО:Дмитрий

Отправлено 04 ноября 2010 - 11:45

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

public function testlogin ()
{}

public function testnavigatetomodule ()
{
self::testlogin ()
...
}

/**
* @dataProvider provider
*/
public function testcase()
{
self::testnavigatetomodule ()
...
}

Более назвисимы тетсты сделать даже не знаю как.
До сих пор не разобрался с @depends...
  • 0

#18 KaNoN

KaNoN

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

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

Отправлено 04 ноября 2010 - 15:25

Тут дело не в зависимостях. Помимо тестовых методов есть еще и просто функции, которые вы можете переиспользовать в тестах. Их желательно отделить от самих тестов.

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

То есть в вашем примере это не сколько зависимость между тестами, а скорее вы просто смешиваете тесты и вспомогательный функционал воедино. А надо как раз разделять. Тогда многие вещи окажутся проще.
  • 0


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

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