Наш блог
Показать рубрики

Запуск SeleniumIDE тестов на нескольких доменах

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

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

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

Такой тест, который запускается на разных доменах, должен быть независимым от него. Сложность появляется тогда, когда такие тесты в своей работе должны работать со ссылками. Например, один из ваших тестов в работе должен проверят корректность ссылок в списке товарах и фильтре по товарам. Но такие функции в SeleniumIDE, как assertLocation(), возвращают абсолютную ссылку включая домен. Если мы хотим запускать такой тест на нескольких доменах, то жестко вписывать домен для проверки нельзя. Ниже я покажу как можно решить эту проблему.

Ввод в тест-кейсы собственных переменных

Как можно догадаться из подзаголовка - в SeleniumIDE можно заводить свои переменные и использовать их внутри тест-кейсов. Таким образом мы можем ввести переменные, в которых будем хранить данные по текущей тестируемой среде. Для этого можно ввести дополнительный тест-кейс в текущем тест-сьюте (подробнее о тест-сьютах и тест-кейсах в нашей статье про введение в Selenium IDE).

Создадим новый тест-кейс, назовем его set-environment и поставим его на первое место в тест-сьюте. На вкладке Source в интерфейсе SeleniumIDE введем такой код:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
    <head profile="http://selenium-ide.openqa.org/profiles/test-case">
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
        <link rel="selenium.base" href="http://example.com/" />
        <title>set-environment</title>
    </head>
    <body>
        <table cellpadding="1" cellspacing="1" border="1">
            <thead>
                <tr><td rowspan="1" colspan="3">set-environment</td></tr>
            </thead>
            <tbody>
                <tr>
                    <td>store</td>
                    <td>http://example.com</td>
                    <td>currentEnv</td>
                </tr>
                <tr>
                    <td>storeEval</td>
                    <td>window.document.domain</td>
                    <td>host</td>
                </tr>
                <tr>
                    <td>storeEval</td>
                    <td>window.location.port.length > 0 ? ':' + window.location.port : ''</td>
                    <td>port</td>
                </tr>
            </tbody>
        </table>
    </body>
</html>

Вернувшись на вкладку Table вы увидите такое содержимое:

В нашем тест-кейсе происходит определение трех переменных:

  • currentEnv - в этой переменной мы задаем адрес тестового окружения. Это может быть локальная копия сайта, тестовая площадка или боевой сайт. Т.е., чтоб запустить тест на копии сайта на другом домене, все, что нам нужно поменять во всем тест-сьюте, так это только значение этой переменной.
  • host - отдельно сохраняем хост тестируемого сайта. Эта переменная инициируется динамически из JavaScript объекта window.document
  • port - отдельно сохраняем порт тестируемого сайта. Часто локальные копии сайтов на локальных серверах программистов работают по нестандартному порту, по этому такие случаи тоже нужно учитывать. Эта переменная инициируется динамически из JavaScript объекта window.location

Теперь при каждом запуске тест-сьюта будет происходить инициализация этих переменных и они будут доступны в тест-кейсах ниже по порядку, чем set-environment. Ниже используется сокращенная нотация описания вызова команды в SeleniumIDE: через символ | перечислены значения полей Command, Target и Value соответственно. Вот как теперь можно использовать эти переменные.

Открыть страницу каталога текущего тестируемого окружения:

open|${currentEnv}/catalog/|

Проверить, что текущая ссылка в адресной строке браузера равна /catalog/ с учетом текущего домена:

assertLocation|http://${host}${port}/catalog/|

Как видно, к переменным можно обратиться написав ее название в фигурных скобках, вот так: ${host}

Таким образом мы решили проблему запуска одного и того же тест-сьюта на разных тестовых окружениях без изменения самих проверок. Нам нужно изменить лишь одну переменную для запуска этих же тестов на другом домене проекта.

Назад к списку статей
Подпишись на наш блог: