Реализовать клиент для работы с FTP сервером, на котором расположен файл с информацией о студентах кафедры в виде JSON подобной структуры:
{
"students": [
{
"id": 1,
"name": "Student1"
},
{
"id": 2,
"name": "Student2"
},
{
"id": 3,
"name": "Student3"
}
]
}
Клиент должен быть разработан в виде консольного приложения, принимающего на вход логин, пароль пользователя и IP-адрес FTP-сервера, после чего выводит меню, в котором доступны на выбор следующие действия:
- Получение списка студентов по имени
- Получение информации о студенте по id
- Добавление студента (id генерируется автоматически)
- Удаление студента по id
- Завершение работы
Целевая платформа: Linux
Для разработанной системы:
- Составить список необходимых проверок для системы
- Изучить фреймворк TestNG
- В отдельном проекте разработать автотесты на основании списка из п.1 с использованием фреймворка из п.2
- Объединить полученные тесты в test-suite и добиться их запуска.
Требования к присылаемым решениям:
- Тестовое задание должно быть выполнено с использованием Java SE 8. Для сборки не должны скачиваться внешние библиотеки, не входящие в состав JDK.
- Клиент должен уметь работать с FTP-сервером в двух режимах: активном и пассивном
- Список студентов при выводе должен быть отсортирован по алфавиту
- id студента уникален
Результат предоставить в виде архива с исходными кодами и/или ссылкой на репозиторий github, где должен быть размещен(ы) проект(ы). В архиве также должны находиться:
- исполняемый jar-файл клиента
- инструкция по сборке проекта
- инструкция по работе с приложением
- исполняемый jar-файл автотестов
- инструкция по запуску тестов и кратким обоснованием тестов.
- В работе было запрещено использование библиотек, не входящих в состав JDK. Исходя из этого и документации стандартного набора JDK, я принял решение не использовать библиотеку sun.net с некоторым функционалом для работы с протоколом ftp. Это влечет возможные трудности с работой в активном режиме, но я посчитал условие отсутствия библиотек более строгим.
- Test-suite и сама система были объединены в один проект, но без труда могут быть сепарированы. Это было сделано для удобства тестирования. Единственный минус - TestNG импортирован на весь проект, а не на только тестовую часть.
- Maven использовался лишь для импортирования TestNG в среду разработки, ниже описан алгоритм ручной сборки без использования Maven
- Список необходимых по моему мнению тестов представлен здесь.
- Парсинг JSON выполнялся также вручную, поэтому его работа не была доведена до идеала (посчитал это изобретением велосипеда), да и в целом, думаю, проект направлен не на парсинг.
- Использовалась последняя версия TestNG и лично у меня при работе на Java 8 возникали конфликты, на JDK более высоких версий (11, 17) всё работает исправно
- При старте test-suite появляется информационное сообщение о невозможности загрузки "org.slf4j.impl.StaticLoggerBinder". Это связано с внутренней специфичностью библиотеки org.sfl4j, на которую ссылается TestNG:
- Клиент ищет на указанном сервере файл с именем "students.json", подразумевается, что для корректной работы он обязан присутствовать, однако при его отсутствии обрабатывается исключение, и клиент продолжает работу
- Клонировать репозиторий в директорию на диске
- В терминале перейти в директорию main/java/ и скомпилировать java-классы (для удобства в директорию out):
javac -classpath . App.java commands/*.java entities/*.java utils/*.java -d ../../../out
- Перейти в директорию out/ и объединить классы в исполняемый jar-файл:
jar cvfe client.jar App *.class */*.class
- Проверить работоспособность jar-файла:
java -jar client.jar
- Запустите jar-файл в терминале (см. выше)
- В меню приветствия следуйте указаниям и введите данные сервера, с которым будет производиться работа
- При успешном подключении данные из файла с данными будут импортированы в программу, и вам выведется подсказка с доступными командами и их аргументами
- После каждой команды измененные данные будут сохраняться на сервере
Первый вариант:
- Запустить весь проект с помощью среды разработки и импортировать зависимость testNG (версия 7.6.1)
- Редактировать конфигурацию запуска как TestNG suite и указать путь до конфигурационного файла testng.xml
- Запустить test-suite
Второй вариант (рекомендуется):
- Скачать исполняемый jar-файл с тестами и файл сьюта testng.xml и поместить их в одну директорию
- Перейти в эту директорию и запустить jar-файл, указав аргументом имя сьюта:
java -jar tests.jar testng.xml
Были выполнены только базовые тесты на некорректный пользовательский ввод и ошибки при работе с сервером, т.к. это ключевые точки любого user-friendly приложения. При необходимости в систему могут быть встроены нагрузочные тесты (огромный массив данных или всевозможные переполнения переменных), но я посчитал это излишним в контексте конкретной задачи. Был создан макет теста на случай, если необходимого файла с данными нет или его имя изменено, тоже считаю это важным ;)