Надежные тесты для автоматизации тестирования Android приложений с Robotium |
18.05.2012 11:11 |
Автор: Андрей Дзыня Не так давно я закончил первую статью из цикла автоматизации мобильных приложений. Я попытался максимально полно дать информацию по установке требуемого окружения, для разработки и автоматизации тестирования NativeAndroid приложений, при помощи инструмента Robotium. В конце той статьи был приведен пример простого теста. Давайте еще раз взглянем на него.
Ничего не понятно (или мало что понятно), скажете Вы и будете правы. Эти тесты выглядят только как вызов API инструмента. Набор функций, которые понимает Robotium, но не тестировщик. Что же стоит делать в таком случае? Как сделать тесты более читабельными, полезными и чтобы в них можно было как можно быстрее разобраться? Давайте начнем с небольшой теории. Для тех, кто уже успешно занимался web автоматизацией, текст ниже можно не читать. Существует некий подход по именованию классов и функций, который получил название DSL (DomainSpecificLanguage). В чем суть этого подхода? Wikipedia Языки программирования предметной области, дополненные технологиями метапрограммирования, являются эффективным средством автоматизации разработки программного обеспечения и в настоящий момент находят широкое применение в области информационных технологий. Процесс создания нового предметно-ориентированного языка состоит из трех шагов:
Для тех, кто не понял: DSL это описание классов и функций в зависимости от предметного домена приложения, которое Вы разрабатываете. Например:
Каждая из отраслей (доменов) содержит в себе функции с разным именованием, хотя, иногда, могут выполнять одну и ту же функциональность. Надеюсь с этим понятно. Что еще нам нужно знать для того чтобы писать хорошие тесты? Из web автоматизации большинству из нас известен паттерн PageObject (впервые его опубликовал Martin Fauler,но с немного другим названием WindowDriver). Существует немало споров как лучше организовать эту модель и стоит ли делать ее вообще. Я поделюсь своим опытом, на основании десятка автоматизированных как веб, так и мобильных проектов. Так как мы будем говорить о мобильной разработке, то слово PageObject уже не подходит, так как у Native приложений не страницы, а экраны. Назовем, этот паттерн, условно, ScreenObject. Теперь давайте представим, что экран со списком заметок (рис 1) это Java класс. Рис. 1 А все функции, которые можно выполнить на этой странице это JavaMethods. Получим, что-то вроде вот этого. package com.jayway.screens; public class NotesListScreen extends BaseScreen<NotesList> { public NotesListScreen(Solo solo) { То есть мы получили класс NotesListScreen с перечнем всех функций на этом экране. Функции получились пустышки, и нам нужно их реализовать. Давайте начнем с функции clickAddNote(). Добавляем Robotium вызов, который нажмет на эту кнопку. Оп, и что произошло? После нажатия на эту кнопку мы попали на совсем другой экран - AddNoteScreen. Нам это так же нужно запрограммировать в методе public AddNoteScreen click AddNote() { Что получилось, созданный метод будет возвращать объект уже нового экрана, у которого будут уже свои методы по работе только с экраном AddNoteScreen. Это было ключевое, дальше лишь дело техники. Как будет выглядеть конечный тест? package com.jayway.test; public class NotePadTest extends BaseTestCase { private static final String EDITED_TEST = “Edited Test”; @Smoke } Теперь тест стал намного читабельней, не так ли? Java код начинает выглядеть как обычный тест- кейс, при этом мы видим смену экранов по который "прыгает" пользователь. Видите как быстро, и не очень сложно мы разобрались с тем как писать правильные тесты на Robotium. Так же Вы могли заметить, что у меня появился некий базовый класс, от которого унаследован мой тест. Так же у каждого экрана есть унаследованный класс BaseScreen. Эти классы содержат в себе вспомогательные методы, для работы с тестом и экранами. Более детально мы сможем их разобрать в следующих уроках. Спасибо за внимание. P.S. Вчера Андрей начал читать новый онлайн тренинг Автоматизация тестирования Android приложений. Хотите присоединиться к группе и получить первое занятие в записи? Пишите на Этот e-mail адрес защищен от спам-ботов, для его просмотра у Вас должен быть включен Javascript |