أيها الأصدقاء ، لدينا أخبار رائعة لك. أولاً ، تشرق الشمس أخيرًا في الشارع ، مما يعني أن الربيع بدأ يأخذ حقوقه بالكامل. الخبر الثاني أكثر تخصصًا - في 20 مارس ، يبدأ الدرس الأول في سلسلة رسائل جديدة في الدورة التدريبية
"Python Developer" ، فيما يتعلق بذلك ننشر الجزء الأخير من مقالة "مقدمة إلى الاختبار في Python" ، التي يمكن قراءة الأجزاء السابقة منها
هنا وهنا .
اختبار في بيئات متعددةحتى الآن ، كنت تختبر إصدارًا واحدًا من Python باستخدام بيئة افتراضية مع مجموعة معينة من التبعيات. ولكن قد تكون هناك دائمًا حاجة لاختبار التطبيق على إصدارات عديدة من Python أو عدة إصدارات من الحزمة. Tox هو تطبيق يقوم بأتمتة الاختبار في بيئات متعددة.
تركيب تكسTox متاح على PyPl كحزمة للتثبيت عبر النقطة:
$ pip install tox
بعد التثبيت ، يمكنك المتابعة لتكوين Tox.
تخصيص Tox للتبعيات الخاصة بكيتم تكوين Tox من خلال ملف التكوين في دليل المشروع. أنه يحتوي على ما يلي:
- الأمر لتشغيل لتشغيل الاختبارات ؛
- أي حزم إضافية مطلوبة للتشغيل ؛
- تم تحديد الإصدارات المستهدفة من Python للاختبار.
بدلاً من تعلم بناء الجملة لتكوين Tox ، يمكنك البدء بتشغيل تطبيق بدء التشغيل السريع.
$ tox-quickstart
ستقوم أداة تكوين Tox بطرح الأسئلة وإنشاء ملف مشابه لما يلي في
tox.ini
:
[tox] envlist = py27, py36 [testenv] deps = commands = python -m unittest discover
قبل بدء تشغيل Tox ، تأكد من أن
setup.py
مع خطوات التثبيت للحزمة في مجلد التطبيق. إذا لم يكن كذلك ، استخدم
دليل إنشاء
setup.py
.
وإذا كان المشروع الخاص بك غير مخصص للتوزيع على PyPl ، فيمكنك تخطي هذا المطلب بإضافة السطر التالي إلى ملف tox.ini تحت عنوان التكسير:
[tox] envlist = py27, py36 skipsdist=True
إذا لم تقم بإنشاء setup.py ، وكان للتطبيق بعض التبعيات على PyPl ، فستحتاج إلى توضيحها في قسم
testenv
. على سبيل المثال ، سيتطلب Django ما يلي:
[testenv] deps = django
في نهاية هذه الخطوة ، يمكنك إجراء الاختبارات.
يمكنك الآن تشغيل Tox ، وسيخلق بيئتين ظاهرتين: واحدة لبيثون 2.7 وواحدة لبيثون 3.6. يسمى الدليل Tox
.tox/
. في ذلك ، سيتم تشغيل Tox
-m unittest discover
لكل بيئة افتراضية.
يمكنك بدء هذه العملية عن طريق استدعاء Tox من سطر الأوامر:
$ tox
سوف ينتج Tox نتائج اختبار لكل بيئة. عند بدء تشغيل Tox للمرة الأولى ، يستغرق إنشاء بيئات افتراضية وقتًا ، ولكن عندما تقوم بتشغيل Tox للمرة الثانية ، سيعمل كل شيء بشكل أسرع.
نتائج Tox بسيطة جدا. يتم إنشاء بيئات لكل إصدار ، ويتم تثبيت التبعيات ، ثم يتم تشغيل أوامر الاختبار.
هناك بعض خيارات سطر الأوامر الإضافية التي تستحق التذكر.
تشغيل بيئة واحدة ، على سبيل المثال ، Python 3.6:
$ tox -e py36
إعادة إنشاء البيئة الافتراضية عندما تتغير التبعية أو تتلف
الحزم الجانبية :
$ tox -r
تشغيل Tox مع نتائج أقل تفصيلاً:
$ tox -q
تشغيل Tox مع إخراج مطول أكثر:
$ tox -v
يمكنك قراءة المزيد حول Tox على موقع
وثائق Tox .
أتمتة الاختبارحتى الآن ، لقد أجريت الاختبارات يدويًا عن طريق تشغيل الأمر. ولكن هناك أدوات لتشغيل الاختبارات تلقائيًا عند إجراء التغييرات وإلزامها بمستودع به نظام للتحكم في الإصدار ، على سبيل المثال ، Git. غالبًا ما يشار إلى أدوات أتمتة الاختبار على أنها أدوات CI / CD ، مما يعني "التكامل المستمر / النشر المستمر". يمكنهم تشغيل الاختبارات وتجميع ونشر التطبيقات ، وحتى نشرها على الإنتاج.
Travis CI هي واحدة من العديد من خدمات CI المتاحة.
يعمل Travis CI بشكل جيد مع Python ، والآن يمكنك أتمتة تنفيذ جميع الاختبارات التي تم إنشاؤها في السحابة! Travis CI مجاني لأي مشاريع مفتوحة المصدر على GitHub و GitLab ومتاح مقابل رسوم للمشاريع الخاصة.
للبدء ، قم بتسجيل الدخول والمصادقة باستخدام بيانات اعتماد GitHub أو GitLab. ثم قم بإنشاء ملف يسمى
.travis.yml
بالمحتويات التالية:
language: python python: - "2.7" - "3.7" install: - pip install -r requirements.txt script: - python -m unittest discover
يعطي هذا التكوين Travis CI التوجيهات التالية:
- اختبار Python 2.7 و 3.7 (اختياريًا ، يمكنك استبدالهما بأي أشخاص آخرين.)
- تثبيت جميع الحزم المدرجة في requirements.txt (يمكنك إزالة هذا القسم إذا لم يكن لديك تبعيات.)
- تشغيل الثعبان - م unittest اكتشاف لتشغيل الاختبارات.
بعد الالتزام بهذا الملف ودفعه ، سيقوم Travis CI بتشغيل هذه الأوامر في كل مرة تقوم فيها بالضغط على مستودع Git البعيد. يمكن الاطلاع على النتائج على موقعه على الانترنت.
ما التاليأنت الآن تعرف كيفية كتابة الاختبارات ، وإضافتها إلى مشروعك ، وتنفيذها ، وحتى القيام بذلك تلقائيًا ، حتى تتمكن من التعرف على الأساليب المتقدمة التي يمكن أن تكون مفيدة مع نمو مكتبة الاختبار.
مقدمة Linter إلى التطبيقلدى Tox و Travis CI إعداد فريق اختبار. في هذا البرنامج التعليمي ، استخدمنا اكتشاف python -m unittest كفريق اختبار.
يمكنك توفير أمر واحد أو أكثر في هذه الأدوات ، مما سيضيف أدوات جديدة لتحسين جودة التطبيق.
واحد مثل هذا التطبيق هو linter. وقال انه سوف ننظر في التعليمات البرمجية الخاصة بك وترك التعليقات. وبالتالي ، يمكنه تقديم المشورة بشأن الأخطاء وتصحيح المساحات الزائدة وتوقع الأخطاء المحتملة.
لمعرفة المزيد عن اللمعة ،
راجع برنامج Python Code Quality التعليمي .
لينت السلبي مع flake8flake8 هو linter الشهير الذي يترك تعليقات حول نمط الكود الخاص بك وفقًا لمواصفات
PEP 8 .
يمكنك تثبيت
flake8
باستخدام النقطة:
$ pip install flake8
بعد ذلك يمكنك تشغيل
flake8
لملف أو مجلد أو قالب واحد:
$ flake8 test.py test.py:6:1: E302 expected 2 blank lines, found 1 test.py:23:1: E305 expected 2 blank lines after class or function definition, found 1 test.py:24:20: W292 no newline at end of file
سترى قائمة بالأخطاء والتحذيرات في التعليمات البرمجية التي عثر عليها بواسطة
flake8
.
يمكن تكوين
flake8
في سطر الأوامر أو في ملف تكوين المشروع. إذا كنت تريد تجاهل بعض القواعد ، على سبيل المثال E305 ، الموضح أعلاه ، يمكنك تعيين هذا في التكوين. سيقوم
flake8
بالتحقق من ملف.
flake8
في مجلد المشروع أو ملف
setup.cfg
. إذا كنت تريد استخدام Tox ، يمكنك إضافة
flake8
تكوين
tox.ini
إلى
tox.ini
.
يتجاهل هذا المثال
الدلائل. git و __pycache__ ، وكذلك القاعدة E305. بالإضافة إلى ذلك ، يزيد الحد الأقصى لطول السلسلة من 80 حرفًا إلى 90 حرفًا. ستدرك في مرحلة ما أن الحد القياسي البالغ 79 حرفًا في كل سطر غير مناسب للاختبارات التي قد تحتوي على أسماء طرق طويلة ، حرفية السلسلة مع قيم اختبار و قطع طويلة أخرى من البيانات. عادة ، للاختبارات ، قم بزيادة طول السلسلة إلى 120 حرفًا:
[flake8] ignore = E305 exclude = .git,__pycache__ max-line-length = 90
بدلاً من ذلك ، يمكنك توفير هذه الخيارات في سطر الأوامر:
$ flake8 --ignore E305 --exclude .git,__pycache__ --max-line-length=90
يمكن العثور على قائمة كاملة بالإعدادات على
موقع الوثائق .
يمكنك الآن إضافة
flake8
إلى إعداد CI. بالنسبة إلى Travis CI ، سيبدو كما يلي:
matrix: include: - python: "2.7" script: "flake8"
سيقرأ Travis التكوين في.
.flake8
ولن يتمكن من إكمال
.flake8
إذا كانت هناك أخطاء في الوبر. تأكد من إضافة التبعية
flake8
إلى ملف
requirements.txt
.
لينت العدوانية مع رمز المنسقflake8
هو عبارة عن
flake8
سلبية لا توصي إلا بإجراء تعديلات ؛ وسيكون عليك إدخالها في الكود بنفسك. كود المنسق هو نهج أكثر عدوانية. يغير الرمز تلقائيًا وفقًا للأنماط والتخطيطات.
black
هو المنسق لا يرحم للغاية. ليس لديه إعدادات وهو دقيق للغاية. مما يجعله أداة رائعة لإدراجها في خط أنابيب الاختبار.
يرجى ملاحظة: أسود يتطلب بيثون الإصدار 3.6 وأعلى.
يمكنك تثبيت
black
باستخدام نقطة:
$ pip install black
بعد ذلك ، للبدء من سطر الأوامر ، حدد الملف أو الدليل الذي تريد تنسيقه:
$ black test.py
الحفاظ على اختبار رمز نظيفةقد تلاحظ أنه عند كتابة الاختبارات ، ستقوم بنسخ أجزاء التعليمات البرمجية للصق في كثير من الأحيان أكثر من إنشاء تطبيقات عادية. من وقت لآخر ، يمكن أن تكون الاختبارات رتيبة للغاية ، ولكن هذا ليس سببًا لإسقاط الكود في شكل غير دقيق ومجزأ.
بمرور الوقت ، سوف تتراكم
الديون الفنية في رمز الاختبار الخاص بك ، وسيصبح إجراء التغييرات اللازمة لإجراء تغييرات مهمة في رمز التطبيق في الاختبارات أمرًا صعبًا للغاية بسبب الهيكل.
عند كتابة الاختبارات ، حاول اتباع مبدأ DRY: لا تكرر نفسك.
تعتبر تركيبات الاختبارات والوظائف طريقة رائعة لكتابة التعليمات البرمجية التي يسهل الحفاظ عليها. أيضا ، لا تنسى عن سهولة القراءة. فكر في نشر أدوات الفحص مثل
flake8
في رمز الاختبار:
$ flake8 --max-line-length=120 tests/
اختبار الكشف عن الإنتاجية يتناقص بين التعديلاتهناك طرق عديدة لقياس الرمز في Python. تحتوي المكتبة القياسية على وحدة زمنية تقوم بجدولة الوظائف عدة مرات وتظهر لك التوزيع. في هذا المثال ، سيتم تنفيذ test () 100 مرة ، ثم سيتم إعطاء الإخراج باستخدام print ():
def test():
إذا قررت استخدام pytest كعداء اختبار ، تحقق من البرنامج المساعد pytest-standardmark. أنه يوفر تركيبات pytest تسمى المعيار. يمكن تمرير أي كائن يسمى المعيار () ، فإنه يوزع وقت يسمى في نتائج pytest.
يمكنك تثبيت معيار pytest من PyPl باستخدام النقطة:
$ pip install pytest-benchmark
بعد ذلك يمكنك إضافة اختبار باستخدام أداة التثبيت وتمرير الكائن المدعو إلى التنفيذ:
def test_my_function(benchmark): result = benchmark(test)
سوف يمنحك تشغيل pytest نتائج قياسية:

