В современной разработке систем управления беспилотными летательными аппаратами качественные мок-данные играют решающую роль для обеспечения надежности софта. Библиотека mock-jutsu предлагает специализированный инструмент drone_telemetry, предназначенный для генерации реалистичных временных рядов телеметрии БПЛА. Эта функция позволяет инженерам эмулировать поведение дрона в воздухе, не прибегая к использованию дорогостоящих симуляторов или запуску реального оборудования. Благодаря интеграции в mock-jutsu, получение структурированного потока координат и параметров полета становится делом одной команды.
Функция drone_telemetry генерирует детализированный JSON-объект, который включает в себя уникальный идентификатор дрона и массив последовательных сэмплов. Каждый сэмпл содержит исчерпывающий набор параметров: географические координаты (широта и долгота), высоту в метрах, скорость в м/с, а также углы ориентации в пространстве — тангаж (pitch), крен (roll) и рыскание (yaw). Особое внимание в алгоритме уделено физической достоверности. Например, уровень заряда батареи (battery_pct) в рамках одной сессии уменьшается монотонно, а данные генерируются с частотой 20 Гц. Это позволяет тестировать системы, чувствительные к равномерности поступления пакетов и логической последовательности значений.
Использование drone_telemetry открывает широкие возможности для автоматизации тестирования. Разработчики могут проверять алгоритмы фильтрации сигналов, системы геозонирования (geofencing) и корректность отображения траекторий на картах в реальном времени. Эти тестовые данные идеально подходят для отладки бэкенд-сервисов, которые должны обрабатывать высокочастотные потоки информации от тысяч устройств одновременно. Поскольку mock-jutsu имитирует реалистичные изменения RSSI и других показателей связи, вы можете заранее подготовить систему к работе в условиях нестабильного соединения.
Интеграция функции в рабочий процесс максимально упрощена. Для быстрой проверки пайплайна в терминале достаточно выполнить команду CLI: mockjutsu generate drone_telemetry. При написании автоматизированных тестов на Python разработчики могут использовать прямой вызов jutsu.generate('drone_telemetry'), получая готовые объекты для мокирования API. Кроме того, для проведения нагрузочного тестирования предусмотрена поддержка JMeter через конструкцию ${__mockjutsu(drone_telemetry,)}, что позволяет наполнять сценарии динамическими данными без написания сложных скриптов на Groovy или BeanShell.
Главное преимущество, которое дает drone_telemetry в составе mock-jutsu, — это предсказуемость и гибкость процесса разработки. Вы получаете не просто случайные числа, а логически связанные временные ряды, соответствующие стандартам индустрии БПЛА. Это сокращает время на подготовку тестовых сред и позволяет сфокусироваться на создании инновационных функций, будучи уверенными в качестве обработки входящей телеметрии на всех этапах жизненного цикла приложения.
mockjutsu generate drone_telemetrymockjutsu bulk drone_telemetry --count 10mockjutsu export drone_telemetry --count 10 --format jsonmockjutsu export drone_telemetry --count 10 --format csvmockjutsu export drone_telemetry --count 10 --format sqlfrom mockjutsu import jutsujutsu.generate('drone_telemetry')jutsu.bulk('drone_telemetry', count=10)jutsu.template(['drone_telemetry'], count=5)${__mockjutsu_telemetry(drone_telemetry)}# JMeter Function: __mockjutsu_telemetry# Parameter 1: drone_telemetry# Parameter 2: (not required for this function)GET /generate/drone_telemetry# → {"type":"drone_telemetry","result":"...","status":"ok"}GET /bulk/drone_telemetry?count=10POST /template {"types":["drone_telemetry"],"count":1}Примеры вывода
{"drone_id": "DJI-MINI-3207", "mission_id": "4bc9f4de-d1a3-4471-b20a-635adbd26186", "recording_start": "2026-06-27T23:22:04.593Z", "interval_ms": 50, "samples": [{"t": 0, "lat": -58.056782, "lon": -140.589611, "alt_m": 131.13, "pitch": -0.75, "roll": -3.07, "yaw": 280.27, "speed_ms": 7.75, "battery_pct": 89.2, "rssi": -67}, {"t": 50, "lat": -58.056766, "lon": -140.589616, "alt_m": 129.96, "pitch": -0.64, "roll": -3.25, "yaw": 280.72, "speed_ms": 7.94, "battery_pct": 88.9, "rssi": -69}, {"t": 100, "lat": -58.056737, "lon": -140.589663, "alt_m": 128.61, "pitch": -0.7, "roll": -2.84, "yaw": 279.35, "speed_ms": 7.89, "battery_pct": 88.8, "rssi": -69}, {"t": 150, "lat": -58.056745, "lon": -140.58968, "alt_m": 128.45, "pitch": -0.52, "roll": -3.41, "yaw": 280.42, "speed_ms": 8.21, "battery_pct": 88.8, "rssi": -68}, {"t": 200, "lat": -58.056753, "lon": -140.589637, "alt_m": 128.54, "pitch": -0.33, "roll": -2.63, "yaw": 280.92, "speed_ms": 7.73, "battery_pct": 88.7, "rssi": -69}, {"t": 250, "lat": -58.056708, "lon": -140.589663, "alt_m": 130.17, "pitch": -0.01, "roll": -2.35, "yaw": 281.63, "speed_ms": 8.14, "battery_pct": 88.6, "rssi": -70}, {"t": 300, "lat": -58.056747, "lon": -140.589629, "alt_m": 130.98, "pitch": 0.05, "roll": -2.37, "yaw": 280.62, "speed_ms": 7.85, "battery_pct": 88.4, "rssi": -71}, {"t": 350, "lat": -58.056732, "lon": -140.58965, "alt_m": 132.16, "pitch": -0.3, "roll": -1.8, "yaw": 281.51, "speed_ms": 7.5, "battery_pct": 88.1, "rssi": -70}, {"t": 400, "lat": -58.05677, "lon": -140.58966, "alt_m": 131.37, "pitch": 0.32, "roll": -1.78, "yaw": 282.51, "speed_ms": 7.61, "battery_pct": 87.9, "rssi": -70}, {"t": 450, "lat": -58.056763, "lon": -140.589642, "alt_m": 131.93, "pitch": -0.49, "roll": -1.12, "yaw": 281.1, "speed_ms": 7.86, "battery_pct": 87.8, "rssi": -70}, {"t": 500, "lat": -58.056781, "lon": -140.589641, "alt_m": 130.93, "pitch": -0.03, "roll": -1.19, "yaw": 282.73, "speed_ms": 7.58, "battery_pct": 87.8, "rssi": -71}, {"t": 550, "lat": -58.056823, "lon": -140.58962, "alt_m": 129.86, "pitch": -0.64, "roll": -0.27, "yaw": 280.89, "speed_ms": 7.17, "battery_pct": 87.5, "rssi": -70}, {"t": 600, "lat": -58.056831, "lon": -140.589631, "alt_m": 127.88, "pitch": -0.96, "roll": 0.2, "yaw": 279.65, "speed_ms": 6.82, "battery_pct": 87.4, "rssi": -71}, {"t": 650, "lat": -58.0568, "lon": -140.589658, "alt_m": 127.92, "pitch": 0.01, "roll": 0.34, "yaw": 281.17, "speed_ms": 6.86, "battery_pct": 87.1, "rssi": -70}, {"t": 700, "lat": -58.056757, "lon": -140.589681, "alt_m": 127.11, "pitch": 0.42, "roll": -0.57, "yaw": 281.54, "speed_ms": 6.46, "battery_pct": 86.9, "rssi": -68}, {"t": 750, "lat": -58.056745, "lon": -140.589689, "alt_m": 126.19, "pitch": 0.21, "roll": -0.4, "yaw": 283.04, "speed_ms": 6.63, "battery_pct": 86.6, "rssi": -69}, {"t": 800, "lat": -58.056749, "lon": -140.589686, "alt_m": 124.45, "pitch": -0.1, "roll": 0.4, "yaw": 283.02, "speed_ms": 6.15, "battery_pct": 86.4, "rssi": -71}, {"t": 850, "lat": -58.056707, "lon": -140.589688, "alt_m": 123.15, "pitch": -0.65, "roll": -0.22, "yaw": 284.39, "speed_ms": 6.2, "battery_pct": 86.1, "rssi": -70}, {"t": 900, "lat": -58.056691, "lon": -140.589731, "alt_m": 121.28, "pitch": -0.91, "roll": 0.35, "yaw": 284.38, "speed_ms": 5.89, "battery_pct": 85.8, "rssi": -72}, {"t": 950, "lat": -58.056655, "lon": -140.589696, "alt_m": 119.42, "pitch": -0.32, "roll": 0.97, "yaw": 285.1, "speed_ms": 6.27, "battery_pct": 85.8, "rssi": -74}, {"t": 1000, "lat": -58.056644, "lon": -140.589702, "alt_m": 118.77, "pitch": 0.21, "roll": 1.28, "yaw": 283.15, "speed_ms": 6.56, "battery_pct": 85.5, "rssi": -75}, {"t": 1050, "lat": -58.05663, "lon": -140.589699, "alt_m": 117.17, "pitch": -0.4, "roll": 1.36, "yaw": 282.45, "speed_ms": 6.28, "battery_pct": 85.5, "rssi": -74}, {"t": 1100, "lat": -58.056592, "lon": -140.589741, "alt_m": 116.59, "pitch": -0.68, "roll": 1.11, "yaw": 281.83, "speed_ms": 6.22, "battery_pct": 85.4, "rssi": -75}]}Правила валидации
- Генерируется Mock Jutsu по реальным форматным спецификациям
- Все значения полностью синтетические
- Для разработки, тестирования и демонстрации