¿Cómo se puede probar el código fuente de Arduino automáticamente (integración continua)?

16

Me gustaría administrar mi código fuente Arduino (proyectos y bibliotecas) bajo control de fuente con pruebas continuas. ¿Cómo puedo compilar automáticamente el código con herramientas de integración continua, para asegurarme de que cada versión se compila limpiamente? En el mejor de los casos, uno debería poder configurar compilaciones para múltiples procesadores, opcionalmente ejecutar pruebas unitarias y verificar el tamaño binario máximo.

Jakob
fuente
¿Aparte de pasarlo por Ino y avr-size?
Ignacio Vazquez-Abrams
@ IgnacioVazquez-Abrams No me importa qué herramientas usar, pero debería ejecutarse automáticamente en algún alojamiento en la nube o servicio de integración continua.
Jakob
1
Compilar el tamaño binario no es tan difícil, pero para realizar pruebas unitarias, tendría que estructurar su código de tal manera que sea comprobable por unidad, lo que es lo suficientemente difícil si desea mantener el tamaño pequeño. Además, deberá ejecutar esas pruebas en un chip o en un emulador para obtener una prueba que sea más o menos confiable.
GolezTrol
Encontré github.com/kyab/travis-test-arduino pero es experimental y una respuesta / tutorial integral como respuesta sería mejor.
Jakob
3
El problema con esto es que va en contra del propósito original de la integración continua: está destinado a impulsar los cambios y luego hacer que se compile e implemente automáticamente en cuestión de minutos. Esto permite a sus clientes obtener las últimas funciones y correcciones a medida que ocurren, en lugar de cada dos meses. Para Arduino es solo "nube asegurándose de que se construye". Para las pruebas unitarias, es posible que deba omitir las bibliotecas Arduino para crear funciones y enviar datos de ejemplo a través de los "pines".
Anonymous Penguin

Respuestas:

6

La versión más nueva de Arduino ide tiene una interfaz de línea de comandos para construir y cargar código. Pero obviamente puede hacerlo mediante makefile y avrdude. Ahora, ha compilado su código PERO necesita pruebas. Como el simulador es complejo, incompleto, expansivo y ... Solo una simulación, y debido a que el chip es relativamente barato, construir una bruja de tablero hará que la interacción HW Y compruebe los resultados es la forma más rápida y fácil. En ese tablero "especial" puedes subir algo como un intérprete que toma una prueba de la PC y la ejecuta, algo similar a firmata para arduino. Al menos así es como lo construiría. Y hasta donde sé, no hay una implementación conocida de esto, incluso si estoy bastante seguro de que muchas industrias deberían y probablemente lo harán.

Lesto
fuente
4

Como creador de PlatformIO , le recomendaría que lo investigue. Es un generador de código multiplataforma y un administrador de bibliotecas perdido. Puede construir el mismo código para las muchas plataformas y placas de desarrollo integradas populares.

PlatformIO se puede integrar con muchos sistemas populares de Integración Continua (CI) (o el suyo propio). Ver documentación con ejemplos .

Veamos la .travis.ymlconfiguración / plantilla para 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

Ejemplo

Integración para USB_Host_Shield_2.0proyecto. El .travis.ymlarchivo de configuración:

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
fuente
3
Si está afiliado o asociado con PlatformIO, debe revelar esto en su respuesta, o puede ser marcado y eliminado como spam. ¡Gracias!
Nick Gammon
3

Aquí puede encontrar un ejemplo de cómo configurar la integración continua de Jenkins para el proyecto Arduino: integración continua para sistemas integrados

El ejemplo muestra cómo construir y cargar imágenes en Arduino y ejecutar pruebas web Selenium (el sistema bajo prueba es un servidor web basado en Arduino).

jperala
fuente
agradable porque utiliza algún software existente que tiene muchas características. pero parece hacer solo pruebas web; ¿Puedes por favor ampliar la respuesta? También las respuestas basadas en enlaces son malas.
Lesto
3

Escribí este marco de prueba de unidad de prueba para Arduino, ya que no pude encontrar el adecuado existente. Si bien no lo escribí para CI, sería adecuado para el trabajo de CI, ya que no requiere hardware pero se puede ejecutar en la PC.

Ejecutar los trabajos de CI sin el hardware tiene lados buenos y lados malos, los lados buenos indican que

  • Sin flasheo, no se necesita hardware -> puede ejecutarse en paralelo -> rápido para verificar, por ejemplo, para cada confirmación
  • No hay problemas de hardware que influyan en las pruebas -> no hay que preocuparse si esta prueba simplemente falló porque mi componente de hardware XYZ no es estable

En el lado negativo hay:

  • No está probando el código objetivo real, por ejemplo, su 'int' es de 32 bits en su PC y 16 bits en AVR.
Susundberg
fuente
Tu 'int' tiene 64 bits en tu PC ”: probablemente quieras decir “32 bits” o estás usando un sistema operativo exótico.
Edgar Bonet
Tienes razón, por supuesto, gracias. Edité mi respuesta para arreglar eso.
susundberg
tenga en cuenta que puede configurar un servidor de CI en el hogar con una PC barata como una frambuesa conectada a una placa HW y, por lo tanto, tener una parte de la infraestructura de CI ejecutándose en HW real (mientras que tal vez mantenga el CI de nube predeterminado para todo lo que es software )
Lesto
3

Acabo de armar un artículo de tamaño decente como respuesta a esta pregunta relacionada sobre un marco de prueba de Arduino CI / unit que escribí que finalmente es lo suficientemente maduro como para comenzar a hablar públicamente.

La arduino_cigema de rubí admite las pruebas locales y la integración de Travis CI (por ejemplo, este trabajo de compilación para la biblioteca Adafruit FONA ).

Algunos ejemplos de cómo se integra:

Tengo un problema creado para informar el tamaño del boceto, pero no se ha realizado ningún trabajo al respecto. También es posible que algún día pueda paralelizar las compilaciones, pero por el momento no estoy exactamente seguro de cómo hacerlo. En este momento, el paso de compilación que lleva más tiempo en Travis CI es descargar Arduino IDE ... las pruebas paralelas no afectarán mucho si cada trabajo necesita hacer ese paso.

Ian
fuente
1

Yo recomendaría usar el plugin arduino eclipse llamado sloeber sloeber.io del cual soy el líder del proyecto.
Se integra con el control de versiones y permite construir en múltiples plataformas, ya que admite múltiples configuraciones.
Aunque todavía no es una prueba idiota, he documentado y demostrado que utilizo pruebas unitarias de código arduino en la PC local usando el marco de prueba de google.
Aquí hay un enlace a un blog que contiene una presentación de cómo puedes hacerlo. http://blog.baeyens.it/#post25

jantje
fuente