Как тестировать JAVA-приложения?

В этом учебном пособии мы расскажем о компонентах Java-приложений и различных видах тестирования, которые необходимо проводить для обеспечения высокого качества ПО.

Подпишитесь на наш ТЕЛЕГРАМ КАНАЛ ПО АВТОМАТИЗАЦИИ ТЕСТИРОВАНИЯ

Содержание

Обзор J2EE-приложений

Веб-приложение на Java состоит из нескольких компонентов, каждый из которых выполняет свою важную функцию. MVC (Model-View-Controller) является наиболее популярным и часто используемым архитектурным паттерном.

Прежде чем перейти к тестированию, давайте кратко рассмотрим различные компоненты J2EE-приложения:

компоненты J2EE-приложения
  • Клиент (браузер) запрашивает веб-адрес сайта с помощью URL.
  • JSP (Java Server Pages) – это технология на стороне сервера, предназначенная для представления данных пользователю. Она поддерживает динамическое отображение данных с помощью специальных тегов, называемых JSP-тегами. JSP-теги помогают вставить Java-код в страницы HTML. Во время выполнения JSP преобразуется в Servlet. Бизнес-логика здесь обычно не пишется.
  • JSF (Java Server Faces) – это фреймворк для создания пользовательского интерфейса.
  • Servlet -это компонент веб-приложения, который обрабатывает данные, полученные от пользователя, выбирает соответствующий код бизнес-логики и передает данные в компонент Bean.
  • Enterprise Java Bean (EJB) – здесь обычно пишется вся бизнес-логика. Bean вызывает соответствующий код для чтения, записи или обновления базы данных. После завершения операций с базой данных ответ передается обратно в Servlet, который, в свою очередь, выбирает соответствующий JSP для отображения результатов.
  • Веб-сервисы – это компоненты приложения, которые работают на отдельном сервере и обмениваются данными по протоколу HTTP.
  • База данных хранит все данные приложения.

Обратите внимание, что не все веб-приложения следуют модели JSP -> Servlet -> EJB -> база данных. Большинство J2EE-приложений в настоящее время пишутся с использованием фреймворков, таких как Struts, Spring и Hibernate. Архитектура приложений может быть разной. Она зависит от размера приложения, стоимости, времени разработки и ресурсов.

Тестирование J2EE-приложений на JAVA

Теперь перейдем к тестированию J2EE-приложений. Это делается в несколько этапов. Рассмотрим пример, когда у нас в приложении есть три экрана:

  • вход в систему
  • отображение всех сотрудников организации
  • экран изменения/добавления/удаления сотрудника.

Пользовательский интерфейс (UI) для этих трех экранов разрабатывается с помощью JSP/HTML, а валидация выполняется с помощью JavaScript. Логика приложения находится в сервлете и DAO (Data Access Object). DAO – это класс для подключения к базе данных.

Ниже приведены примеры экранов:

Экран входа в систему
Экран с информацией о сотрудниках
Экран для внесения изменений в информацию о сотрудниках

Ручное тестирование Java-приложений

Во время ручного тестирования тестировщик готовит тест-кейсы из подробного проектного документа и старается охватить все возможные сценарии и фрагменты кода.

1. Модульное тестирование JAVA

Юнит-тестирование – это вид тестирования, при котором разработчики проверяют свой код на правильность и соответствие требованиям.

Рассмотрим пример экрана входа в систему. Экран имеет два текстовых поля: имя пользователя и пароль, а также две кнопки: “Отправить” и “Отменить”.

Тестовые сценарии должны охватить все циклы и условные операторы. Ниже приведены общие тест-кейсы, которые тестировщик может выполнить вручную при тестировании экрана входа в систему. Результаты затем записываются в документ с тест-кейсами. Например:

Тест-кейсОжидаемый результатФактический результатPass/Fail
1Тестировщик проверяет поля “Имя пользователя”, “Пароль”Надписи полей должны отображаться правильно и иметь нормальный размер шрифта.Имя пользователя и пароль отображаются правильноPass
2Тестировщик проверяет кнопки “Отправить” и “Отменить”Кнопки должны отображаться с правильным названиемКнопки “Отправить” и “Отменить” отображаются правильноPass
3Тестировщик проверяет цвет фона экранаФорма входа должна находиться на белом фонеВнешний вид экрана не соответствует требованиям.Fail
4Тестировщик оставляет текстовое поле имени пользователя пустымДолжно появиться сообщение об ошибке “Имя пользователя не может быть пустым”.Сообщение об ошибке “Имя пользователя не может быть пустым” отображаетсяPass
5Тестировщик вводит некоторое значение в текстовое поле имени пользователя и оставляет поле с паролем пустымДолжно появиться сообщение об ошибке “Пароль не может быть пустым”.Сообщение об ошибке “Пароль не может быть пустым” отображаетсяPass
6Тестировщик вводит имя пользователя как “abcd” и пароль как “xxxx”Должно отобразиться сообщение об ошибке “Неверное сочетание имени пользователя и пароля”.Сообщение об ошибке “Неверное сочетание имени пользователя и пароля” отображается.Pass
7Тестировщик вводит имя пользователя, состоящее более чем из 10 символовДолжно отобразиться сообщение об ошибке “Имя пользователя не должно превышать 10 символов”.Сообщение об ошибке не отображаетсяFail
8Пользователь вводит имя пользователя как “testuser” и пароль как “password” и нажимает на кнопку “Отправить”Пользователь должен увидеть экран сведений о сотруднике.Отображается экран сведений о сотрудникеPass

Тест-кейсы для тестирования экрана входа

