Эта статья посвящена тому, как использовать собственные классы репозитория Spark для модульного тестирования и претендовать на то, чтобы заполнить пробел между кодом и документацией внутри домена модульного тестирования Spark. Spark имеет огромный фреймворк, который позволяет разработчикам тестировать свой код в самых разных случаях. Большинство тестовых классов пакета core размещено здесь.

Зависимости

Основные компоненты

SparkFunSuite

Базовый абстрактный класс для всех модульных тестов в Spark для обработки общих функций. Предоставляет функциональность от FunSuite, ThreadAudit и Logging для тестов. Обычно аудит потоков здесь происходит автоматически при создании нового набора тестов. Единственным предварительным условием для этого является то, что тестовый класс должен расширять SparkFunSuite. Можно переопределить поведение аудита потока по умолчанию, установив enableAutoThreadAudit в false и вручную вызвав методы аудита, если это необходимо.

SharedSparkContext

Распределяет локальный SparkContext между всеми тестами в наборе и закрывает его в конце.

Пример:

LocalSparkContext

Управляет локальной sc SparkContext переменной, правильно останавливая ее после каждого теста.

Пример:

JsonTestUtils

Класс помогает обрабатывать json4s библиотечные объекты.

Smuggle

Утилита-оболочка для «проталкивания» объектов в задачи, минуя сериализацию. Это предназначено для целей тестирования, в первую очередь для того, чтобы сделать блокировки, семафоры и другие конструкции, которые не выдержат сериализации, доступными изнутри задач. Ссылка Smuggle сама по себе сериализуема, но после сериализации и десериализации она по-прежнему относится к тому же базовому «контрабандному» объекту, если она была десериализована в той же JVM. Это может быть полезно для тестов, которые зависят от времени завершения задачи, чтобы быть детерминированными, поскольку можно «протащить» блокировку или семафор в задачу, а затем задача может блокироваться до тех пор, пока тест не даст добро на продолжение через замок.

1.2 Тест

Benchmark, BenchmarkBase

Частные занятия для сравнительного анализа. BenchmarkBase - это базовый класс для создания результатов тестов в файл. Для JDK9 + к именам файлов добавляется основной номер версии JDK, чтобы не различать результаты. Benchmark - служебный класс для тестирования компонентов. Пример того, как это использовать:

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

Пример:

Пример результата теста

1.3 Безопасность

EncryptionFunSuite

Дважды запускает тест, инициализируя объект SparkConf с выключенным, а затем включенным шифрованием. Тест может изменить предоставленный SparkConf.

Пример:

1.3 Утилита

SparkConfWithEnv

Настроенный SparkConf, который позволяет переопределить переменные env.