مقدمة
عند تطوير مكتبات أو تطبيقات بلغة Python، من الضروري جداً التأكد من توافقها مع إصدارات مختلفة من المفسّر. تزداد أهمية هذا الأمر عند نشر الحزم على PyPI، حيث قد يستخدم المستخدمون إصدارات مختلفة من Python. التثبيت اليدوي لإصدارات Python 3.7 و3.8 و3.9 و3.10 واختبار كل إصدار على حدة يستهلك الكثير من الوقت والجهد.
هنا يأتي دور Tox — أداة قوية لأتمتة الاختبارات، تتيح لك تشغيل الاختبارات في بيئات افتراضية معزولة بإصدارات مختلفة من Python. يضمن Tox التثبيت التلقائي للتبعيات، وإنشاء بيئات نظيفة، وتكرارية نتائج الاختبار.
ما هو Tox ولماذا تحتاجه
Tox (اختصاراً لـ "testing out of the box") هو أداة سطر أوامر مكتوبة بلغة Python، تقوم بأتمتة عملية اختبار مشاريع Python في بيئات مختلفة. يقوم بإنشاء بيئات افتراضية معزولة، وتثبيت التبعيات فيها، وتنفيذ الاختبارات، مما يسمح بالتحقق من توافق الكود مع إصدارات Python المختلفة ومجموعات التبعيات المتنوعة.
المزايا الرئيسية لـ Tox:
عزل البيئات — يتم تنفيذ كل اختبار في بيئة افتراضية منفصلة، مما يمنع تعارض التبعيات.
الأتمتة — عملية تلقائية بالكامل لإنشاء البيئات، وتثبيت التبعيات، وتشغيل الاختبارات.
دعم الإصدارات المتعددة — إمكانية الاختبار المتزامن على إصدارات مختلفة من Python.
التكرارية — ضمان الحصول على نفس النتائج في بيئات مختلفة.
التكامل مع CI/CD — إعداد بسيط للاختبار التلقائي في أنظمة التكامل المستمر.
التثبيت والإعداد الأولي
تثبيت Tox
يمكن تثبيت Tox بعدة طرق:
# عبر pip
pip install tox
# عبر conda
conda install -c conda-forge tox
# عبر pipx (الطريقة الموصى بها)
pipx install tox
إنشاء ملف الإعداد الأساسي
ملف الإعداد الرئيسي لـ Tox هو tox.ini، ويجب وضعه في المجلد الجذر للمشروع:
[tox]
envlist = py38, py39, py310, py311
[testenv]
deps =
pytest
pytest-cov
commands =
pytest tests/ --cov=src/
هيكل المشروع
للحصول على أفضل أداء مع Tox، يُوصى بهيكل المشروع التالي:
my_project/
├── src/
│ └── my_package/
│ ├── __init__.py
│ └── module.py
├── tests/
│ ├── __init__.py
│ └── test_module.py
├── tox.ini
├── setup.py (أو pyproject.toml)
└── requirements.txt
أساسيات العمل مع Tox
الأوامر الأساسية
يوفر Tox واجهة سطر أوامر بسيطة:
# تشغيل جميع البيئات المحددة في envlist
tox
# تشغيل بيئة محددة
tox -e py39
# تشغيل عدة بيئات
tox -e py38,py39,lint
# إعادة إنشاء البيئات بالقوة
tox -r
# تشغيل مع إخراج مفصل
tox -v
# إخراج مفصل جداً (للتصحيح)
tox -vv
كيف يعمل Tox
تتكون عملية عمل Tox من المراحل التالية:
- تحليل الإعدادات — قراءة ملف
tox.iniوتحديد قائمة البيئات - إنشاء البيئات الافتراضية — لكل مفسّر Python محدد
- تثبيت الحزمة — تثبيت الحزمة قيد الاختبار في كل بيئة
- تثبيت التبعيات — تثبيت التبعيات المحددة في قسم
deps - تنفيذ الأوامر — تشغيل الأوامر المحددة في قسم
commands