Arduinoソースコードを自動的にテストするにはどうすればよいですか(継続的な統合)?


16

Arduinoのソースコード(プロジェクトとライブラリ)を、継続的なテストでソース管理下で管理したいと思います。各バージョンが正常にコンパイルされるように、継続的な統合ツールを使用してコードを自動的にコンパイルするにはどうすればよいですか?最良の場合、複数のプロセッサのビルドを構成し、オプションで単体テストを実行し、最大バイナリサイズを確認できる必要があります。


それをイノとavr-size
イグナシオバスケス-エイブラムス

@ IgnacioVazquez-Abramsどのツールを使用するかは気にしませんが、クラウドホスティングまたは継続的インテグレーションサービスで自動的に実行されるはずです。
ヤコブ

1
バイナリサイズのコンパイルはそれほど難しくありませんが、ユニットテストを行うには、ユニットテスト可能な方法でコードを構成する必要があります。さらに、チップまたはエミュレータでこれらのテストを実行して、多かれ少なかれ信頼できるテストを取得する必要があります。
GolezTrol

github.com/kyab/travis-test-arduinoを見つけましたが、その実験的で包括的な答え/チュートリアルとしての答えの方が良いでしょう。
ヤコブ

3
これの問題は、継続的な統合の本来の目的に反することです。変更をプッシュし、数分以内に自動的にビルドおよびデプロイすることを意図しています。これにより、顧客は2か月ごとではなく、最新の機能と修正をすぐに入手できます。Arduinoにとっては、「構築を確実にするクラウド」です。ユニットテストの場合、Arduinoライブラリをバイパスして機能を構築し、「ピン」を介してサンプルデータを送信する必要があります。
匿名のペンギン

回答:


6

Arduino ideの最新バージョンには、コードをビルドおよびアップロードするためのコマンドラインインターフェイスがあります。ただし、makefileとavrdudeを使用して明らかにできます。これでコードをコンパイルできましたが、テストが必要です。シミュレータは複雑で、不完全で、拡張性があり、単なるシミュレーションであり、チップは比較的安価であるため、ボードウィッチを構築すると、ハードウェアインタラクションが行われ、結果が最も速く簡単にチェックされます。その「特別な」ボードには、PCからテストを受けて実行する通訳魔女のようなものをアップロードできます。これは、arduinoのfirmataに似たものです。少なくともそれは私がそれを構築する方法です。そして、私が知る限り、多くの業界がそうすべきであり、おそらくそれを行うと確信しているとしても、これを知っている実装はありません。


4

PlatformIOの作成者として、これを調べることをお勧めします。クロスプラットフォームのコードビルダーであり、ライブラリマネージャーがありません。多くの一般的な組み込み開発プラットフォームおよびボードに対して同じコードを構築できます。

PlatformIOは、多くの一般継続的統合(CI)システム(または独自のシステムと統合できます。例付きのドキュメントを参照してください。

.travis.ymlTravis CIのconfig / templateを見てみましょう。

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と提携または関連付けられている場合は、回答でこれを開示する必要があります。開示しないと、フラグが付けられ、スパムとして削除される場合があります。ありがとう!
ニックギャモン

3

ArduinoプロジェクトのJenkins継続的インテグレーションのセットアップの一例は、ここにあります:組み込みシステムの継続的インテグレーション

この例では、イメージを構築してArduinoにアップロードし、Selenium Webテストを実行する方法を示します(テスト対象のシステムはArduinoベースのWebサーバーです)。


既存のソフトウェアを使用しているため、機能が豊富です。しかし、Webテストのみを行うようです。答えを広げていただけますか?また、リンクベースの回答は悪いです。
Lesto

3

適切な既存のものを見つけることができなかったので、私はArduinoのためにこのテストユニットテストフレームワークを書きました。私はCI用に作成しませんでしたが、ハードウェアを必要とせず、PCで実行できるため、CIジョブには適しています。

ハードウェアなしでCIジョブを実行すると、良い面と悪い面があります。

  • フラッシュなし、ハードウェア不要->並行して実行可能->高速で、たとえばすべてのコミットをチェック
  • テストに影響するハードウェアの問題はありません-> XYZハードウェアコンポーネントが安定していないため、このテストが失敗するだけで心配する必要はありません。

欠点は次のとおりです。

  • 実際のターゲットコードはテストされません。たとえば、「int」はPCでは32ビット、AVRでは16ビットです。

あなたの 'int'はPCで64ビットです」:あなたはおそらく「32ビット」を意味するか、またはいくつかのエキゾチックなOSを使用しています。
エドガーボネット

もちろん、ありがとうございます。答えを編集して修正しました。
-susundberg

HWボードに接続されたラズベリーのような安価なPCでホームCIサーバーをセットアップして、実際のHWで実行されているCIインフラストラクチャの一部を持つことができることに注意してください)
レスト

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.