Selenium - среда для функционального тестирования.

syfisher

TDD infected!!
Selenium - среда для функционального тестирования.

Selenium - http://selenium.thoughtworks.com/index.html

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

Selenium полностью эмулирует работу реального пользователя, позволяет ходить по страницам сайта при помощи браузера, как если бы это был реальный пользователь.

Selenium не требует инсталяции каких-либо модулей в браузер, работает на большинстве браузеров и систем.

Я хочу поделиться небольшим опытом внедрения данного продукта.

Что понравилось:
1) Очень легко установить. Мне потребовалось не более 1 часа, чтобы установить систему и настоить пару проектов на ее использование. Все, что необходимо для каждого проекта - это наличие файлов:
* TestRunner.html (index.html) - немного модифицированный TestRunner.html, идущий в базовой поставке для шаринга одной инсталяции Selenium-а использования несколькими проектами для запуска тестов.
* domviewer.html - тоже самое. для просмотра DOM-а документа.
* TestRunner-splash.html - по желанию, если хотите всавить комменты в стартовую страницу системы тестирования.

2) Тесты легко организуются. Все тесты лежат в проекте в папке /tests. Все тесты проекта описываются файлом TestSuite.html, который есть простой html файл:

Код:
<html>
<head>
<meta content="text/html; charset=win-1251"
http-equiv="content-type">
<title>Test Suite</title>
</head>
<body>
<table cellpadding="1" cellspacing="1"  border="1">
        <tbody>
            <tr><td><b>Test Suite</b></td></tr>
            <tr><td><a href="./TestOpen.html">TestOpen</a></td></tr>
            <tr><td><a href="./TestLoginPage.html">TestLoginPage</a></td></tr>
            <tr><td><a href="./TestSearch.html">TestSearch</a></td></tr>
        </tbody>
    </table>

</body>
</html>
3) Легкость написания тестов.
Каждый TestCase это также обычный html файл. Файл представляет из себя обыкновенную таблицу с тремя колонками: команда, цель, значение.

Код:
<html>
<head>
  <meta content="text/html; charset=ISO-8859-1"
 http-equiv="content-type">
  <title>Test Open</title>
</head>
<body>
<table cellpadding="1" cellspacing="1" border="1">
  <tbody>
    <tr><td rowspan="1" colspan="3">Test Open</td></tr>
    <tr><td>open</td><td>./tests/html/test_open.html</td>      <td>&nbsp;</td></tr>
    <tr><td>verifyTextPresent</td><td>This is a test of the open command.</td><td>&nbsp;</td></tr>
    <tr><td>type</td><td>username</td><td>TestUser</td></tr>

   </tbody>
</table>
</body>
</html>
Никакого кода. Минимум знаний. Тесты можно писать WYSIWYG-редактором!

4) Систему легко расширять. Она написана в очень хорошем ООП стиле. На систему есть как приемочные, так и модульные тесты. В поставке системы идет еще и jsUnit.

5) Скорость. До этого мы пользовались webTester, входящий в SimpleTest. Чисто визуально скорость выше. Ну и конечно, не требуется никаких QA-ков, методично прокликивающих сайт. Selenuim делает это в сотни раз быстрее.

Что не понравилось:

1) Не слишком полная документация. Мало примеров. Хотя для повседневного использования ее хватает.
2) Есть определенные проблемы с popup-окнами. Если вставлять assert-ы сразу же после команды, которая открывает popup-окно, то среда тестования не ждет, пока новое окно загрузится, что приводит к failure-ам. Приходится вставлять команды pause, что замедляет выполнение тестов.
3) Есть проблема с фикстурами (начальными состояниями до тестов). Пока я думаю использовать специальные соглашения: каждый тест должен в начале приходить на страницу с setUp составляющем, а в конце с tearDown. Например, так:
Код:
<html>
<head>
  <meta content="text/html; charset=ISO-8859-1"
 http-equiv="content-type">
  <title>Test Open</title>
</head>
<body>
<table cellpadding="1" cellspacing="1" border="1">
  <tbody>
    <tr>
      <td rowspan="1" colspan="3">Test Open<br>
      </td>
    </tr>

    <tr><td>open</td>  <td>/tests/selenuim/fixtures/TestOpenSetUp.php</td><td>&nbsp;</td>    </tr>
   [...]
<tr><td>open</td><td>/tests/selenuim/fixtures/TestOpenTearDown.php</td><td>&nbsp;</td></tr>

   </tbody>
</table>
</body>
</html>
Ну вот пока и все. Если появятся какие-либо интересные моменты, то отпишу.
 

pachanga

Новичок
Да, да, да, этот тот самый продукт, о котором я все вспоминал и никак не мог вспомнить название на конфе, когда меня мучили с вопросом, что сложную javascript логику ничем, кроме команды QA-щиков не протестировать :)
 

syfisher

TDD infected!!
Спешу добавить еще один фактик в плюс, на который я поначалу не обратил внимание - это то, что тесты можно выполнять пошагово, наблюдая за результатом.

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