يمكنك معرفة المزيد على
موقع الوثائق .
اختبار لتحديد الأخطاء الأمنيةهناك اختبار آخر يجب تشغيله على التطبيق الخاص بك وهو البحث عن الأخطاء الشائعة ونقاط الضعف الأمنية.
تثبيت
bandit
من PyPl باستخدام النقطة:
$ pip install bandit
بعد ذلك ، يمكنك تمرير اسم الوحدة النمطية للتطبيق الخاص بك باستخدام العلامة
-r
والحصول على معلومات مختصرة:
$ bandit -r my_sum [main] INFO profile include tests: None [main] INFO profile exclude tests: None [main] INFO cli include tests: None [main] INFO cli exclude tests: None [main] INFO running on Python 3.5.2 Run started:2018-10-08 00:35:02.669550 Test results: No issues identified. Code scanned: Total lines of code: 5 Total lines skipped (
كما هو الحال مع
flake8
، يمكن تكوين
bandit
flake8
bandit
، وإذا كنت تريد تجاهل بعضها ، فيمكنك إضافة الجزء التالي إلى ملف
setup.cfg
مع المعلمات:
[bandit] exclude: /test tests: B101,B102,B301
مزيد من المعلومات على
موقع جيثب .
استنتاجأتاحت Python الاختبار بفضل الأوامر والمكتبات المدمجة اللازمة للتحقق من التشغيل الصحيح للتطبيقات. من السهل بدء الاختبار في Python: يمكنك استخدام unittest وكتابة طرق صغيرة سهلة الصيانة لاختبار الشفرة.
بينما تتعلم المزيد حول اختبار التطبيق الخاص بك وتوسيعه ، فكر في التبديل إلى أحد أطر الاختبار مثل pytest من أجل البدء في استخدام المزيد من الميزات المتقدمة.
شكرا للقراءة. لديك مستقبل لا لبس فيه مع بيثون!
ولأولئك الذين قرأوا المقال ، لدينا نبأ عظيم آخر. الآن ، يمكنك الحصول على دورة
Python Developer بخصم 10000 روبل!
الجزء الاولالجزء الثاني