Меня зовут Олег Строкатый и я руковожу отделом контроля качества в компании 1С-Битрикс и Битрикс24.
На летней партнерской конференции 2015 года я со сцены заявил, что совсем скоро будет выпущена первая ознакомительная версия фреймворка для создания ваших автоматизированных тестов.
Прошло совсем немного времени и сегодня я рад представить вам Bitrix AQA версии 1.0 - фреймворк для автоматизированного тестирования на базе Selenium WebDriver!
Проект выложен на
[spoiler]
Наш фреймворк это набор классов и методов, часть из которых являются переопределенными для нашего удобства методами самого Selenium. Сейчас в поставке:
- набор классов и методов для автоматизации веб-проектов, ядро фреймворка
- урлчекер. Метод проверяющий все урлы сайта
- компонент чекер. Метод, проверяющий все компоненты, находящиеся в папке bitrix
- логинование
- снятие скриншотов
- методы работы с почтой
- SQLExecutor, позволяющий выполнять SQL запросы к БД
- необходимые библиотеки для этого. В частности сам Selenium WebDriver версии 2.47.0 (на сегодняшний день уже есть версия 2.48.0, просто обновите ее в проекте через NuGet), библиотеки вспомогательных классов WebDriver Support, а также ChromeDriver, IEDriver, MysqlData. FireFoxDriver встроен по умолчанию в Selenium и не требует дополнительной установки.
Фрейморк содержит простенький интерфейс запуска автотестов, с выведенной текстовой областью для логирования выполняемых тестов.
Давайте кратко пробежимся по структуре проекта.
Основные методы навигации в браузере и взаимодействия с элементами интерфейса собраны в классах BitrixFramework и WebItem. Файл Framework.cs. Все методы находящиеся в неймспейсе BitrixAQA являются ядром проекта и могут быть изменены без уведомления. Поэтому при необходимости кастомиации их необходимо переопределить.
В случае с классом WebItem, методы выполняются для экземпляров класса, которые являются объектами интерфейса. Все тестовые объекты тестируемого веб-сайта, то есть кнопки, текстовые поля, выпадающие списки и пр. хранятся в соответствующих файлах .cs с префиксом TO_ в каталоге Selenium/Object Repository/. Мы предлагаем их разбивать по модулю или по смыслу. В нашем демо-примере мы разбили объекты по модулям, main и sale. Также есть хранилище для общих объектов general, которые не относятся к какому-либо модулю. В поставку мы включили демонстрационный набор объектов из административной части Битрикс Управление сайтом.
Для удобства идентификации объектов мы рекомендуем в их именах использовать префиксы для представления того, каким контролом они являются, и какие действия предполагается с ними совершать. Например, Checkbox_Cancelled, Dropdown_Status, Region_Payed, Button_Cancel и пр.
Тестовые кейсы расположены в каталоге Selenium/Test Cases/ в соответствии с их принадлежностью тестовым сценариям и модулям. Например, в каталоге Selenium/Test Cases/Modules/ есть каталоги Main и Sale, в которых реализованы демо-тесты для главного модуля и модуля магазин соответственно. Для примера мы приложили несколько демо-тестов. Для удобства каждый из них содержит класс запуска тестовых сценариев с методом запуска Run (например, класс Case_Main_Run). В свою очередь вызываемые в этом методе тестовые сценарии находятся в соответствующих классах, согласно их функциональному разделению (например, методы проверки регистрации пользователей находятся в классе Case_Main_Users).
Каталог Selenium/Scenarios/ содержит описание тестовых сценариев. Для тех, кто хочет хранить в проекте сценарии своих автотестов. В качестве примера мы приложили один файл сценария.
В каталоге Selenium/TestFiles/ находятся различные тестовые файлы, используемые в процессе тестирования.
Еще немного по структуре проекта:
- Каталог Selenium/General/ содержит методы и классы, не относящиеся к конкретным тестовым кейсам модулей, а реализующие общую функциональность. Также в этом каталоге находятся специализированные проверки (проверка урлов сайта на наличие специфических ошибок на страницах, проверка компонентов сайта).
- CheckUrls В этом классе реализована проверка урлов на наличие специфических ошибок (в интерфейсе приложения вынесено на отдельную закладку). Тест проверит заданный урл (или список урлов) на наличие JavaScript ошибок, а также различных сообщений, содержащих ряд ключевых слов (вроде error или exception). Аналогично тест рекурсивно обойдет все ссылки, найденные на странице (с поправкой на ряд заложенных правил и исключений).
- ComponentsTest В этом классе реализован функционал теста компонентов (в интерфейсе приложения вынесено на отдельную закладку). Тест проверит компоненты установки на наличие ошибок при их вызове без параметров. Однако следует отметить, что не все компоненты предполагают такой вариант вызов, но вы можете добавить свой.
- GeneralMethods класс содержит некоторые общие для тестовых сценариев методы, относящиеся непосредственно к браузеру или сайту (вроде проверки страницы на ошибки или выполнения Java Script на странице)
- TestUsers класс служит для работы с пользователями и их атрибутами в тестах
В каталоге General/ содержатся классы и методы, не относящиеся непосредственно к Selenium, подобно классу работы с почтой, или классу работы с SQL.
- Log в этом классе собраны методы для логирования действий, выполняемых в процессе автотеста, а также результатов проверок. Информация выводится как в интерфесе приложения, так и логируется в файл log.html (создается в процессе работы). При каждом запуске приложения информация из файла log.html копируется в файл ArchiveLog.html (создается в процессе работы), а сам файл log.html очищается.
- Options в этом классе реализованы методы по работе с файлом options.xml, в котором хранятся настройки тестируемой среды. В основном класс реализует взаимодействие файла и интерфейса приложения. Однако присутствует метод GetOption, который позволяет получить необходимую настройку из файла в процессе теста.
- Pop в этом классе находятся некоторые основные методы по работе с электронной почтой посредством протоколов POP3 и SMTP. В основном методы служат для получения атрибутов писем, ссылок из текста письма, а также отправки или проверки доставки электронной почты.
- ScreenCapture класс содержит методы для сохранения снимков экрана в процессе работы автотестов. Следует заметить, что для получения ожидаемого результата браузер в процессе теста должен быть на переднем плане.
- Shared класс содержит различные методы, не относящиеся к браузеру как таковому, например работу с файлами или процессами.
- SQL класс содержит методы по работе с базами данных.
- SQLExecutor класс реализует функционал выполнения sql запросов непосредственно из интерфейса приложения и вывод результатов выполнения этих запросов.
Интерфейс реализован в классах MainForm и OptionsForm соответственно. В первом реализованы основные органы управления запуском тестов и их составом, а во втором находятся основные настройки тестируемой среды. Эти настройки сохраняются в файле options.xml и подгружаются из него при запуске приложения. Для работы с настройками используются методы из класса General\Options.
Почти все методы снабжены подробным summary с описанием их назначения, принимаемых значений и возвращаемых результатов.
Как запустить демонстрационные тесты?
1. В настройках указываем путь к папке сайта на диске:
2. На вкладке Урлы установок указываем урл, по которому открывается тестируемый сайт
3. На вкладке Разное необходимо задать настройки Firefox, если тесты предполагается запускать в firefox, а также строкe подключения к mysql и порт, по которому он отвечает.
4. В разделе Пользователи мы уже вбили два тестовых пользователя, но необходимо задать им email адреса.
5. Выбрать браузер, тест, и нажать кнопку Делать
Коллеги, я специально не привел пример создания автотестов в нашем фреймворке. Сейчас мне важно узнать, на сколько он понятен сам по себе. Для того, чтобы начать создавать свои автотесты достаточно иметь уровень знаний в области программирования на любом языке "немного выше начальных". Ваши возможности автоматизации теперь ограничены лишь вашими знаниями программирования и C#. Так, например, с помощью нашего фрейморка мы организовали Continuous Integration, сборку и установку дистрибутивов, работу с виртуальными машинами, ночное тестирование и пр. Возможно, в будущем я напишу несколько статей по возможностям фреймворка и другим хитростям. Также, возможно, будут запланированы вебинары.
Коллеги, хорошего вечера и жду от вас обратную связь.
Фото:
В случае, если вы собираетесь использовать фреймворк Bitrix AQA, то вы правильно понимаете.
К сожалению, плохо читаю по скриншотам, Владимир. Слова понимаю лучше. Сможете написать, что вы хотели сказать?
2. Querry - лишняя "r".
Ваш К.О.
Поправил.
А где под БУС
Спасибо, что выложили свои наработки, но разработчики ждут нормальный фреймворк для тестирования в ядре, т.е. PHP все дела
Да, мне тоже немного жаль, что придётся заставлять разработчиков ковыряться в коде, который они не знают или успели забыть. Но честно говоря, это всего лишь вопрос выбора - не использовать тесты вообще или использовать их в рамках того инструмента, что дают.
Специально для вас никто ничего делать отдельно (тем более в таком масштабе) не станет. С нами просто делятся имеющимся инструментарием (чуть подпилив его и убрав все свои тесты, чтобы не палиться.
А преимущества для себя я вижу в готовых методах работы с веб-объектами, в том числе встроенная проверка на наличие ошибок после взаимодействия с ними.
и пытаться интегрировать код в наши решения (которые тоже на С# написаны)...
Я может чего-то сильно не понимаю, а может за слишком суровыми проксями сижу, но у меня при попытке "делать" с дефолтными пустыми данными или любым УРЛом в урлчекере либо ничего не происходит, либо падает с ошибкой выхода из диапазона значений.
Единственное чего смог добиться - пустое окно FireFox открылось и всё.
Никаких телодвижений.
Хром и Ослик вообще игнорируют.
Опять же не понятно, вот есть например набор сценариев для Selenium IDE, как их перенести в ваш фреймворк? Они ведь могут быть экспортированы в несколько разных форматов, но дальше-то что с этой красотой делать?
Возможно я уже слишком далеко отошёл от .NET, но что-то совсем не интуитивно.
P.S. почему в настройках вашего проекта есть только настройки для лисы? А как же Хром и ослик? Предполагается что эти настройки разработчик должен сам под себя допилить, если нужно?
Отвечу вам чуть позже.
P.S. в целом не понятно как этим всем пользоваться. Ничего работоспособного не видно...
Возможно ли его восстановить?
Возможно псть более актуальная информация по теме?