การเขียนการทดสอบ¶
การทดสอบใน MicroPython อยู่ที่เส้นทาง tests/ ต่อไปนี้คือรายการไดเรกทอรีหลักและสคริปต์ตัวรัน run-tests.py:
.
├── basics
├── extmod
├── float
├── micropython
├── run-tests.py
...
มีโฟลเดอร์ย่อยที่ดูแลเพื่อจัดหมวดหมู่การทดสอบ เพิ่มการทดสอบโดยสร้างไฟล์ใหม่ในโฟลเดอร์ที่มีอยู่หรือในโฟลเดอร์ใหม่ นอกจากนี้ยังสามารถสร้างการทดสอบแบบกำหนดเองนอกโฟลเดอร์ tests นี้ได้ ซึ่งแนะนำสำหรับพอร์ตแบบกำหนดเอง
ตัวอย่างเช่น เพิ่มโค้ดต่อไปนี้ในไฟล์ print.py ในไดเรกทอรีย่อย tests/unix/:
def print_one():
print(1)
print_one()
หากคุณรันการทดสอบ การทดสอบนี้ควรปรากฏในผลลัพธ์การทดสอบ:
$ cd ports/unix
$ make tests
skip unix/extra_coverage.py
pass unix/ffi_callback.py
pass unix/ffi_float.py
pass unix/ffi_float2.py
pass unix/print.py
pass unix/time.py
pass unix/time2.py
การทดสอบทำงานโดยการเปรียบเทียบผลลัพธ์จากเป้าหมายการทดสอบกับผลลัพธ์จาก CPython ดังนั้นการทดสอบใดๆ ควรใช้คำสั่ง print เพื่อระบุผลการทดสอบ
สำหรับการทดสอบที่ไม่สามารถเปรียบเทียบกับ CPython (เช่น ฟังก์ชันการทำงานเฉพาะของ micropython) คุณสามารถระบุไฟล์ .py.exp ซึ่งจะใช้เป็นค่าอ้างอิงสำหรับการเปรียบเทียบ
อีกวิธีในการรันการทดสอบ ซึ่งมีประโยชน์เมื่อรันบนเป้าหมายอื่นที่ไม่ใช่ Unix port คือ:
$ cd tests
$ ./run-tests.py
จากนั้นเพื่อรันบนบอร์ด:
$ ./run-tests.py -t /dev/ttyACM0
และเพื่อรันเฉพาะชุดการทดสอบบางชุด (เช่น ไดเรกทอรี):
$ ./run-tests.py -d basics
$ ./run-tests.py float/builtin*.py
การใช้ run-tests.py¶
สคริปต์ run-tests.py รองรับพารามิเตอร์หลายตัวเพื่อปรับแต่งการรันการทดสอบ:
การเลือกเป้าหมายและอุปกรณ์:
-t, --test-instance
ตัวเลือก -t รับค่าต่อไปนี้สำหรับ test instance:
unix - ใช้ unix port ของ MicroPython ซึ่งระบุโดยตัวแปรสภาพแวดล้อม MICROPY_MICROPYTHON (ซึ่งใช้ค่าเริ่มต้นเป็น variant มาตรฐานของ unix หรือ windows port ขึ้นอยู่กับแพลตฟอร์มโฮสต์)
webassembly - ใช้ webassembly port ของ MicroPython ซึ่งระบุโดยตัวแปรสภาพแวดล้อม MICROPY_MICROPYTHON_MJS (ซึ่งใช้ค่าเริ่มต้นเป็น variant มาตรฐานของ webassembly port)
port:<device> - เชื่อมต่อและใช้งาน serial port device ที่กำหนด
a<n> - เชื่อมต่อและใช้งาน /dev/ttyACM<n>
u<n> - เชื่อมต่อและใช้งาน /dev/ttyUSB<n>
c<n> - เชื่อมต่อและใช้งาน COM<n>
exec:<command> - รันคำสั่งและเชื่อมต่อกับ stdin/stdout ของมัน
execpty:<command> - รันคำสั่งและเชื่อมต่อกับ device /dev/pts/<n> ที่พิมพ์ออกมา
<a>.<b>.<c>.<d> - เชื่อมต่อกับที่อยู่ IPv4 ที่กำหนด
สิ่งอื่นใดระบุ serial port
การเลือกการทดสอบ:
-d, --test-dirs- ระบุไดเรกทอรีการทดสอบหนึ่งไดเรกทอรีหรือมากกว่าเพื่อรัน-i, --include REGEX- รวมการทดสอบที่ตรงกับรูปแบบ regex-e, --exclude REGEX- ยกเว้นการทดสอบที่ตรงกับรูปแบบ regexfiles- ไฟล์การทดสอบเฉพาะที่จะรัน
ตัวเลือกการรัน:
--emit <EMITTER>- ตัวสร้างโค้ดของ MicroPython โดย EMITTER สามารถเป็น bytecode หรือ native ค่าเริ่มต้น: bytecode--via-mpy- คอมไพล์ไฟล์ .py เป็น .mpy ก่อน--heapsize- กำหนดขนาดฮีปสำหรับการทดสอบ-j, --jobs N- จำนวนการทดสอบที่รันพร้อมกัน
ตั้งค่าตัวแปรสภาพแวดล้อม MICROPY_MPYCROSS เพื่อใช้เวอร์ชันเฉพาะของ mpy-cross เมื่อใช้ --via-mpy
การจัดการผลลัพธ์:
-r, --result-dir- ไดเรกทอรีสำหรับผลการทดสอบ ค่าเริ่มต้น: results/--print-failures- แสดง diff ของการทดสอบที่ล้มเหลวและออก--clean-failures- ลบไฟล์ .exp และ .out จากการทดสอบที่ล้มเหลวก่อนหน้า--run-failures- รันเฉพาะการทดสอบที่ล้มเหลวก่อนหน้าใหม่อีกครั้ง
ตัวอย่าง:
# Run only basic tests with native emitter
$ ./run-tests.py --emit native -d basics extmod
# Run tests excluding async functionality
$ ./run-tests.py -e async
# Run tests matching *_pep_*
$ ./run-tests.py -i *_pep_*
# Run specific test files in parallel
$ ./run-tests.py -j 4 basics/list*.py
# Test on a connected OpenMV Cam
$ ./run-tests.py -t /dev/ttyACM0
# or
$ ./run-tests.py -t a0
# Re-run only failed tests from previous run
$ ./run-tests.py --run-failures