Как исходный код Arduino может быть протестирован автоматически (непрерывная интеграция)?

Я хотел бы управлять своим исходным кодом Arduino (проекты и библиотеки) под контролем источника при непрерывном тестировании. Как я могу автоматически скомпилировать код с инструментами непрерывной интеграции, чтобы убедиться, что каждая версия компилируется чисто? В лучшем случае вы должны иметь возможность настраивать сборку для нескольких процессоров, произвольно запускать модульные тесты и проверять максимальный размер двоичных файлов.

12 голосов | спросил Jakob 16 Jpm1000000pmFri, 16 Jan 2015 19:55:52 +030015 2015, 19:55:52

6 ответов


4

Новая версия Arduino ide имеет интерфейс командной строки для сборки и загрузки кода. Но вы, очевидно, можете сделать это с помощью makefile и avrdude. Теперь вы скомпилировали свой код, но вам нужно тестирование. Поскольку симулятор сложный, неполный, экспансивный и просто. Просто симуляция, а потому, что чип относительно дешев, построение платы позволит делать HW-взаимодействие и проверять результаты как самый быстрый и простой способ. На этой «специальной» доске вы можете загрузить что-то вроде интерпретатора, который проведет тест с ПК и выполнит его, что-то похожее на firmata для arduino. По крайней мере, так я его и построил. И насколько я знаю, не знаю, как это реализовать, даже если я уверен, что многие отрасли должны и, возможно, это сделать.

ответил Lesto 21 Jam1000000amWed, 21 Jan 2015 02:37:13 +030015 2015, 02:37:13
3

Я бы порекомендовал вам заглянуть в PlatformIO , кросс-платформенный конструктор кода и отсутствующий менеджер библиотек. Он может создать тот же код для известных встроенных платформ разработки и самых популярных встроенных плат.

PlatformIO может быть интегрирован с популярным непрерывной интеграцией (CI) системы (или ваши собственные). См. документацию с примерами .

Давайте рассмотрим конфигурацию /шаблон .travis.yml для Travis CI:

language: python
python:
    - "2.7"

env:
    - PLATFORMIO_CI_SRC=path/to/source/file.c
    - PLATFORMIO_CI_SRC=path/to/source/file.ino
    - PLATFORMIO_CI_SRC=path/to/source/directory

install:
    - python -c "$(curl -fsSL https://raw.githubusercontent.com/platformio/platformio/master/scripts/get-platformio.py)"

script:
    - platformio ci --board=TYPE_1 --board=TYPE_2 --board=TYPE_N

Пример

Интеграция для проекта USB_Host_Shield_2.0. Конфигурационный файл .travis.yml:

language: python
python:
    - "2.7"

env:
    - PLATFORMIO_CI_SRC=examples/acm/acm_terminal
    - PLATFORMIO_CI_SRC=examples/Bluetooth/WiiIRCamera PLATFORMIO_BUILD_FLAGS="-DWIICAMERA"
    - PLATFORMIO_CI_SRC=examples/ftdi/USBFTDILoopback
    - PLATFORMIO_CI_SRC=examples/Xbox/XBOXUSB
    # - ...

install:
    - python -c "$(curl -fsSL https://raw.githubusercontent.com/platformio/platformio/master/scripts/get-platformio.py)"

    # Libraries from PlatformIO Library Registry
    # http://platformio.org/#!/lib/show/416/TinyGPS
    # http://platformio.org/#!/lib/show/417/SPI4Teensy3
    - platformio lib install 416 417

script:
    - platformio ci --board=uno --board=teensy31 --board=due --lib="."
ответил ikravets 30 Maypm15 2015, 22:20:43
2

Один пример настройки непрерывной интеграции Jenkins для проекта Arduino можно найти здесь: Непрерывная интеграция для встроенных систем

В этом примере показано, как создавать и загружать изображение в Arduino и выполнять веб-тесты Selenium (тестируемой системой является веб-сервер на основе Arduino).

ответил jperala 2 MarpmMon, 02 Mar 2015 23:57:48 +03002015-03-02T23:57:48+03:0011 2015, 23:57:48
2

Я написал этот тест unittest для Arduino , так как я не мог найти подходящего. Хотя я не писал его для CI, это было бы хорошо подходит для работы с CI, поскольку оно не требует никакого оборудования, но может работать на ПК.

Запуск заданий CI без аппаратного обеспечения имеет хорошие стороны и плохие стороны, хорошие стороны, что

  • Не мигает, не требуется аппаратное обеспечение -> может быть запущен параллельно -> быстро проверить, например, для каждой фиксации
  • Отсутствие аппаратных проблем, влияющих на тесты -> не нужно беспокоиться, этот тест просто терпит неудачу, потому что мой XYZ-аппаратный компонент нестабилен.

С другой стороны:

  • Не тестирует фактический целевой код, например, ваш «int» составляет 32 бита на вашем ПК и 16 бит в AVR.
ответил susundberg 15 Mayam17 2017, 11:13:06
0

Я бы посоветовал использовать плагин arduino eclipse с именем sloeber sloeber.io , из которого я возглавляю проект. Он интегрируется с управлением версиями и позволяет создавать на нескольких платформах, поскольку он поддерживает несколько конфигураций.
Хотя это еще не доказательство идиотности, я документировал и демонстрировал использование модульного тестирования кода arduino на локальном компьютере с использованием тестовой среды google.
Вот ссылка на блог, содержащий презентацию о том, как вы можете это сделать. http://blog.baeyens.it/#post25

ответил jantje 7 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowWed, 07 Sep 2016 19:45:08 +0300 2016, 19:45:08
0

Я только что собрал достойную запись размера как ответ на этот связанный вопрос о Arduino CI /unit testing framework, который я написал , который, наконец, достаточно зрел, чтобы публично публиковать о нем.

Ruby gem arduino_ci поддерживает как локальное тестирование, так и интеграцию с Travis CI (например, эта сборка для библиотеки Adafruit FONA ).

Некоторые примеры того, как он интегрируется:

У меня проблема, созданная для сообщения размера эскиза , но не была выполнена никакая работа на том. Возможно также, что я могу распараллелить сборки когда-нибудь, но на данный момент я не совсем уверен, как я это сделаю. Прямо сейчас, самый трудоемкий шаг по сборке на Travis CI - это загрузка IDE Arduino ... параллельное тестирование не поместит большую часть вмятины, если каждая работа должна выполнить этот шаг.

ответил Ian 8 MaramThu, 08 Mar 2018 01:35:28 +03002018-03-08T01:35:28+03:0001 2018, 01:35:28

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132