В работе приведены результаты разработки эффективных автоматизированных тестов для проверки программного продукта «Мегаплан». Это направление является темой дипломной работы (НОУ ВПО МИГКУ, 4 курс факультет информационных технологий) одного из авторов статьи. В работе реализован алгоритм разработки эффективных автоматических тестов с наименьшими затратами на языке Java с помощью приложений IDE NetВeans, Selenium WebDriver, Maven.
Компания ООО «Мегаплан» – один из лидеров среди SaaS-провайдеров на российском рынке. [1]. В рамках SaaS Мегаплан представляет универсальные программные решения, которые позволяют ставить задачи и контролировать их выполнением, организовать совместную работу сотрудников компании, хранить документы, вести клиентскую базу и т.п. Компания ориентируется на малые и средние предприятия численностью до 300 человек [4].
Система «Мегаплан» (рис. 1) — это отечественная система управления бизнесом. Она может быть установлена как на сервер клиента, так и арендована на серверах поставщика решения «Мегаплан» (SaaS).
Рис. 1Система «Мегаплан», задачи сотрудника
«Мегаплан» работает в браузере, поэтому полностью независим от установленной ОС на компьютерах пользователей. В продукте много модулей, которые нуждаются в постоянной проверке, в связи с постоянным обновлением. Задача разработки заключалась в том, что бы автоматизировать проверку основных тестовых случаев (тест-кейсов) для проверки реализации тестируемой функции.
У продукта «Мегаплан» очень большой функционал, полная автоматизация проблематична, поэтому приходится расставлять приоритеты. Самый важный вопрос при автоматизации тестирования - какие тесты нужно автоматизировать, а какие нет. Как и любое нетривиальное решение - это проблема, которая требует учитывать не только мнение тестировщика, но и политику компании. Поэтому тестировщик должен четко представлять себе процесс разработки в компании и даже ее планы на будущее. Второй по важности вопрос - это качество тест-планов (документов, описывающих весь объем работ по тестированию). Немалую проблему составляет также работа с различными платформами и протоколами. Хороший специалист по автотестированию должен знать всю линейку современных средств в этой области, знать их преимущества и недостатки и уметь выбрать подходящий инструмент. []
Процесс тестирования включает в себя этапы проектирования, исполнения тестов и анализа результатов. На первом этапе выбираются тесты, которые наиболее производительны, т.е. находят наибольшее количество ошибок за наименьший промежуток времени. На втором этапе запускают тесты и находят ошибки программном продукте. На третьем этапе анализируют результаты, которые позволяют сделать вывод о корректной работе программного продукта.
В таблице 1 приведен пример готового теста для крайнего срока выполнения задачи:
Таблица 1 Пример готового теста
package qa.mp.tests.task; import org.testng.Assert; import org.testng.annotations.Test; import qa.mp.PrefixBase; import qa.mp.TestCase; import qa.mp.Vars; import qa.mp.elements.DeadlineElement; import qa.mp.pages.common.LoginPage; import qa.mp.pages.task.TaskCardPage; import qa.mp.pages.task.TaskData; import qa.mp.pages.task.TaskFormPage; public class AddAndRemoveDeadline_Test extends TestCase { private String prefix; private TaskCardPage card; private LoginPage login; private TaskFormPage form; private DeadlineElement deadline; @Test(groups = {"task"}) public void AddAndRemoveDeadline() throws Exception { prefix = new PrefixBase().getPrefix(getClass(). getSimpleName()); TaskData task = new TaskData() .setTaskName(prefix + ".Добавление и удаление дедлайна") .setResponsible(Vars.user_name) .setDeadlineDate("01", "05", "2020") .setDeadlineTime("15:00"); login = new LoginPage(driver); card = login.loginAs(“sveta”,”password”) .setDefaultFilters() .cleanUpTasks(prefix) .clickTaskAddButton() .fillFieldsTaskAddForm(task) .clickAddButton(); |
Assert.assertTrue(card.getTaskHeader().contains(task.getTaskName()), "'Неправильный заголовок задачи. Имя у задачи должно совпадать с заданным'" + task.getTaskName() + "'. Header name: '" + card.getTaskHeader() + "'."); Assert.assertTrue(car.getDeadline().contains("1 мая 2020 в 15:00"), "Неверный дедлайн в задаче. Дедлайн фактический: '" + card.getDeadline() + "'. Ожидаемый: ."); form = card.clickEditButton(); deadline = form.getDeadlineElement(); deadline.clearTime().clearDate(); card = form.clickSaveButton(); Assert.assertNull(card.getDeadline(), "Дедлайн есть '" + card.getDeadline() + "'. Его не должно быть."); card.clickRemoveButton() .clickAcceptRemoveButton() .getMenu().logout(); } } package qa.mp.tests.task; import org.testng.Assert; import org.testng.annotations.Test; import qa.mp.PrefixBase; import qa.mp.TestCase; import qa.mp.Vars; import qa.mp.elements.DeadlineElement; import qa.mp.pages.common.LoginPage; import qa.mp.pages.task.TaskCardPage; import qa.mp.pages.task.TaskData; import qa.mp.pages.task.TaskFormPage; Assert.assertTrue(card.getTaskHeader().contains(task.getTaskName()), "'Неправильный заголовок задачи. Имя у задачи должно совпадать с заданным'" + task.getTaskName() + "'. Header name: '" + card.getTaskHeader() + "'."); Assert.assertNull(card.getDeadline(), "Дедлайн есть '" + card.getDeadline() + "'. Его не должно быть."); |
Входная информация – логины и пароли разных правовых групп. После прохождения теста можно наблюдать результат IDE NetВeans (рис. 2).
Рис 2 Успешное прохождение теста
На самом деле автоматизировать или не автоматизировать тестирование программных продуктов зависит от специфики самого приложения. При проектировании автотестирования следует соблюдать следующее золотое правило: время разработки не должно превышать времени ручного тестирования. Для этого должны соблюдаться условия: минимизация участие тестировщика в работе скрипта, правильное планирование и выбор сценариев для автоматизации, легкая расширяемость и поддержка скрипта. К достоинствам автоматизации следует отнести возможность запускать автотесты в любое время или нескольких машинах.
Есть, конечно, и отрицательные стороны: достаточно большое время разработки, определенная затратность как на среду разработки, так и на оплату труда программистов и т.д. Надо также учитывать, что не вся функциональность поддается автоматизации. Тем не менее, автоматизация тестов помогает значительно сэкономить время на тестирование основного функционала продукта и облегчить труд ручных тестировщиков, избавив их от рутинных, ежедневно повторяющихся действий. [3]
В ходе работ было создано 8 пакетов автоматических тестов, реализующих более 100 тестовых случаев. В настоящее время все полученные результаты активно применяются в процессе разработки и поддержки вышеуказанного продукта, и продолжается разработка новых автоматизированных тестов по новому внедряемому функционалу. С помощью данных тестов было найдено более 200 критических ошибок, вследствие чего значение метрики «Количество дефектов, найденных клиентами в релизе» сократилось на 30%.
Литература
Монахов В.В. Язык программирования Java и среда NetBeans. – СПб.: БХВ-Петербург, 2011. – 704 с.
Компания Мегаплан [Электронный ресурс] - Режим доступа: http://www.megaplan.ru
Сайт статей по тестированию [Электронный ресурс] - Режим доступа: http://www.software-testing.ru –
Сайт «Компьютерная неделя» [Электронный ресурс] - Режим доступа: http://www.pcweek.ru/?ID=613301