четверг, 25 сентября 2014 г.

JTHarness и его TestSuites

The statements and opinions expressed here are my own and do not necessarily represent those of Oracle Corporation.
Всё нижеописанное - выдумка автора и противоречит здравому смыслу и взглядам компаний всего мира.

Что? Зачем?

Java ME тут тестирую волею судеб, саму платформу то есть. Тестирование происходит путём написания приложения, работающего на поддерживаемой платформе. А как протестировать приложение или библиотеку, которая крутится где-то на удалённой железке? Нужно же и разместить его там, и запустить, и результаты выполнения получить. Для таких дел пацаны и запилили ME Framework, а на его основе – JT Harness. Ща понапишем чего-нибудь, используя эти штуковины.
Вообще, JTHarness – это такое говно мамонта теперь OpenSource-проект со страничкой на java.net, однако там почему-то нет последних известий о переводе его на mercurial-репозиторий, а вот, например, в здешних обновлениях – есть. На всякий случай – ссылки на репозиторий и страницу, с которой можно скачать все версии данного продукта, а то они, конечно, гуглятся, но внутри данных проектов расположены как-то неочевидно.

Разработаем первый тест

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

Соберём всё в кучу

Для начала ознакомимся с документиком по диагонали. А для верности высосем его себе. Помимо него есть мануал посвежей. Также на всякий случай сохранённый.
Из софта нам понадобится JDK, JT Harness и Java ME SDK (на момент 09.2014 реализована только на платформе MS Windows). Выкачиваем, устанавливаем, пляшем.
Я возьму себе версию JTHarness 4.4.1, чтобы не натыкаться на свежие баги. Распаковываем этот архив куда-нибудь и изучаем золотые слова из мануала:
Процесс выполнения набора тестов.
Распаковалось. Хорошо. Можно посмотреть на примеры в папке Examples, содержащей внутри себя Entrylevel-туфту, а можно пилить и собственный TestSuite. Для написания своего набора тестов придётся проделать следующие процедуры:
  1. Создать директорию, где мы будем копить тесты, их исходники, описания и прочую шелупонь;
  2. Создать описание набора тестов;
  3. Подготовить библиотеки для запуска JTHarness и удовлетворения всяческих зависимостей;
  4. Подготовить директорию classes;
  5. Написать тест(ы);
  6. Скомпилировать;
  7. Запустить и посмотреть, как оно там.
Этим и займёмся.

Подготовка директории для набора тестов

Тут всё очень просто – создаём директорию с названием нашего TestSuite, а в ней – поддиректории:
  • tests, для складирования исходных кодов наших тестов, они понадобятся для того, чтобы круто выглядеть в отчётах, демонстрируя, что же именно у нас попадало;
  • lib, для всяких зависимостей, а также основной библиотеки javatest.jar;
  • classes, для скомпилированных классов-тестов, потому что глупенький JTHarness будет собирать из них пакеты для пересылки на тестируемую платформу, а ещё туда придётся вытащить классы-зависимости из библиотек, расположенных в директории lib.
На этом пока всё. Нормальные пацаны ещё частенько src и doc создают, но нам этого пока не нужно.

Создание описания набора тестов
Это файл с именем testsuite.jtt, содержащий в себе описание теста, точнее имена соответствующих используемых классов. Думаю, написание таких классов оставим на будущее, а пока, согласно рекомендациям в документе, наполним файл следующим содержимым:
# Test Suite properties file for DemoTCK test suite 
# with tag-style tests
name=My Test Suite
id=1.0
finder=com.sun.javatest.finder.TagTestFinder
script=com.sun.javatest.lib.StdTestScript
interview=com.sun.javatest.interview.SimpleInterviewParameters
Типа, у нас тут всё по дефолту.

Собираем JAR-файлы 

В каталог lib необходимо положить javatest.jar и jh.jar из скачанного дистрибутива JT Harness. Это сейчас, в примитивном тесте. А вообще, туда придётся складывать все библиотеки, использованные при написании тестов.

Подготавливаем директорию classes

Вообще, в мануале предлагают экспортировать туда используемые class-файлы из библиотеки javatest.jar вот такой командой:
jar -xvf ..\lib\javatest.jar com\sun\javatest\Test.class
com\sun\javatest\Status.class
Но я ленив, и просто пропишу в дальнейшем в classpath теста путь до целой библиотеки.

Пишем сам тест

Исходники теста необходимо положить в каталог tests (или там же прямо их и писать). Откомпилированный результат - в каталоге classes. В качестве примера я засвинячил коварный тест, который псевдослучайным образом то, хрипя, заваливается набок, то успешно проходит. Подлый исходник прилагаю картинкой:
Исходник теста
Тут нужно обратить внимание на закомментированную секцию перед объявлением класса. В ней указаны инструкции для JT Harness, чтобы он распознал тест из исходника. А вот и таблица из оригинального мануала, которую мне лень переводить:
Расшифровка параметров
Почти всё. Мы, в принципе, готовы к компиляции и запуску, однако встаёт один вопрос -- как организовать работу со всем этим хозяйством. Можно положить сорцы в каталог tests и компилировать/перекладывать руками, а можно и какой-нибудь системой автоматической сборки воспользоваться. Я решил угореть по Maven. Собственно, каноничная структура проекта такова:
Золотые слова
У меня же, получается, будет отдельный Maven-проект со своими зависимостями, который при вызове mvn prepare-package будет по кусочкам собирать TestSuite в каталоге target. Залил эту фигню на Гитхаб, где и буду далее над ней издеваться. На текущий момент - вот, что представляет собой вышеописанное:
https://github.com/savermyas/JTHarnessSimpleTest/releases/tag/v1.0
Интересного там пока не очень много:
- Скрипт, выкачивающий архивы JTHarness и инсталлирующий их в локальный Maven-репозиторий (в сетевых-то репах этого добра нет, хехехе) - install_dependency.sh
- Описание проекта pom.xml. Всего пара интересных мест - это сборка проекта в каталоге target:

и запуск JavaTest с необходимыми параметрами:
После того, как откроется основное окно JTHarness, необходимо настроить запуск теста, указав путь до бинарника Java. Это делается следующим образом: Configure -> Edit configuration -> Java Virtual Machine. Ну, а потом можно кликать по кнопке запуска тестов, наслаждаясь случайным результатом.
Понятно, что представленный пример тривиален, и из него совершенно невозможно выжать то, для чего нужен этот JTHarness. А нужен он для распределённого запуска тестов, снятия результатов тестирования с удалённых устройств, сбора информации в одном месте, генерации отчётов и прочих штуковин, которые будут рассмотрены в будущем.


Комментариев нет:

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