Scientific journal
Modern high technologies
ISSN 1812-7320
"Перечень" ВАК
ИФ РИНЦ = 0,940

1 1 1
1 Russian State University for the Humanities
1448 KB

В работе приведены результаты разработки эффективных автоматизированных тестов для проверки программного продукта «Мегаплан». Это направление является темой дипломной работы (НОУ ВПО МИГКУ, 4 курс факультет информационных технологий) одного из авторов статьи. В работе реализован алгоритм разработки эффективных автоматических тестов с наименьшими затратами на языке Java с помощью приложений IDE NetВeans, Selenium WebDriver, Maven.

Компания ООО «Мегаплан» – один из лидеров среди SaaS-провайдеров на российском рынке. [1]. В рамках SaaS Мегаплан представляет универсальные программные решения, которые позволяют ставить задачи и контролировать их выполнением, организовать совместную работу сотрудников компании, хранить документы, вести клиентскую базу и т.п. Компания ориентируется на малые и средние предприятия численностью до 300 человек [4].

Система «Мегаплан» (рис. 1) – это отечественная система управления бизнесом. Она может быть установлена как на сервер клиента, так и арендована на серверах поставщика решения «Мегаплан» (SaaS).

prog1.tif

Рис. 1. Система «Мегаплан», задачи сотрудника

«Мегаплан» работает в браузере, поэтому полностью независим от установленной ОС на компьютерах пользователей. В продукте много модулей, которые нуждаются в постоянной проверке, в связи с постоянным обновлением. Задача разработки заключалась в том, что бы автоматизировать проверку основных тестовых случаев (тест-кейсов) для проверки реализации тестируемой функции.

У продукта «Мегаплан» очень большой функционал, полная автоматизация проблематична, поэтому приходится расставлять приоритеты. Самый важный вопрос при автоматизации тестирования – какие тесты нужно автоматизировать, а какие нет. Как и любое нетривиальное решение – это проблема, которая требует учитывать не только мнение тестировщика, но и политику компании. Поэтому тестировщик должен четко представлять себе процесс разработки в компании и даже ее планы на будущее. Второй по важности вопрос – это качество тест-планов (документов, описывающих весь объем работ по тестированию). Немалую проблему составляет также работа с различными платформами и протоколами. Хороший специалист по автотестированию должен знать всю линейку современных средств в этой области, знать их преимущества и недостатки и уметь выбрать подходящий инструмент [4].

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

В таблице приведен пример готового теста для крайнего срока выполнения задачи/

Входная информация – логины и пароли разных правовых групп. После прохождения теста можно наблюдать результат IDE NetВeans (рис. 2).

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

Пример готового теста

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() + «‘. Ожидаемый: <1 мая 2020 в 15:00>.»);

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() + «‘. Его не должно быть.»);

prog2.tif

Рис. 2. Успешное прохождение теста

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

В ходе работ было создано 8 пакетов автоматических тестов, реализующих более 100 тестовых случаев. В настоящее время все полученные результаты активно применяются в процессе разработки и поддержки вышеуказанного продукта, и продолжается разработка новых автоматизированных тестов по новому внедряемому функционалу. С помощью данных тестов было найдено более 200 критических ошибок, вследствие чего значение метрики «Количество дефектов, найденных клиентами в релизе» сократилось на 30 %.