В таблице перечислены лишь некоторые из тест-кейсов. Вот полный список:

  • Проверить, не разрешены ли NULLS для имени пользователя и пароля.
  • Проверить правильность формата имени пользователя/пароля.
  • Проверить, не разрешены ли цифры для имени пользователя.
  • Проверить, не разрешены ли специальные символы в имени пользователя.
  • Если введена правильная комбинация имени пользователя и пароля, приложение переводит вас на следующий экран, т.е. экран информации о сотруднике.
  • Проверить, правильно ли введено имя пользователя.
  • Проверить, допускает ли поле с именем пользователя превышение максимального количества символов, указанного для этого поля.
  • Проверить, отображается ли поле пароля в виде “*” при заполнении.
  • Проверить чувствительность пароля к регистру.
  • Проверить чувствительность имени пользователя к регистру.
  • Проверить, не запоминает ли страница входа имя пользователя и пароль после выхода из приложения.
  • Проверить, работают ли кнопки “Отправить” и “Отменить” в соответствии с требованиями.
  • Если пользователь использует приложение впервые, проверить, что у него есть разрешение на вход в приложение.
  • Удалить пользователя из базы данных и проверить, не может ли этот пользователь снова войти в систему.
  • Для всех вышеперечисленных случаев проверить, отображаются ли соответствующие сообщения об ошибках валидации.
  • Проверить, находятся ли кнопки в нужном месте экрана, и правильно ли они отображают текст.
  • Проверить, соответствует ли внешний вид экрана требованиям.
  • Проверить, обрабатываются ли исключения.

Просмотрев эти тест-кейсы, вы можете понять, что в основном имеете дело с тестированием полей, кнопок, функциональности и валидации определенного экрана. Это верно, поскольку модульное тестирование относится к проверке каждого фрагмента кода и компонента приложения.

Обратите внимание, что вышеприведенные тест-кейсы являются лишь примерами, а реальные тестовые сценарии готовятся на основе конкретного проекта.

2. Интеграционное тестирование

Интеграционное тестирование – это проверка того, как отдельные модули взаимодействуют друг с другом и работают вместе.

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

Вот несколько примеров интеграционных тестов для Employee Application:

  • Проверить, не обновляют/удаляют/вставляют ли другие модули какие-либо записи в базу данных без необходимости.
  • Пусть имеется поле статуса сотрудника, в котором при добавлении указывается ‘New’, при изменении – ‘Updated’, а при удалении – ‘Deleted’. Несмотря на то, что два или три экрана могут использовать одно и то же поле статуса, важно убедиться, что оно не обновляется неправильно.
  • Проверить, соответствуют ли размер экрана и внешний вид требованиям после интеграции.
  • Проверить, что при нажатии на кнопку Submit управление переходит к следующему экрану.
  • Проверить, что при нажатии на кнопку Cancel происходит отмена выполненного действия.
  • Если задействованы внешние приложения (веб-сервисы), нужно проверить, способно ли наше приложение выполнять запросы и получать данные от этих приложений.

3. Системное тестирование

При системном тестировании все приложение проверяется на функциональность и соответствие требованиям.

Вероятно, возникает вопрос: “Если Unit-тестирование каждого компонента прошло успешно, а совместная работа компонентов была проверена во время интеграционного тестирования, то зачем проводить системное тестирование?” Можно сказать, что цель системного тестирования – намеренно нарушить работу приложения.

Сценарий №1

Допустим, вы разрабатываете новое приложение для учета сотрудников с использованием фреймворка, например, Struts. В вашей компании есть еще несколько приложений, работающих на разных серверах. Однако все они вызывают один и тот же веб-сервис для получения адреса и номера телефона определенного сотрудника.

Во время интеграционного тестирования вы должны проверить, способно ли ваше приложение обратиться к веб-сервису и получить ответ. Но что, если проблема в самом веб-сервисе? Что, если веб-сервис не отвечает на редкие запросы? Вдруг веб-сервис выдает исключения для определенных форматов адресов при возврате данных?

Сценарий №2

Ваше приложение для сотрудников готово. Вы добавляете сотрудника, и приложение генерирует номер сотрудника #1001. Вы изменяете, удаляете, обновляете, добавляете, изменяете, удаляете, добавляете, добавляете, изменяете, удаляете и, наконец, добавляете еще одного сотрудника. Что, если его номер снова будет #1001?

Сценарий №3

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

Ниже перечислены некоторые важные аспекты системного тестирования:

  • Обеспечение безопасности данных.
  • Убеждение в том, что приложение соответствует всем бизнес-функциям.
  • Проверка того, хорошо ли приложение работает как конечный продукт – проверка неработающих ссылок, управления сессиями, куки, логов, обработки исключений, валидации.

4. Тестирование производительности

Этот вид тестирования проводится, когда большое количество пользователей используют приложение одновременно или в базе данных большой объем данных, или и то, и другое. Что нужно проверить в таких случаях?

  • Не зависает ли приложение, если несколько пользователей входят в систему одновременно
  • Хорошо ли приложение обрабатывает все потоки в многопоточной среде проверить.
  • Достаточно ли памяти выделено, выполняется ли сборка мусора и нет ли “out of memory” исключений в приложениях, где создается большое количество объектов.

Заключение

В этой статье мы рассмотрели компоненты J2EE-приложений. Мы также рассказали, как вручную выполнять модульное, интеграционное, функциональное и системное тестирование для каждого из компонентов приложения.

Поделитесь своими мыслями в комментариях ниже.

Перевод статьи «How to Test JAVA Applications – Tips with Sample Test Cases (Part 1)».

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *