Поскольку «развертывание» на IoT-устройство, особенно массовое, не будет производиться с помощью CI-системы. Тогда цель системы CI в основном состоит в том, чтобы убедиться, что она воля работай нормально.
Это означает, что вам в основном нужно запустить некоторые тесты с использованием CI. Автоматическое тестирование определенно возможно, как для модульных, так и для интеграционных тестов.
Самым важным для модульных тестов обычно является очень короткое время выполнения и короткий цикл обратной связи. Для большой кодовой базы, если есть возможность скомпилировать ее части с помощью родного компилятора хоста и запускать там модульные тесты — отличный вариант. При необходимости вы также можете выполнить кросс-компиляцию на целевой платформе и запустить модульные тесты с помощью какого-нибудь эмулятора, чтобы получить необходимую скорость. Все это может произойти во время задания CI «сборка+тестирование». Компиляция для целевого объекта и запуск модульных тестов на целевом объекте будут просто мучительно медленными, если все сделано правильно, но это также можно сделать - просто убедитесь, что вы прошиваете только наименьший возможный фрагмент кода и отправляете отчет через последовательный порт, над которым он работал. устройство.
Для интеграционных тестов, если возможно установить код на реальном устройстве и пообщаться с ним через последовательный интерфейс, вы можете убедиться, что код действительно работает на целевом устройстве. Если по какой-то причине код дает сбой или работает некорректно, возможно, потребляет слишком много энергии и/или перезапускается, то интеграционные тесты это уловят. Вы также можете использовать другое тестовое устройство, выполняющее измерения и предоставляющее отчеты через последовательный интерфейс для задания CI. Можно использовать Arduino или другой ESP для измерения напряжения и/или силы тока во время выполнения частей вашего кода и проверки их на соответствие известным правильным значениям. Вы не ожидаете, что устройство будет потреблять 400 мА, например, в режиме глубокого сна, это легко проверить с помощью «тестового жгута».
Все эти модульные и интеграционные тесты могут запускаться полностью автоматически на CI-сервере. Естественно, вы, вероятно, будете использовать этот «сервер» локально и не будете полагаться на облачное решение, которое может поддерживать или не поддерживать ваше последнее интеграционное тестирование.
С аппаратным обеспечением дымовые тесты становятся более «реальными», поскольку вы действительно можете подключить устройство и увидеть, как выходит волшебный дым. Обычно вам даже не нужно запускать код до того, как он сгорит, поскольку проблема часто кроется в аппаратном обеспечении.
Поскольку я упомянул тестирование, существует также интеграционное тестирование, которое выполняется на аппаратном уровне. Если у вас есть хорошее тестовое оборудование, которое проверяет работоспособность устройства путем его проверки, вы можете использовать тот же тестовый комплект для проведения цикла контроля качества на заводе, где они производят устройства позже. Информации о создании этих стендов довольно много. Один из примеров этого здесь - https://www.sparkfun.com/tutorials/138.