Arduino สามารถทดสอบซอร์สโค้ดโดยอัตโนมัติได้อย่างไร (รวมอย่างต่อเนื่อง)


17

ฉันต้องการจัดการซอร์สโค้ด Arduino ของฉัน (โครงการและห้องสมุด) ภายใต้การควบคุมซอร์สด้วยการทดสอบอย่างต่อเนื่อง ฉันจะรวบรวมรหัสโดยอัตโนมัติด้วยเครื่องมือการรวมอย่างต่อเนื่องเพื่อให้แน่ใจว่าแต่ละรุ่นรวบรวมได้อย่างสมบูรณ์หรือไม่ ในกรณีที่ดีที่สุดเราควรจะสามารถกำหนดค่าบิวด์สำหรับโปรเซสเซอร์หลายตัวเลือกรันการทดสอบหน่วยและตรวจสอบขนาดไบนารี่สูงสุด


นอกเหนือจากผ่านมันผ่าน Ino และavr-size?
Ignacio Vazquez-Abrams

@ IgnacioVazquez-Abrams ฉันไม่สนใจเครื่องมือที่จะใช้ แต่มันควรทำงานโดยอัตโนมัติในบริการคลาวด์โฮสติ้งหรือการรวมระบบอย่างต่อเนื่อง
Jakob

1
การคอมไพล์ขนาดไบนารี่นั้นไม่ใช่เรื่องยาก แต่ในการทำการทดสอบหน่วยคุณจะต้องจัดโครงสร้างโค้ดของคุณในแบบที่มันสามารถทดสอบได้ซึ่งยากพอถ้าคุณต้องการให้ขนาดเล็ก นอกจากนี้คุณจะต้องทำการทดสอบเหล่านั้นบนชิปหรือในอีมูเลเตอร์เพื่อรับการทดสอบที่เชื่อถือได้มากขึ้นหรือน้อยลง
GolezTrol

ฉันพบgithub.com/kyab/travis-test-arduinoแต่การทดลองและคำตอบที่ครอบคลุม / การสอนเป็นคำตอบจะดีกว่า
Jakob

3
ปัญหานี้เป็นไปตามวัตถุประสงค์ดั้งเดิมของการรวมอย่างต่อเนื่อง: มันหมายถึงการผลักดันการเปลี่ยนแปลงและให้สร้างและปรับใช้โดยอัตโนมัติภายในไม่กี่นาที สิ่งนี้จะช่วยให้ลูกค้าของคุณได้รับฟีเจอร์และการแก้ไขล่าสุดที่เกิดขึ้นแทนที่จะเป็นทุก ๆ สองเดือน สำหรับ Arduino มันเป็นแค่ "คลาวด์ที่ทำให้แน่ใจว่ามันสร้าง" สำหรับการทดสอบหน่วยคุณอาจต้องข้ามไลบรารี Arduino เพื่อสร้างฟังก์ชั่นและส่งข้อมูลตัวอย่างผ่าน "พิน"
เพนกวินที่ไม่เปิดเผยตัว

คำตอบ:


6

รุ่นใหม่ล่าสุดของ Arduino ide มีอินเตอร์เฟสบรรทัดคำสั่งเพื่อสร้างและอัปโหลดรหัส แต่คุณสามารถทำได้อย่างชัดเจนโดย makefile และ avrdude ตอนนี้คุณได้รวบรวมรหัสของคุณแล้ว แต่คุณต้องทำการทดสอบ เนื่องจากตัวจำลองมีความซับซ้อนไม่สมบูรณ์กว้างขวางและ .. เพียงแค่การจำลองและเนื่องจากชิปมีราคาค่อนข้างต่ำการสร้างแม่มดในบอร์ดจะทำให้การโต้ตอบของ HW และตรวจสอบผลลัพธ์เป็นวิธีที่เร็วและง่ายที่สุด ในบอร์ด "พิเศษ" คุณอาจอัปโหลดบางอย่างเช่นล่ามแม่มดทำการทดสอบจากพีซีและดำเนินการบางอย่างที่คล้ายกับ firmata สำหรับ arduino อย่างน้อยนั่นคือวิธีที่ฉันจะสร้างมัน และเท่าที่ฉันรู้ว่าไม่มีการใช้งานสิ่งนี้แม้ว่าฉันจะค่อนข้างแน่ใจว่าหลายอุตสาหกรรมควรและอาจทำเช่นนั้น


4

ในฐานะผู้สร้างPlatformIOฉันขอแนะนำให้คุณดู มันเป็นเครื่องมือสร้างรหัสข้ามแพลตฟอร์มและไม่มีผู้จัดการห้องสมุด มันสามารถสร้างรหัสเดียวกันสำหรับแพลตฟอร์มและบอร์ดการพัฒนาแบบฝังที่ได้รับความนิยมมากมาย

PlatformIO สามารถรวมเข้ากับระบบการรวมต่อเนื่อง (CI)ยอดนิยมมากมาย(หรือของคุณเอง) ดูเอกสารที่มีตัวอย่าง

ลองดูการกำหนดค่า.travis.yml/ แม่แบบสำหรับ 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

ตัวอย่าง

บูรณาการสำหรับ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 คุณควรเปิดเผยสิ่งนี้ในคำตอบของคุณหรืออาจถูกตั้งค่าสถานะและลบออกเป็นสแปม ขอบคุณ!
Nick Gammon

