كتابة الاختبارات

تقع الاختبارات في MicroPython في المسار tests/. وفيما يلي قائمة بالأدلة الرئيسية وبرنامج التشغيل النصي run-tests.py:

.
 ├── basics
 ├── extmod
 ├── float
 ├── micropython
 ├── run-tests.py
 ...

تُصان مجلدات فرعية لتصنيف الاختبارات. أضف اختباراً بإنشاء ملف جديد في أحد المجلدات الموجودة أو في مجلد جديد. ومن الممكن أيضاً إنشاء اختبارات مخصصة خارج مجلد الاختبارات هذا، وهو ما يُوصى به للمنفذ المخصص.

على سبيل المثال، أضف الشيفرة التالية في ملف 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، هي:

$ 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 القيم التالية لمثيل الاختبار:

  • unix - استخدام منفذ Unix لـ MicroPython، المحدَّد بمتغير البيئة MICROPY_MICROPYTHON (الذي يكون افتراضياً المتغير القياسي لأي من منفذي Unix أو Windows، بحسب منصة المضيف)

  • webassembly - استخدام منفذ webassembly لـ MicroPython، المحدَّد بمتغير البيئة MICROPY_MICROPYTHON_MJS (الذي يكون افتراضياً المتغير القياسي لمنفذ webassembly)

  • port:<device> - الاتصال بجهاز المنفذ التسلسلي المُعطى واستخدامه

  • a<n> - الاتصال بـ /dev/ttyACM<n> واستخدامه

  • u<n> - الاتصال بـ /dev/ttyUSB<n> واستخدامه

  • c<n> - الاتصال بـ COM<n> واستخدامه

  • exec:<command> - تنفيذ أمر والارتباط بدخله/خرجه القياسي (stdin/stdout)

  • execpty:<command> - تنفيذ أمر والارتباط بجهاز /dev/pts/<n> المطبوع

  • <a>.<b>.<c>.<d> - الاتصال بعنوان IPv4 المُعطى

  • أي شيء آخر يحدّد منفذاً تسلسلياً

اختيار الاختبارات:

  • -d, --test-dirs - تحديد دليل اختبارات واحد أو أكثر للتشغيل

  • -i, --include REGEX - تضمين الاختبارات المطابقة لنمط التعبير النمطي

  • -e, --exclude REGEX - استبعاد الاختبارات المطابقة لنمط التعبير النمطي

  • files - ملفات اختبار محددة للتشغيل

خيارات التنفيذ:

  • --emit <EMITTER> - مُصدِر (emitter) MicroPython، يمكن أن يكون EMITTER إما bytecode أو native. الافتراضي: bytecode

  • --via-mpy - ترجمة ملفات .py إلى .mpy أولاً

  • --heapsize - تعيين حجم الكومة (heap) للاختبارات

  • -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