Arduino kaynak kodu otomatik olarak nasıl test edilebilir (sürekli entegrasyon)?


17

Arduino kaynak kodumu (projeler ve kütüphaneler) kaynak kontrolü altında sürekli testlerle yönetmek istiyorum. Her sürümün temiz bir şekilde derlendiğinden emin olmak için kodu otomatik olarak sürekli entegrasyon araçlarıyla nasıl derleyebilirim? En iyi durumda, birden fazla işlemci için yapıları yapılandırabilir, isteğe bağlı olarak birim testleri çalıştırabilir ve maksimum ikili boyutu kontrol edebilirsiniz.


Ino ve avr-size?
Ignacio Vazquez-Abrams

@ IgnacioVazquez-Abrams Hangi araçları kullanacağımı umursamıyorum, ancak bazı bulut barındırma veya sürekli entegrasyon hizmetlerinde otomatik olarak çalışmalıdır.
Jakob

1
İkili boyutu derlemek o kadar da zor değildir, ancak birim testleri yapmak için, kodunuzu birim ölçülebilir olacak şekilde yapılandırmanız gerekir, bu da boyutu küçük tutmak istiyorsanız yeterince zordur. Ayrıca, az çok güvenilir bir test elde etmek için bu testi bir çipte veya bir emülatörde çalıştırmanız gerekir.
GolezTrol

Github.com/kyab/travis-test-arduino buldum ama cevap olarak deneysel ve kapsamlı bir cevap / öğretici daha iyi olurdu.
Jakob

3
Bununla ilgili sorun, sürekli entegrasyonun orijinal amacına aykırıdır: değişiklikleri zorlamak ve daha sonra birkaç dakika içinde otomatik olarak oluşturup dağıtmaktır. Bu, müşterilerinizin her iki ayda bir yerine en yeni özellikleri ve düzeltmeleri olduğu gibi almalarını sağlar. Arduino için bu sadece “bulutun inşa ettiğinden emin olmaktır”. Birim testleri için, işlevler oluşturmak ve "pinler" üzerinden örnek veriler göndermek için Arduino kütüphanelerini atlamanız gerekebilir.
Anonim Penguen

Yanıtlar:


6

Arduino ide'nin yeni sürümü, kod oluşturmak ve yüklemek için bir komut satırı arayüzüne sahiptir. Ancak bunu makefile ve avrdude ile yapabilirsiniz. Şimdi, kodunuzu derlediniz, ancak teste ihtiyacınız var. Simülatör karmaşık, eksik, geniş ve .. Sadece bir simülasyon ve çip nispeten ucuz olduğu için, bir tahta cadı inşa etmek HW etkileşimini yapacak ve sonuçları en hızlı ve en kolay şekilde kontrol edecektir. Bu "özel" tahtaya bir tercüman cadı gibi bir şey yükleyebilirsiniz PC'den bir test almak ve yürütmek, arduino için firmata benzer bir şey. En azından ben böyle yapardım. Ve bildiğim kadarıyla, birçok endüstrinin bunu yapması ve muhtemelen yapması gerektiğinden emin olsam bile, bunun bilinmesi gerekmiyor.


4

PlatformIO'nun yaratıcısı olarak, içine bakmanızı tavsiye ederim. Platformlar arası kod oluşturucu ve eksik kütüphane yöneticisidir. Birçok popüler gömülü geliştirme platformu ve panosu için aynı kodu oluşturabilir.

PlatformIO, birçok popüler Sürekli Entegrasyon (CI) sistemi (veya kendi sisteminiz ) ile entegre edilebilir . Örneklerle birlikte belgelere bakın .

Şimdi .travis.ymlTravis CI için config / template'e bakalım :

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

Misal

USB_Host_Shield_2.0Proje için entegrasyon . .travis.ymlYapılandırma dosyası:

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'ya bağlıysanız veya PlatformIO ile ilişkiliyseniz, cevabınızda bunu açıklamalısınız, aksi takdirde spam olarak işaretlenip kaldırılabilir. Teşekkürler!
Nick Gammon

