Эта статья посвящена тому, как использовать собственные классы репозитория 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.