Bagaimana kode sumber Arduino diuji secara otomatis (integrasi berkelanjutan)?

16

Saya ingin mengelola kode sumber Arduino (proyek dan perpustakaan) saya di bawah kendali sumber dengan pengujian berkelanjutan. Bagaimana saya dapat mengkompilasi kode secara otomatis dengan alat integrasi berkesinambungan, untuk memastikan setiap versi mengkompilasi dengan bersih? Dalam kasus terbaik, seseorang harus dapat mengkonfigurasi build untuk beberapa prosesor, secara opsional menjalankan pengujian unit dan memeriksa ukuran biner maksimum.

Jakob
sumber
Selain melewati melalui Ino dan avr-size?
Ignacio Vazquez-Abrams
@ IgnacioVazquez-Abrams Saya tidak keberatan alat mana yang digunakan, tetapi harus berjalan secara otomatis di beberapa cloud hosting atau layanan integrasi berkelanjutan.
Jakob
1
Mengompilasi ukuran biner tidak terlalu sulit, tetapi untuk melakukan tes unit, Anda harus menyusun kode sedemikian rupa sehingga dapat diuji unit, yang cukup sulit jika Anda ingin menjaga ukurannya tetap kecil. Selain itu, Anda perlu menjalankan tes tersebut pada chip atau emulator untuk mendapatkan tes yang lebih atau kurang dapat diandalkan.
GolezTrol
Saya menemukan github.com/kyab/travis-test-arduino tetapi jawabannya eksperimental dan komprehensif / tutorial sebagai jawaban akan lebih baik.
Jakob
3
Masalah dengan ini adalah bertentangan dengan tujuan asli dari integrasi berkelanjutan: itu dimaksudkan untuk mendorong perubahan dan kemudian secara otomatis membangun dan menggunakan dalam beberapa menit. Ini memungkinkan pelanggan Anda mendapatkan fitur dan perbaikan terbaru saat terjadi, alih-alih setiap dua bulan. Untuk Arduino itu hanya "cloud memastikan itu membangun." Untuk pengujian unit, Anda mungkin harus mem-bypass pustaka Arduino untuk membangun fungsi dan mengirim contoh data melalui "pin".
Penguin Anonim

Jawaban:

6

Versi terbaru dari ide Arduino memiliki antarmuka baris perintah untuk membangun dan mengunggah kode. Tapi Anda jelas bisa melakukannya dengan makefile dan avrdude. Sekarang, Anda telah menyusun kode Anda TETAPI Anda perlu menguji. Karena simulator itu rumit, tidak lengkap, luas, dan .. Hanya simulasi, dan karena chipnya relatif murah, membuat papan penyihir akan membuat interaksi HW DAN memeriksa hasilnya dengan cara tercepat dan termudah. Pada papan "khusus" itu Anda dapat mengunggah sesuatu seperti penyihir juru bahasa, mengambil tes dari PC dan menjalankannya, sesuatu yang mirip dengan firmata for arduino. Setidaknya begitulah cara saya membangunnya. Dan sejauh yang saya tahu tidak ada implementasi yang diketahui tentang ini, bahkan jika saya cukup yakin banyak industri harus dan mungkin melakukan itu.

Lesto
sumber
4

Sebagai pencipta PlatformIO, saya akan merekomendasikan Anda untuk melihatnya. Ini adalah pembuat kode lintas-platform dan manajer perpustakaan yang hilang. Itu dapat membangun kode yang sama untuk banyak platform dan papan pengembangan tertanam yang populer.

PlatformIO dapat diintegrasikan dengan banyak sistem Continuous Integration (CI) yang populer (atau milik Anda). Lihat dokumentasi dengan contoh .

Mari kita lihat .travis.ymlconfig / template untuk 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

Contoh

Integrasi untuk USB_Host_Shield_2.0proyek. File .travis.ymlkonfigurasi:

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
sumber
3
Jika Anda berafiliasi atau terkait dengan PlatformIO, Anda harus mengungkapkan ini dalam jawaban Anda, atau mungkin ditandai dan dihapus sebagai spam. Terima kasih!
Nick Gammon
3

