題:
如何自動測試Arduino源代碼(持續集成)?
Jakob
2015-01-16 22:55:53 UTC
view on stackexchange narkive permalink

我想通過持續測試在源代碼管理下管理我的Arduino源代碼(項目和庫)。如何使用持續集成工具自動編譯代碼,以確保每個版本都能乾淨地編譯?最好的情況下,應該能夠為多個處理器配置構建,可以選擇運行單元測試並檢查最大二進制大小。

除了通過Ino和`avr-size`以外?
@IgnacioVazquez-Abrams我不介意使用哪個工具,但是它應該在某些雲託管或持續集成服務上自動運行。
編譯二進制大小並不難,但是要進行單元測試,就必須以可測試單元的方式來構造代碼,如果要保持較小的大小,這就很難。此外,您將需要在芯片或仿真器上運行這些測試,以獲得或多或少可靠的測試。
我找到了https://github.com/kyab/travis-test-arduino,但它的實驗性和全面的答案/教程作為答案會更好。
問題在於它違背了持續集成的初衷:旨在推動更改,然後在幾分鐘之內自動構建和部署它。這樣一來,您的客戶就可以獲得最新的功能和修復,而不必每兩個月獲得一次。對於Arduino而言,它只是“確保構建可靠的雲”。對於單元測試,您可能必須繞過Arduino庫來構建功能並通過“引腳”發送示例數據。
這個問題後面有多個用例,每個用例都有不同的答案。如果用例_functional unit tests_(如已建議的那樣),您可以修改代碼的函數返回,但這並不是萬無一失的:如果將其嵌入到可交付成果中,則存在弊端。如果您要用硬件進行測量集成,例如:“ Arduino是否響應刺激(即溫度)點亮LED?”要有創造力。您將需要其他硬件和軟件,這些硬件和軟件可以_觀察_被測Arduino的功能,然後可以將消息傳遞給測試運行程序(PySerial等)。
@AnonymousPenguin`“繞過Arduino庫以構建功能並通過” pins“發送示例數據。`[我在[此處回答我的答案的庫中]所做的](https://arduino.stackexchange.com/a/50534/ 42393)。它可以完全通過軟件來測試“ Arduino是否響應刺激即溫度來點亮LED”之類的東西,換句話說,它所做的不僅僅是“確保構建”。
六 答案:
Lesto
2015-01-21 05:37:14 UTC
view on stackexchange narkive permalink

最新版本的Arduino ide具有用於創建和上傳代碼的命令行界面。但是顯然您可以通過makefile和avrdude來完成。現在,您已經編譯了代碼,但需要測試。由於模擬器複雜,不完整,擴展且..只是一個模擬,並且由於芯片相對便宜,因此建造板子巫婆可以進行硬件交互並以最快,最簡單的方式檢查結果。在該“特殊”板上,您可以上載諸如口譯巫婆之類的東西,從PC上進行測試並執行它,類似於arduino的firmata。至少我將如何構建它。據我所知,即使我非常確定許多行業都應該並且可能做到這一點,也尚不知道如何實現。

ikravets
2015-05-31 00:20:44 UTC
view on stackexchange narkive permalink

作為 PlatformIO的創建者,我建議您對其進行研究。這是一個跨平台的代碼生成器,缺少庫管理器。它可以為許多流行的嵌入式開發平台和開發板構建相同的代碼。

PlatformIO可以與許多流行的連續集成(CI)系統(或您自己的系統)集成。參見帶有示例的文檔

讓我們看看Travis CI的 .travis.yml 配置/模板:

 語言:pythonpython:-“ 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 / directoryinstall:-python -c $(curl -fsSL https://raw.githubusercontent.com/platformio/platformio/master/scripts/get-platformio.py)“腳本:-platformio ci --board = TYPE_1 --board = TYPE_2 --board = TYPE_N  

示例

USB_Host_Shield_2.0 項目的集成。 .travis.yml 配置文件:

 語言:pythonpython:-“ 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#-...安裝:-python -c“ $(curl -fsSL https://raw.githubusercontent.com/ platformio / platformio / master / scripts / get-platformio.py)“#PlatformIO庫註冊表中的庫#http://platformio.org/#!/lib/show/416/TinyGPS#http://platformio.org/# !/ lib / show / 417 / SPI4Teensy3-platformio lib install 416 417腳本:-platformio ci --board = uno --board = teensy31 --board = due --lib =“。”  
如果您與PlatformIO有關聯或關聯,則應在答案中披露此信息,否則可能將其標記為垃圾郵件並刪除。謝謝!
jperala
2015-03-03 02:57:48 UTC
view on stackexchange narkive permalink

可以在此處找到為Arduino項目設置Jenkins持續集成的一個示例:嵌入式系統的持續集成

該示例顯示瞭如何構建圖像並將其上傳到Arduino和執行Selenium Web測試(被測系統是基於Arduino的Web服務器)。

很好,因為它使用了一些現有軟件,功能豐富。但它似乎只進行網絡測試;你能擴大答案嗎?基於鏈接的答案也很糟糕。
susundberg
2017-05-15 13:13:07 UTC
view on stackexchange narkive permalink

我為Arduino編寫了這個測試 unittest框架,因為我找不到合適的框架。雖然我沒有為CI編寫它,但它很適合CI作業,因為它不需要硬件,但可以在PC上運行。

在沒有硬件的情況下運行CI作業有好的方面也有不好的方面。 ,好的一面是

  • 不閃爍,不需要硬件->可以並行運行->快速檢查例如每次提交
  • 沒有硬件問題會影響測試->不必擔心此測試是否會失敗,因為我的XYZ硬件組件不穩定

缺點是:

  • 不是測試實際的目標代碼,例如您的“ int”在您的PC中為32位,在AVR中為16位。
“ _your'int'在您的PC_中為64位”:您可能表示“ 32位”,或者您使用的是某些特殊的操作系統。
您當然是對的,謝謝。我修改了答案以解決此問題。
請注意,您可以使用便宜的PC(如樹莓派)將家用CI服務器連接到HW板上,從而使一部分CI基礎架構在實際HW上運行(同時可能保留所有軟件的默認雲CI。 )
Ian
2018-03-08 04:35:29 UTC
view on stackexchange narkive permalink

我已經整理了一個不錯的尺寸文章作為對此相關問題的答案關於我編寫的Arduino CI /單元測試框架,該框架最終已經足夠成熟,可以開始了

arduino_ci ruby​​ gem支持本地測試和Travis CI集成(例如,此Adafruit FONA庫的構建工作)。

一些如何集成的示例:

我有一個報告草圖尺寸的問題,但是尚未完成任何工作。也有可能我有一天可以並行化構建,但是此刻我還不確定如何做到這一點。現在,Travis CI上最耗時的構建步驟是下載Arduino IDE ...如果每個工作都需要這樣做,那麼並行測試就不會有太大的麻煩。

jantje
2016-09-07 21:45:09 UTC
view on stackexchange narkive permalink

我建議使用名為sloeber sloeber.io的arduino eclipse插件,我是項目負責人。
它與版本控制集成,並允許在支持的多個平台上構建多種配置。
儘管還沒有白痴證明,但我已經使用Google測試框架在本地PC上使用arduino代碼進行單元測試來記錄和演示。
這裡是指向博客的鏈接,其中包含您的演示文稿可以做到。 http://blog.baeyens.it/#post25



該問答將自動從英語翻譯而來。原始內容可在stackexchange上找到,我們感謝它分發的cc by-sa 3.0許可。
Loading...