3

Arduino projesi için Jenkins sürekli entegrasyonunun kurulumuna bir örnek burada bulunabilir: Gömülü sistemler için sürekli entegrasyon

Örnek, görüntünün Arduino'ya nasıl oluşturulacağını ve yükleneceğini ve Selenium web testlerinin nasıl yürütüleceğini gösterir (test edilen sistem Arduino tabanlı web sunucusudur).


güzel çünkü mevcut bazı yazılım cadı özelliği zengindir. ancak sadece web testi yapıyor gibi görünüyor; lütfen cevabı genişletir misin? bağlantıya dayalı cevap da kötüdür.
Lesto

3

Bu test birimtest çerçevesini Arduino için yazdım , çünkü uygun olanı bulamadım. CI için yazmadım, ancak CI işi için iyi olurdu, çünkü hiçbir donanım gerektirmez, ancak PC'de çalıştırılabilir.

CI işlerini donanım olmadan çalıştırmak iyi taraflara ve kötü taraflara sahiptir, iyi taraflar

  • Yanıp sönme yok, donanım gerekmez -> paralel olarak çalıştırılabilir -> hızlı kontrol, örneğin her işlem için
  • Testleri etkileyen donanım sorunu yok -> endişelenmenize gerek yok, bu test başarısız oldu, çünkü XYZ donanım bileşenim kararlı değil

Aşağı yönde:

  • Gerçek hedef kodunu test etmiyor, örneğin 'int' PC'nizde 32 bit ve AVR'de 16 bit.

İnt”, PC'nizde 64 bittir : muhtemelen “32 bit” anlamına gelirsiniz veya bazı egzotik işletim sistemleri kullanıyorsunuzdur.
Edgar Bonet

Tabii ki haklısın, teşekkürler. Bunu düzeltmek için cevabımı düzenledim.
susundberg

bir HW kartına bağlanmış bir ahududu gibi ucuz bir pc ile bir ev içi CI sunucusu kurabilir ve böylece gerçek HW üzerinde çalışan bir CI altyapısının bir parçasına sahip olabilirsiniz (belki de yazılım olan her şey için varsayılan bulut CI'sini korurken )
Lesto

3

Ben nihayet halka açık konuşmaya başlamak için yeterince olgun yazdım bir Arduino CI / birim test çerçevesi hakkında bu ilgili soruya bir cevap olarak iyi bir boyut yazma bir araya getirdim .

arduino_ciYakut mücevher yerel test ve Travis CI entegrasyonu (örneğin destekler Adafruit FONA kütüphanesi için bu yapı işi ).

Nasıl entegre olduğuna dair bazı örnekler:

Çizim boyutunu bildirmek için oluşturulmuş bir sorunum var , ancak bu konuda herhangi bir çalışma yapılmadı. Ayrıca yapıları bir gün paralelleştirebilirim, ama şu anda bunu nasıl yapacağımdan tam olarak emin değilim. Şu anda, Travis CI üzerinde en çok zaman alan yapım adımı Arduino IDE'yi indiriyor ... paralel test, her işin bu adımı yapması gerekiyorsa bir çentik oluşturmayacak.


1

Proje sorumlusu olduğum sloeber sloeber.io adlı arduino eclipse eklentisini kullanmanızı tavsiye ederim.
Sürüm kontrolü ile bütünleşir ve birden çok yapılandırmayı desteklediğinden birden çok platform üzerinde bina oluşturmaya izin verir.
Henüz salak kanıtı olmasa da, google test çerçevesini kullanarak yerel bilgisayardaki arduino kodunun birim testini kullanarak belgeledim ve gösterdim.
İşte bunu nasıl yapabileceğinize dair bir sunum içeren bir blog bağlantısı. http://blog.baeyens.it/#post25

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.