如何自动测试Arduino源代码(持续集成)?


17

我想在源代码控制下通过连续测试来管理我的Arduino源代码(项目和库)。如何使用持续集成工具自动编译代码,以确保每个版本都能干净地编译?在最佳情况下,应该能够为多个处理器配置构建,可以选择运行单元测试并检查最大二进制大小。


除了通过Ino和avr-size
伊格纳西奥·巴斯克斯

@ IgnacioVazquez-Abrams我不介意使用哪些工具,但它应该在某些云托管或持续集成服务上自动运行。
雅各布2015年

1
编译二进制大小并不难,但是要进行单元测试,就必须以可测试单元的方式来构造代码,如果要保持较小的大小,这已经足够困难了。此外,您将需要在芯片或仿真器上运行这些测试,以获得或多或少可靠的测试。
GolezTrol

我找到了github.com/kyab/travis-test-arduino,但是它的实验性和全面的答案/教程作为答案会更好。
雅各布2015年

3
问题在于它违背了持续集成的初衷:旨在推动更改,然后在几分钟之内自动构建和部署它。这样一来,您的客户就可以获得最新的功能和修复,而不必每两个月获得一次。对于Arduino而言,它只是“确保构建可靠的云”。对于单元测试,您可能必须绕过Arduino库来构建功能并通过“引脚”发送示例数据。
匿名企鹅2015年

Answers:


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或与PlatformIO关联,则应在答案中披露此内容,否则可能将其标记为垃圾邮件并删除。谢谢!
尼克·加蒙

3

在此处可以找到为Arduino项目设置Jenkins持续集成的一个示例:嵌入式系统的持续集成

该示例显示了如何构建图像并将其上传到Arduino并执行Selenium Web测试(被测系统是基于Arduino的Web服务器)。


很好,因为它使用了一些现有软件,功能丰富。但它似乎只进行网络测试;你能扩大答案吗?基于链接的答案也很糟糕。
Lesto 2015年

3

我写这个测试单元测试框架Arduino的,因为我找不到合适的现有。虽然我没有为CI编写它,但它很适合CI工作,因为它不需要硬件,但可以在PC上运行。

在没有硬件的情况下运行CI作业有好的方面和坏的方面,好的方面是

  • 不闪烁,不需要硬件->可以并行运行->快速检查例如每次提交
  • 没有影响测试的硬件问题->不必担心该测试失败了,因为我的XYZ硬件组件不稳定

缺点是:

  • 它没有测试实际的目标代码,例如您的“ int”在您的PC中为32位,在AVR中为16位。

您的“ int”在您的PC中为64位 ”:您可能表示“ 32位”,或者您使用的是某些特殊的操作系统。
埃德加·波内(Edgar Bonet)

您当然是对的,谢谢。我修改了答案以解决此问题。
susundberg '17

请注意,您可以使用便宜的PC(如树莓派)将家用CI服务器连接到HW板上,从而使一部分CI基础结构在实际HW上运行(同时可能保留所有软件的默认云CI。 )
Lesto

3

我刚刚拼凑一个体面的大小书面记录作为一个答案来此相关的问题大约一个Arduino CI /单元测试框架,我写的是终于成熟到足以开始讨论公开谈论。

arduino_ci红宝石宝石既支持本地测试和Travis CI整合(例如对于Adafruit的FONA库这个构建工作)。

有关其集成方式的一些示例:

在报告草图尺寸时遇到了一个问题,但是目前还没有完成任何工作。也有可能我有一天可以并行化构建,但是目前我还不确定我将如何做到这一点。目前,Travis CI上最耗时的构建步骤是下载Arduino IDE ...如果每个工作都需要执行并行测试,那么并行测试并不会带来太大的麻烦。


1

我建议使用名为sloeber sloeber.io的arduino eclipse插件,我是项目负责人。
它与版本控制集成,并支持多种配置,因此可以在多个平台上构建。
尽管还不是白痴证明,但我已经使用Google测试框架在本地PC上使用arduino代码进行单元测试来进行文档记录和演示。
这是指向博客的链接,其中包含有关如何执行此操作的演示。http://blog.baeyens.it/#post25

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.