Arduino 소스 코드를 어떻게 자동으로 테스트 할 수 있습니까 (연속 통합)?


17

지속적인 테스트를 통해 소스 제어하에 Arduino 소스 코드 (프로젝트 및 라이브러리)를 관리하고 싶습니다. 연속 통합 도구로 코드를 자동으로 컴파일하여 각 버전이 깨끗하게 컴파일되도록하려면 어떻게해야합니까? 가장 좋은 경우 여러 프로세서에 대한 빌드를 구성하고 선택적으로 단위 테스트를 실행하고 최대 이진 크기를 확인할 수 있어야합니다.


이노와 그것을 통과하는 것 외에는 avr-size?
Ignacio Vazquez-Abrams

@ IgnacioVazquez-Abrams 어떤 도구를 사용해야할지 모르겠지만 일부 클라우드 호스팅 또는 지속적인 통합 서비스에서 자동으로 실행되어야합니다.
Jakob

1
이진 크기를 컴파일하는 것은 어렵지 않지만 단위 테스트를 수행하려면 단위를 테스트 할 수있는 방식으로 코드를 구성해야합니다. 크기를 작게 유지하려면 충분히 어렵습니다. 또한, 칩 또는 에뮬레이터에서 해당 테스트를 실행하여 다소 안정적인 테스트를 받아야합니다.
GolezTrol

github.com/kyab/travis-test-arduino를 찾았 지만 실험적이고 포괄적 인 답변 / 자습이 더 좋습니다.
Jakob

3
이것의 문제는 지속적인 통합의 원래 목적에 위배된다는 것입니다. 변경 사항을 적용한 다음 몇 분 안에 자동으로 빌드 및 배포하도록하는 것입니다. 이를 통해 고객은 2 개월마다가 아닌 최신 기능과 수정 사항을 얻을 수 있습니다. Arduino의 경우 "구름을 만드는 클라우드"입니다. 단위 테스트의 경우 함수를 빌드하고 "핀"을 통해 예제 데이터를 보내려면 Arduino 라이브러리를 우회해야 할 수도 있습니다.
익명 펭귄

답변:


6

Arduino ide의 최신 버전에는 코드를 빌드하고 업로드하는 명령 줄 인터페이스가 있습니다. 그러나 makefile과 avrdude로 분명히 할 수 있습니다. 이제 코드를 컴파일했지만 테스트가 필요합니다. 시뮬레이터는 복잡하고 불완전하며 광범위합니다. 단지 시뮬레이션 일뿐입니다. 칩이 비교적 저렴하기 때문에 보드 마녀를 만들면 HW 상호 작용을 수행하고 결과를 가장 빠르고 쉽게 확인할 수 있습니다. 이 "특별한"보드에 통역사 마녀와 같은 것을 PC에서 테스트하여 arduino의 firmata와 유사한 것으로 업로드 할 수 있습니다. 적어도 그것이 내가 그것을 짓는 방법입니다. 그리고 내가 아는 한 많은 산업이 그렇게해야한다고 확신 하더라도이 구현을 알지 못합니다.


4

PlatformIO 의 제작자로서 나는 그것을 살펴볼 것을 권장합니다. 크로스 플랫폼 코드 빌더이며 누락 된 라이브러리 관리자입니다. 널리 사용되는 많은 임베디드 개발 플랫폼 및 보드에 대해 동일한 코드를 빌드 할 수 있습니다.

PlatformIO는 널리 사용되는 많은 CI (Continuous Integration) 시스템 (또는 자체 시스템 ) 과 통합 될 수 있습니다 . 예제가 포함 된 설명서를 참조하십시오 .

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

3
PlatformIO와 제휴하거나 관련이있는 경우 답변에이를 공개해야합니다. 그렇지 않으면 스팸으로 표시되어 제거 될 수 있습니다. 감사!
Nick Gammon

3

Arduino 프로젝트에 Jenkins 연속 통합을 설정하는 한 가지 예는 다음과 같습니다. 임베디드 시스템의 연속 통합

이 예는 이미지를 빌드하여 Arduino에 업로드하고 Selenium 웹 테스트를 실행하는 방법을 보여줍니다 (테스트중인 시스템은 Arduino 기반 웹 서버 임).


기존 소프트웨어를 사용하기 때문에 기능이 풍부합니다. 그러나 웹 테스트 만하는 것 같습니다. 답을 넓힐 수 있습니까? 또한 링크 기반 답변이 나쁩니다.
Lesto

3

나는이 테스트를 썼다 유닛 테스트에 내가 적절한 기존 찾을 수 있기 때문에, 아두 이노를위한 프레임 워크입니다. CI 용으로 쓰지 않았지만 하드웨어가 필요 없지만 PC에서 실행할 수 있기 때문에 CI 작업에 적합합니다.

하드웨어없이 CI 작업을 실행하면 좋은면과 나쁜면이 있습니다.

  • 깜박임 없음, 하드웨어 불필요-> 병렬로 실행할 수 있음-> 모든 커밋에 대한 예를 빠르게 확인
  • 테스트에 영향을 미치는 하드웨어 문제가 없습니다.-> 걱정할 필요가 없습니다. XYZ 하드웨어 구성 요소가 안정적이지 않기 때문에이 테스트가 실패했을뿐

단점은 다음과 같습니다.

  • 실제 대상 코드를 테스트하지는 않습니다. 예를 들어 'int'는 PC에서 32 비트, AVR에서 16 비트입니다.

" 'int'는 PC에서 64 비트입니다. ": 아마도 "32 비트"를 의미하거나 이국적인 OS를 사용하고 있습니다.
Edgar Bonet

당신은 물론입니다, 감사합니다. 나는 그것을 고치기 위해 대답을 편집했다.
susundberg

HW 보드에 연결된 라즈베리와 같은 저렴한 PC를 사용하여 가정 내 CI 서버를 설정할 수 있으므로 실제 HW에서 실행되는 CI 인프라를 가질 수 있습니다 (소프트웨어에 대한 기본 클라우드 CI는 그대로 유지) )
Lesto

3

방금 작성한 Arduino CI / 단위 테스트 프레임 워크 에 대한 이 관련 질문 에 대한 답변으로 적절한 크기의 글을 작성 했습니다.

arduino_ci루비 보석은 현지 테스트와 트래비스 CI 통합 (예 모두 지원 그리고 Adafruit FONA 라이브러리에 대한이 빌드 작업을 ).

통합 방법에 대한 몇 가지 예 :

나는이 스케치 크기를보고하기 위해 만든 문제를 하지만 작업은 이루어 없습니다. 언젠가 빌드를 병렬화 할 수도 있지만 현재로서는 내가 어떻게 할 것인지 정확히 모르겠습니다. 현재 Travis CI에서 가장 시간이 많이 걸리는 빌드 단계는 Arduino IDE를 다운로드하는 것입니다. 병렬 테스트는 모든 작업이 해당 단계를 수행 해야하는 경우 그다지 흠집을 내지 않습니다.


1

프로젝트 리더 인 sloeber sloeber.io 라는 arduino eclipse 플러그인을 사용하는 것이 좋습니다 .
버전 제어와 통합되며 여러 구성을 지원하므로 여러 플랫폼에서 빌드 할 수 있습니다.
아직 바보 증거는 아니지만 Google 테스트 프레임 워크를 사용하여 로컬 PC에서 arduino 코드의 단위 테스트를 사용하여 문서화하고 시연했습니다.
다음은 블로그 사용 방법에 대한 프레젠테이션이 포함 된 블로그 링크입니다. http://blog.baeyens.it/#post25

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.