3

ตัวอย่างหนึ่งของการตั้งค่าการรวม Jenkins ต่อเนื่องสำหรับโครงการ Arduino สามารถพบได้ที่นี่: การรวมอย่างต่อเนื่องสำหรับระบบฝังตัว

ตัวอย่างแสดงวิธีการสร้างและอัปโหลดภาพไปยัง Arduino และดำเนินการทดสอบเว็บซีลีเนียม (ระบบภายใต้การทดสอบคือเว็บเซิร์ฟเวอร์ที่ใช้ Arduino)


ดีเพราะมันใช้ซอฟแวร์แม่มดที่มีอยู่บางคุณสมบัติที่หลากหลาย แต่ดูเหมือนว่าจะทำการทดสอบเว็บเท่านั้น คุณช่วยขยายคำตอบหน่อยได้ไหม? คำตอบลิงก์ตามยังไม่ดี
Lesto

3

ฉันเขียนกรอบการทดสอบunittestนี้สำหรับ Arduino เนื่องจากฉันไม่สามารถหาที่มีอยู่ได้อย่างเหมาะสม ในขณะที่ฉันไม่ได้เขียนสำหรับ CI มันจะเหมาะสำหรับงาน CI เนื่องจากไม่ต้องใช้ฮาร์ดแวร์ แต่สามารถรันบนพีซีได้

การรันงาน CI ที่ไม่มีฮาร์ดแวร์มีด้านดีและด้านเลวด้านดีนั้น

  • ไม่มีการกะพริบไม่จำเป็นต้องใช้ฮาร์ดแวร์ -> สามารถรันในแบบขนาน -> รวดเร็วเพื่อตรวจสอบตัวอย่างสำหรับการส่งข้อมูลทุกครั้ง
  • ไม่มีปัญหาฮาร์ดแวร์ที่มีผลต่อการทดสอบ -> ไม่จำเป็นต้องกังวลการทดสอบนี้ล้มเหลวเพราะส่วนประกอบฮาร์ดแวร์ XYZ ของฉันไม่เสถียร

ข้อเสียคือ:

  • มันไม่ได้ทดสอบรหัสเป้าหมายจริงตัวอย่างเช่น 'int' ของคุณคือ 32 บิตในพีซีของคุณและ 16 บิตใน AVR

int 'ของคุณคือ 64 บิตในพีซีของคุณ ”: คุณอาจหมายถึง“ 32 บิต” หรือคุณใช้ระบบปฏิบัติการแปลกใหม่
Edgar Bonet

คุณถูกต้องแน่นอนขอบคุณ ฉันแก้ไขคำตอบของฉันเพื่อแก้ไข
susundberg

โปรดทราบว่าคุณสามารถตั้งค่าเซิร์ฟเวอร์ CI ในบ้านที่มีพีซีราคาถูกเช่นราสเบอร์รี่เชื่อมต่อกับบอร์ด HW และมีชิ้นส่วนของโครงสร้างพื้นฐาน CI ที่ทำงานบน HW จริง (ในขณะที่อาจรักษา CI ระบบคลาวด์เริ่มต้นสำหรับซอฟต์แวร์ทั้งหมด )
Lesto

3

ฉันได้รวบรวมการเขียนขนาดที่เหมาะสมไว้เป็นคำตอบสำหรับคำถามที่เกี่ยวข้องกับArduino CI / เฟรมเวิร์กการทดสอบหน่วยที่ฉันเขียนว่ามันโตพอที่จะเริ่มพูดคุยกับสาธารณชนได้ในที่สุด

arduino_ciอัญมณีทับทิมสนับสนุนทั้งการทดสอบในท้องถิ่นและบูรณาการเทรวิส CI (เช่นการสร้างงานนี้สำหรับห้องสมุด Adafruit FONA )

ตัวอย่างของวิธีการรวม:

ฉันมีปัญหาที่สร้างขึ้นสำหรับการรายงานขนาดร่างแต่ไม่มีการทำงานใด ๆ อาจเป็นไปได้ที่ฉันสามารถสร้างสิ่งก่อสร้างขนานกันได้ แต่ในขณะนี้ฉันไม่แน่ใจว่าฉันจะทำอย่างไร ตอนนี้ขั้นตอนการสร้างที่ใช้เวลานานที่สุดใน Travis CI กำลังดาวน์โหลด Arduino IDE ... การทดสอบแบบขนานจะไม่ทำให้เกิดปัญหามากนักหากทุกงานต้องทำตามขั้นตอนนั้น


1

ฉันอยากจะแนะนำให้ใช้ปลั๊กอิน arduino eclipse ชื่อ sloeber sloeber.ioซึ่งฉันเป็นผู้นำโครงการ
มันทำงานร่วมกับการควบคุมเวอร์ชันและช่วยให้การสร้างบนหลายแพลตฟอร์มในขณะที่มันรองรับการกำหนดค่าหลาย
แม้ว่ามันจะยังไม่ใช่หลักฐานที่งี่เง่า แต่ฉันได้ทำเอกสารและแสดงให้เห็นโดยใช้การทดสอบหน่วยของรหัส arduino บนพีซีในพื้นที่โดยใช้กรอบการทดสอบของ google
นี่คือลิงค์ไปยังบล็อกที่มีการนำเสนอว่าคุณจะทำได้อย่างไร http://blog.baeyens.it/#post25

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.