Salah satu contoh pengaturan integrasi berkelanjutan Jenkins untuk proyek Arduino dapat ditemukan di sini: Integrasi berkelanjutan untuk sistem tertanam

Contoh ini menunjukkan cara membuat dan mengunggah gambar ke Arduino dan menjalankan tes web Selenium (sistem yang diuji adalah server web berbasis Arduino).

Jperala
sumber
bagus karena menggunakan beberapa penyihir perangkat lunak yang ada kaya fitur. tetapi tampaknya hanya melakukan pengujian web; dapatkah Anda memperluas jawabannya? juga jawaban berbasis tautan buruk.
Lesto
3

Saya menulis tes kerangka kerja unittest ini untuk Arduino, karena saya tidak dapat menemukan yang sudah ada. Walaupun saya tidak menulisnya untuk CI, itu akan cocok untuk pekerjaan CI, karena tidak memerlukan perangkat keras tetapi dapat dijalankan pada PC.

Menjalankan pekerjaan CI tanpa perangkat keras memiliki sisi baik dan sisi buruk, sisi baik selain itu

  • Tidak perlu flashing, tidak diperlukan perangkat keras -> dapat dijalankan secara paralel -> cepat untuk memeriksa misalnya untuk setiap komit
  • Tidak ada masalah perangkat keras yang mempengaruhi tes -> tidak perlu khawatir melakukan tes ini hanya gagal karena komponen XYZ-perangkat keras saya tidak stabil

Pada sisi negatifnya ada:

  • Ini tidak menguji kode target yang sebenarnya, misalnya 'int' Anda adalah 32 bit di PC Anda dan 16bits di AVR.
susundberg
sumber
" Int" Anda adalah 64 bit di PC Anda ": Anda mungkin berarti" 32 bit ", atau Anda menggunakan beberapa OS eksotis.
Edgar Bonet
Anda tentu saja benar, terima kasih. Saya mengedit jawaban saya untuk memperbaikinya.
susundberg
perhatikan Anda dapat mengatur server CI di rumah dengan pc murah seperti raspberry yang dihubungkan ke papan HW dan dengan demikian memiliki sepotong infrastruktur CI berjalan pada HW nyata (sambil tetap menjaga cloud CI standar untuk semua yang merupakan perangkat lunak )
Lesto
3

Saya baru saja menyusun ukuran penulisan yang layak sebagai jawaban untuk pertanyaan terkait ini tentang kerangka kerja pengujian Arduino CI / unit yang saya tulis yang akhirnya cukup matang untuk mulai dibicarakan di depan umum.

The arduino_ciruby permata mendukung pengujian lokal dan integrasi Travis CI (misalnya membangun ini pekerjaan untuk perpustakaan Adafruit Fona ).

Beberapa contoh cara mengintegrasikan:

Saya memiliki masalah yang dibuat untuk melaporkan ukuran sketsa tetapi tidak ada pekerjaan yang dilakukan untuk itu. Mungkin juga saya bisa memparalelkan bangunan suatu hari nanti, tetapi saat ini saya tidak yakin bagaimana saya akan melakukannya. Saat ini, langkah pembangunan yang paling memakan waktu pada Travis CI adalah mengunduh Arduino IDE ... pengujian paralel tidak akan banyak menyulitkan jika setiap pekerjaan perlu melakukan langkah itu.

Ian
sumber
1

Saya akan menyarankan untuk menggunakan arduino eclipse plugin bernama sloeber sloeber.io yang saya memimpin proyek.
Ini terintegrasi dengan kontrol versi dan memungkinkan pembangunan di beberapa platform karena mendukung banyak konfigurasi.
Meskipun ini bukan bukti bodoh saya telah mendokumentasikan dan menunjukkan menggunakan unit test kode Arduino pada pc lokal menggunakan kerangka uji google.
Berikut ini tautan ke blog yang berisi presentasi tentang bagaimana Anda dapat melakukannya. http://blog.baeyens.it/#post25

jantje
sumber