Comment tester automatiquement le code source Arduino (intégration continue)?


16

J'aimerais gérer mon code source Arduino (projets et bibliothèques) sous contrôle de source avec des tests continus. Comment puis-je compiler automatiquement le code avec des outils d'intégration continue, pour m'assurer que chaque version se compile proprement? Dans le meilleur des cas, on devrait pouvoir configurer des builds pour plusieurs processeurs, éventuellement exécuter des tests unitaires et vérifier la taille binaire maximale.


Autre que de passer par Ino et avr-size?
Ignacio Vazquez-Abrams

@ IgnacioVazquez-Abrams Je ne me soucie pas des outils à utiliser, mais il devrait fonctionner automatiquement sur certains services d'hébergement cloud ou d'intégration continue.
Jakob

1
La compilation de la taille binaire n'est pas si difficile, mais pour faire des tests unitaires, vous devez structurer votre code de manière à ce qu'il soit testable à l'unité, ce qui est assez difficile si vous voulez garder une taille petite. De plus, vous devrez exécuter ces tests sur une puce ou dans un émulateur pour obtenir un test plus ou moins fiable.
GolezTrol

J'ai trouvé github.com/kyab/travis-test-arduino mais sa réponse expérimentale et complète / tutoriel comme réponse serait mieux.
Jakob

3
Le problème, c'est que cela va à l'encontre du but initial de l'intégration continue: il est censé pousser les changements, puis le construire et le déployer automatiquement en quelques minutes. Cela permet à vos clients d'obtenir les dernières fonctionnalités et correctifs au fur et à mesure, au lieu de tous les deux mois. Pour Arduino, c'est juste "le cloud en s'assurant qu'il se construit". Pour les tests unitaires, vous devrez peut-être contourner les bibliothèques Arduino pour créer des fonctions et envoyer des exemples de données sur les «broches».
Anonymous Penguin

Réponses:


6

La dernière version d'Arduino ide a une interface de ligne de commande pour construire et télécharger du code. Mais vous pouvez évidemment le faire par makefile et avrdude. Maintenant, vous avez compilé votre code MAIS vous avez besoin de tests. Comme le simulateur est complexe, incomplet, expansif et .. Juste une simulation, et parce que la puce est relativement bon marché, la construction d'une carte mère fera l'interaction matérielle ET vérifiera les résultats de sa manière la plus rapide et la plus simple. Sur ce tableau "spécial", vous pouvez télécharger quelque chose comme un interprète qui prend un test à partir du PC et l'exécute, quelque chose de similaire à firmata pour arduino. C'est du moins ainsi que je le construirais. Et pour autant que je sache, il n'y a pas de mise en œuvre connue de cela, même si je suis sûr que de nombreuses industries devraient le faire et probablement le faire.


4

En tant que créateur de PlatformIO, je vous recommanderais de l'examiner. Il s'agit d'un générateur de code multiplateforme et d'un gestionnaire de bibliothèque manquant. Il peut créer le même code pour les nombreuses plates-formes et cartes de développement intégrées populaires.

PlatformIO peut être intégré à de nombreux systèmes populaires d' intégration continue (CI) (ou aux vôtres). Voir la documentation avec des exemples .

Examinons la .travis.ymlconfiguration / le modèle pour 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

Exemple

Intégration pour le USB_Host_Shield_2.0projet. Le .travis.ymlfichier de configuration:

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="."

3
Si vous êtes affilié ou associé à PlatformIO, vous devez le divulguer dans votre réponse, sinon il peut être signalé et supprimé comme spam. Merci!
Nick Gammon

3

Un exemple de configuration de l'intégration continue Jenkins pour le projet Arduino peut être trouvé ici: Intégration continue pour les systèmes embarqués

L'exemple montre comment créer et télécharger une image sur Arduino et exécuter des tests Web Selenium (le système testé est un serveur Web basé sur Arduino).


agréable car il utilise un logiciel existant qui est riche en fonctionnalités. mais il semble ne faire que des tests Web; pouvez-vous développer la réponse? les réponses basées sur des liens sont également mauvaises.
Lesto

3

J'ai écrit ce cadre unittest de test pour Arduino, car je ne pouvais pas trouver existant approprié. Bien que je ne l'ai pas écrit pour CI, ce serait bien pour le travail CI, car il ne nécessite aucun matériel mais peut être exécuté sur PC.

L'exécution des travaux CI sans le matériel a de bons et de mauvais côtés, les bons côtés étant

  • Pas de clignotement, pas de matériel nécessaire -> peut être exécuté en parallèle -> rapide pour vérifier par exemple pour chaque commit
  • Aucun problème matériel n'influençant les tests -> pas d'inquiétude, ce test a simplement échoué car mon composant matériel XYZ n'est pas stable

À la baisse, il y a:

  • Il ne teste pas le code cible réel, par exemple votre «int» est de 32 bits dans votre PC et de 16 bits dans AVR.

« Votre« int »est de 64 bits sur votre PC »: vous voulez probablement dire «32 bits», ou vous utilisez un système d'exploitation exotique.
Edgar Bonet

Vous avez bien sûr raison, merci. J'ai modifié ma réponse pour résoudre ce problème.
susundberg

notez que vous pouvez configurer un serveur CI à domicile avec un PC bon marché comme une framboise connectée à une carte matérielle et ainsi avoir un morceau de l'infrastructure CI fonctionnant sur un vrai matériel (tout en conservant peut-être le CI cloud par défaut pour tout ce qui est un logiciel )
Lesto

3

Je viens de mettre en place un résumé de taille décente en réponse à cette question connexe sur un cadre de test Arduino CI / unit que j'ai écrit et qui est enfin assez mature pour commencer à parler publiquement.

La arduino_cigemme ruby ​​prend en charge les tests locaux et l'intégration Travis CI (par exemple, ce travail de construction pour la bibliothèque Adafruit FONA ).

Quelques exemples de la façon dont il s'intègre:

J'ai un problème créé pour signaler la taille de l'esquisse, mais aucun travail n'a été fait à ce sujet. Il est également possible que je puisse paralléliser les versions un jour, mais pour le moment, je ne sais pas exactement comment je procéderais. À l'heure actuelle, l'étape de construction la plus longue sur Travis CI est le téléchargement de l'IDE Arduino ... les tests parallèles ne mettront pas beaucoup de difficulté à cela si chaque travail doit faire cette étape.


1

Je conseillerais d'utiliser le plugin eclipse arduino nommé sloeber sloeber.io dont je suis le chef de projet.
Il s'intègre au contrôle de version et permet de construire sur plusieurs plates-formes car il prend en charge plusieurs configurations.
Bien que ce ne soit pas encore une preuve idiote, j'ai documenté et démontré l'utilisation de tests unitaires de code arduino sur le PC local en utilisant le cadre de test Google.
Voici un lien vers un blog contenant une présentation de la façon dont vous pouvez le faire. http://blog.baeyens.it/#post25

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.