Como o código fonte do Arduino pode ser testado automaticamente (integração contínua)?

16

Gostaria de gerenciar meu código fonte do Arduino (projetos e bibliotecas) sob controle de origem com testes contínuos. Como posso compilar automaticamente o código com ferramentas de integração contínua, para garantir que cada versão seja compilada corretamente? Na melhor das hipóteses, deve-se conseguir configurar compilações para vários processadores, opcionalmente executar testes de unidade e verificar o tamanho binário máximo.

Jakob
fonte
Além de passar por Ino e avr-size?
Ignacio Vazquez-Abrams
@ IgnacioVazquez-Abrams Não me importo com as ferramentas a serem usadas, mas elas devem ser executadas automaticamente em alguns serviços de hospedagem em nuvem ou integração contínua.
Jakob
1
Compilar o tamanho binário não é tão difícil, mas para fazer testes de unidade, você teria que estruturar seu código de forma que ele possa ser testado por unidade, o que é bastante difícil se você deseja manter o tamanho pequeno. Além disso, você precisará executar esses testes em um chip ou emulador para obter um teste mais ou menos confiável.
precisa saber é o seguinte
Encontrei github.com/kyab/travis-test-arduino, mas é experimental e uma resposta / tutorial abrangente como resposta seria melhor.
Jakob
3
O problema é que isso contraria o objetivo original da integração contínua: ele visa empurrar alterações e depois criar e implantar automaticamente em questão de minutos. Isso permite que seus clientes obtenham os recursos e as correções mais recentes à medida que ocorrem, em vez de a cada dois meses. Para o Arduino, é apenas "nuvem que garante a criação". Para testes de unidade, talvez você precise ignorar as bibliotecas do Arduino para criar funções e enviar dados de exemplo pelos "pinos".
Anonymous Penguin

Respostas:

6

A versão mais recente do Arduino ide possui uma interface de linha de comando para criar e fazer upload de código. Mas você pode obviamente fazer isso por makefile e avrdude. Agora, você compilou seu código, mas precisa testar. Como o simulador é complexo, incompleto, expansivo e ... Apenas uma simulação, e como o chip é relativamente barato, a construção de uma placa fará a interação HW E verificará os resultados da maneira mais rápida e fácil. Nesse quadro "especial", você pode fazer o upload de algo como um intérprete, fazer um teste no PC e executá-lo, algo semelhante ao firmata para o arduino. Pelo menos é assim que eu construí-lo. E, tanto quanto eu sei, não há uma implementação conhecida, mesmo que eu tenha certeza de que muitos setores deveriam e provavelmente fazem isso.

Lesto
fonte
4

Como criador do PlatformIO , recomendo que você analise. É um construtor de código de plataforma cruzada e um gerenciador de bibliotecas ausente. Ele pode criar o mesmo código para as muitas plataformas e placas de desenvolvimento incorporado populares.

O PlatformIO pode ser integrado a muitos sistemas populares de Integração Contínua (CI) (ou os seus). Veja a documentação com exemplos .

Vamos dar uma olhada no .travis.ymlconfig / template para o 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

Exemplo

Integração para USB_Host_Shield_2.0projeto. O .travis.ymlarquivo de configuração:

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
fonte
3
Se você é afiliado ou associado ao PlatformIO, deve divulgá-lo em sua resposta ou pode ser sinalizado e removido como spam. Obrigado!
Nick Gammon
3

Um exemplo de configuração da integração contínua Jenkins para o projeto Arduino pode ser encontrado aqui: Integração contínua para sistemas embarcados

O exemplo mostra como criar e fazer upload de imagens no Arduino e executar testes da web Selenium (o sistema em teste é um servidor da web baseado em Arduino).

jperala
fonte
legal porque usa algum software existente que é rico em recursos. mas parece fazer apenas testes na web; você pode por favor expandir a resposta? Também as respostas baseadas em links são ruins.
Lesto
3

Eu escrevi esse framework de teste mais unittest para o Arduino, já que eu não conseguia encontrar a existência adequada. Embora eu não o tenha escrito para o CI, seria adequado para o trabalho do CI, pois não requer hardware, mas pode ser executado no PC.

A execução dos trabalhos de IC sem o hardware tem bons e maus lados, bons lados porque

  • Sem piscar, sem necessidade de hardware -> pode ser executado em paralelo -> rápido para verificar, por exemplo, todas as confirmações
  • Não há problemas de hardware que influenciam os testes -> não há necessidade de se preocupar se este teste falhou porque meu componente de hardware XYZ não é estável

O lado negativo é:

  • Não está testando o código de destino real, por exemplo, seu 'int' é de 32 bits no seu PC e 16 bits no AVR.
Susundberg
fonte
Seu 'int' é de 64 bits no seu PC ”: você provavelmente quer dizer '32 bits' ou está usando um SO exótico.
Edgar Bonet
Você está certo, é claro, obrigado. Eu editei minha resposta para corrigir isso.
Susundberg 15/05
observe que você pode configurar um servidor de IC em casa com um PC barato, como uma framboesa conectada a uma placa HW, e assim ter uma parte da infraestrutura de CI em execução em HW real (mantendo o CI da nuvem padrão para tudo o que é software) )
Lesto 25/10/19
3

Acabei de montar um artigo de tamanho decente como resposta a esta pergunta relacionada sobre uma estrutura de teste de unidade de CI / Arduino que escrevi que finalmente está madura o suficiente para começar a falar publicamente.

A arduino_ciruby gem suporta testes locais e integração com o Travis CI (por exemplo, este trabalho de construção para a biblioteca Adafruit FONA ).

Alguns exemplos de como ele se integra:

Eu tenho um problema criado para relatar o tamanho do esboço, mas nenhum trabalho foi feito sobre isso. Também é possível que eu possa paralelizar as compilações algum dia, mas no momento não tenho muita certeza de como faria isso. No momento, a etapa de compilação mais demorada no Travis CI é o download do IDE do Arduino ... o teste paralelo não prejudicará muito se todas as tarefas precisarem fazer essa etapa.

Ian
fonte
1

Eu recomendaria usar o plug-in do arduino eclipse chamado sloeber sloeber.io, do qual sou o líder do projeto.
Ele se integra ao controle de versão e permite a criação em várias plataformas, pois suporta várias configurações.
Embora ainda não seja uma prova idiota, eu documentei e demonstrei o teste de unidade do código arduino no PC local usando a estrutura de teste do google.
Aqui está um link para um blog que contém uma apresentação de como você pode fazê-lo. http://blog.baeyens.it/#post25

jantje
fonte