Вначале, короткий анонс – у нас появился ещё один блог. О чём он? Подробности здесь.
Наш, в общем-то, небольшой тест работает около 5 минут. Напомним, мы пока тестируем два простых объекта приложения Recruiting – Websites и Account. Собственно, объекта Account, как такового, не существует – мы объединяем в него функции, связанные с логином и логаутом.
Для справки: наш Selenium Grid находится в Украине, а приложение SalesForce находится в США. А интернет у нас – 2 Mb ADSL от Укртелеком.
Кроме Websites, в приложении Recruiting есть ещё десяток объектов, причём гораздо более сложных, чем Websites. Конечно, тест каждого из них будет выполняться по возможности параллельно с остальными, но всё равно работа тестов может оказаться неприятно долгой. Уже сейчас стоило бы подумать о том, как можно придать им ускорение.
Один из способов сократить время тестирования – не ждать загрузки всей страницы до конца. Бывает, что всё, что необходимо для тестирования страницы, грузится очень быстро, а львиная доля ожидания уходит на догрузку какой-нибудь картинки.
Отлично иллюстрирует эту мысль страница логина SalesForce. Обратите внимание, как быстро загружаются поля ввода логина и пароля, и сколько грузится флешка справа.
Её и будем использовать для экспериментов.
Read the rest of this entry »
6 comments | Print this post
Как вам должно быть уже известно, мы осваиваем нелегкое дело автоматизированного тестирования с использованием Selenium Grid. О нашем прогрессе мы регулярно отчитываемся в блоге. Одна из прелестных вещей, которые делают такими счастливыми тестировщиков – это выполнение тестов по расписанию и без участия самих тестировщиков. Мы тоже хотим немножко счастья и поэтому решили сделать для себя “запускалку”.
Делать что-то для себя – настоящая сказка для любого профессионала, а мы к таковым себя причисляем. Чувство всемогущества распирает изнутри и даже затмевает тот факт, что совершенно непонятно, как именно реализовать поставленную задачу. Ясно только одно – процесс составления расписания должен быть очень простым, удобным и позволять реализовывать наибольшее количество реальных сценариев. Поскольку наш опыт тестирования не столь велик, то мы могли бы создать интерфейс, устраивающий только нас. С другой стороны, нам стало интересно как это делают те, кто используют Selenium давно и на реальных приложениях. Тут то и родилась идея узнать об этом (и не только) у наших читателей.
Read the rest of this entry »
No comments | Print this post
Теперь, когда классы, которые умеют тестировать страницы SalesForce, в общем-то сносно выполняют взятые на себя обязательства, чего нам не хватает?
Собственно, на этот вопрос мы ответили ещё в конце этого
поста:
Сотворение – День первый (вечер)
1) нет фатальных ошибок – что бы ни случилось, тесты вращаются дальше с новыми ошибками;
2) логирование – в логах есть вся информация, но она совсем сырая, сложно обрабатывать;
3) уже можно немного запутаться в коде – мало комментариев;
4) никак не используется возможность выполнять тесты параллельно – у нас только один тест
и даже успели обсудить первую проблему.
Самое время заняться вторым вопросом – представлением и обработкой информации, полученной во время тестирования.
Вопрос, как должны выглядеть отчёты – а следовательно, что содержать логи – и как обеспечить удобную работу с ними, волновал нас уже давно.
Очень приятно, что твои тесты делают кучу рутинной работы по проверке элементов, но кто узнает об этом? Хочется, чтобы тесты подготавливали удобный отчёт о проделанной ими работе и найденных ошибках, а не текстовый файл, который и открыть-то страшно.
В версии 54, которую мы рассматривали, логи содержали практически всю информацию, которую можно было как-либо использовать для анализа ошибок. Но хранилась она в текстовом файле, и, честно говоря, постороннего человека могла скорее напугать, чем обрадовать. Кроме текстовых логов, делались скриншоты, а перед началом теста можно было установить уровень сообщений, которые будут записаны в лог (info, warn, error). Подробно об этом представлении логов написано здесь.
Нас волновали несколько вопросов, связанных с логами.
Read the rest of this entry »
No comments | Print this post

С одной стороны, “Login” конечно же объект Recruiting, но с другой стороны без него никак не обойтись другим объектам приложения. Как быть?
Точнее будет сказать, что “Account” это объект, а “Login” это функциональная его часть. Посольку мы не создавали в приложении объект “Account”, то конечно же мы можем его и не тестировать. Мы можем этого не делать ещё и потому,что всё равно не сможем написать полный набор тестов для него.
Если мы будем рассматривать “Account” как отдельный объект, можно сравнить действия, которые с ним можно произвести, с действиями над другими объектами.
Если провести параллели, то регистрация учётной записи это добавление, тогда как логин это по сути поиск. Ну а редактирование или удаление такой записи обычно находится где-нибудь в настройках учётной записи, прячущихся где-нибудь за Settings или Profile в UI.
Так что полный набор тестов для объекта “Account” в общем случае должен включать – регистрацию, логин, логаут, редактирование профиля, включая восстановление пароля, а также удаление регистрационной записи.
Read the rest of this entry »
1 comment | Print this post

Ответу на вопрос
“После каких событий нужно останавливать все тесты?”
посвящается.
В этот раз мы сразу перечислим фатальныe ошибки, а потом расскажем более подробно о некоторых из них.
Итак, основной список фатальных ошибок:
1. Нет сервера Selenium
2. Неудачный логин
3. Отсутствует элемент
4. Нельзя сохранить запись с known-good-values (KGV) значениями
5. Появление неправильной страницы
Большинство из этих ошибок проявятся в самом начале тестирования. Если их не будет – думаю, дальше тесты будут работать без проблем.
Несмотря на это, мы добавили ещё несколько фатальных ошибок, которые при нормальной работе вроде бы не должны возникнуть, в дополнительный список:
6. Неудачная попытка заполнить поле значением
7. Cлишком много обычных ошибок
Read the rest of this entry »
No comments | Print this post

После окончания цикла постов о первой рабочей версии тестов на Java нам нужна была пауза для того, чтобы решить, о чём собственно писать дальше.
Пока мы пишем мемуары – то есть, описываем процесс, уже пройденный нами, заглядывая в наш внутренний командный форум. Но скоро, совсем скоро, процесс работы над кодом и публикации синхронизируются, и дальше процесс пойдет параллельно.
Если вы постеснялись спросить о версии на PHP – отвечаем. Алёна потеряла интерес к происходящему “на подмостках”. Так бывает – жисть она такая штука…
Версия лежащая в SVNе работоспособна и примерно соответствует версии 54 на Java. Мы не бросим PHP просто потому, что любим его. Саша будет вести дальнейшую работу над ней.
Итак – о чём мы будем писать дальше.
Read the rest of this entry »
No comments | Print this post
Если в Setting.java установлены следующие настройки:
public static final Boolean LOG_INFOS = true;
public static final Boolean LOG_VERBOSE = true; |
, практически каждое действие, которое выполняют тесты, будет отображено в логах.

время создания
уровень (log4java)
в общем-то, достаточно бесполезная информация.
пометка, что это Verbose log
анонс
а вот так будут выглядеть логии
Класс и метод, в котором был вызван метод класса Logger log4java. Тоже в общем бесполезная часть – т.к. функции логгера не вызваются напрямую и поэтому не знают настоящего класса и метода
Заполняем элемент elementName значением из его поля validValue – value.
Действия, от которых ожидался какой-то конкретный результат, могут завершаться сообщением
(OK) или (ERROR).
Кроме того, сообщения об ошибках окружаются
!!!— error_message —!!!
для привлечения внимания
Несколько примеров.
11:25:12,156 INFO pool-1-thread-1 utils:info:? - (V)Tab opening started
11:25:13,453 INFO pool-1-thread-1 utils:info:? - (V)Tab opened: title is Employment Websites: Home ~ Salesforce - Developer Edition
Read the rest of this entry »
No comments | Print this post
И Я сказал: да будет код! И тут стал код.
…Если возможный создатель нашей голубой планетки и всего-всего-всего выполнил эту огромную работу лишь за неделю, я бы предположил, что к началу работы у него была тщательно подготовленная спецификация.
Хотя в канонических текстах это и не отображено, но иначе быть не могло: сложно вот так вот взять, и сразу, без раздумий сделать что-то из ничего.
Перед тем, как начать писать код, который будет тестировать приложение SalesForce, мы провели ужасно много времени, уточняя для себя эту задачу. Результаты, которые мы хотим получить, что именно, в каком порядке и как именно будем проверять – всё это из, так сказать, первичного бульона, а скорее – каши мыслей, превратилось в довольно стройную систему, и дело осталось за малым – спуститься на землю.
Начнём с чего-то глобального – общих функциий, которые будут использовать другие классы.

Общие функции, которые будут использовать другие классы.
В частности, это функции-обертки для методов драйвера Selenium. Они нужны для того, чтобы перехватить и обработать исключения, которые генерируются драйвером при ошибках.
Кроме того, этот класс включает в себя функции для логирования (с использованием log4x).
Общие для всех классов константы
Для хранения параметров, которые может понадобиться поменять
Рисунок 1
Read the rest of this entry »
No comments | Print this post
В качестве утренней зарядки предлагаем запустить первую работоспособную версию тестов на Jave (Revision 54). Мы исходим из предположения, что среда уже установлена. Один из вариантов описан нами в ‘Установка среды’.
Самое главное – вам понадобится собранное приложение Recruiting (на самом деле, пока будет достаточно иметь только объект Employment Websites этого приложения).
При создании Recruiting хорошо бы точно следовать инструкции – до буквы. Иначе, будет много ошибок и в них будет сложно разобраться. Для последней версии тестов это не критично – как раз все отклонения будут удобно предъявлены (но мы будем обсуждать её позже).
Если у вас нет приложения, то вам придётся ограничиться анализом кода и просмотром лог файлов (в следующей публикации). Ну, а если вы потратили время и всё-таки собрали приложение Recruiting, – остаётся лишь настроить запускалки и сконфигурировать тесты.
Сначала достаём требуемую версию из SVN репозитория…

Рис. 1 http://deepshiftlabs.com/svn/tests/trunk/salesforce/java
Read the rest of this entry »
No comments | Print this post
К сожалению, для вас, дорогие читатели, работаем мы гораздо быстрее, чем публикуемся. Где бы найти часы с циферблатом на шестнадцать, которыми, по нашим сведениям, пользуются все подробно пишущие о своей работе?
Вот и сейчас пишу и ловлю себя на мысли о том, что описываю наше понимание около трёх месяцев назад. Где-то я уже это слышал? Кажется в планетарии, в детстве? Про свет далёких звёзд, который доходит до нас через миллионы лет …, а на языке почему-то упрямо вертится рекламный слоган “Оставайтесь с нами ещё три месяца, чтобы узнать о нашем сегодняшнем понимании тестирования, и вы не пожалеете!”
Наша задача сегодня прооперировать такой просто-непростой организм Рекрутингового социума как ‘Веб сайт’.
В процессе операции мы напишем подробную инструкцию по тестированию каждой его части в отдельности и сообща. Так заточим наши скальпели, господа, дадим пациенту хлороформу и приступим, помолясь!

Рис. 1 Пациент
Read the rest of this entry »
7 comments | Print this post