البرمجة

تحكم في تنفيذ الفيكستشرات في Pytest

بالطبع، يمكنك تحقيق ذلك باستخدام بعض الاستراتيجيات في إدارة الفيكستشرز في pytest. يمكنك تحديد نطاق تشغيل الفيكستشرز بناءً على علامات معينة باستخدام المزيد من التعليمات البرمجية والتعيينات. في هذه الحالة، تريد منع تنفيذ الفيكستشر ذو النطاق الوظيفي (function-scoped) مع العلامات المحددة.

للقيام بذلك، يمكنك استخدام تجميع الفيكستشرز المخصصة (Fixture Collections) في pytest. إليك كيفية تحقيق ذلك:

  1. قم بإنشاء فيكستشر آخر بنفس المنطق الذي لديكه في no_requests، ولكن اجعله غير مُفعل بشكل تلقائي.
  2. استخدم الدالة pytest_fixture_setup للتحقق مما إذا كانت العلامة تتوافق مع تلك التي لا ترغب في تنفيذ الفيكستشر ضمنها.
  3. استخدم تسجيل تحميل الفيكستشر (Fixture Register) لتسجيل الفيكستشرات حسب الحاجة.

الآن، دعونا نقوم بتطبيق هذه الخطوات في الشيفرة:

python
import pytest from unittest.mock import MagicMock @pytest.fixture(autouse=True) def no_requests(monkeypatch): monkeypatch.setattr("requests.sessions.Session.request", MagicMock()) @pytest.fixture def no_requests_if_not_endtoend(request): if 'endtoend' not in request.keywords: return no_requests(request) return None def pytest_fixture_setup(fixturedef, request): if 'no_requests_if_not_endtoend' in fixturedef.argnames: fixturedef.cached_result = no_requests_if_not_endtoend(request)

في الشيفرة أعلاه، قمنا بإنشاء فيكستشر جديد يدعى no_requests_if_not_endtoend، والذي يقوم بالتحقق من وجود العلامة ‘endtoend’ في الطلب (request). ثم، باستخدام دالة pytest_fixture_setup، نقوم بتسجيل تشغيل الفيكستشر وفقاً للتحقق من العلامة المطلوبة.

هذا الحل يتيح لك تطبيق فيكستشرات بناءً على العلامات المحددة بشكل ديناميكي، وبالتالي يمكنك تفادي تشغيلها في الحالات التي لا تحتاج فيها إلى تلك السلوكية.

المزيد من المعلومات

بالطبع، دعني أوضح بعض المعلومات الإضافية حول الحل الذي قدمته:

  1. استخدام مكتبات الاختبار: في الشيفرة المذكورة، قمنا باستخدام مكتبة unittest.mock لإنشاء كائن مزيف (Mock Object) للطلبات الخارجية. هذا يسمح لنا بتخطي تنفيذ الطلبات الفعلية واستبدالها بسلوك افتراضي في جلسة الطلبات (Requests Session)، مما يساعد في اختبار التطبيق دون التأثير على البيئة الخارجية.

  2. إدارة الفيكستشرز في pytest: pytest توفر العديد من الأدوات لإدارة الفيكستشرز بطريقة مرنة وقوية. في هذه الحالة، استخدمنا دالة pytest_fixture_setup للتحكم في تنفيذ الفيكستشر بناءً على متطلبات الاختبار المحددة.

  3. التحقق من العلامات (Marks) في pytest: يمكن استخدام العلامات في pytest لتحديد سلوك معين لمجموعات الاختبار. في هذه الحالة، استخدمنا العلامة endtoend لتحديد الاختبارات التي يُسمح لها بإجراء طلبات خارجية.

  4. التعامل مع الاستثناءات: قد تواجه صعوبة في إدارة الاستثناءات والتصدي لحالات الحدود والأخطاء المحتملة في تطبيق الحلول المعقدة. يجب دائمًا اختبار الحلول والتأكد من أنها تعمل كما هو متوقع في جميع السيناريوهات المحتملة.

  5. الوثائق والموارد: يمكنك دائمًا اللجوء إلى وثائق pytest ومكتبات الاختبارات المختلفة لمزيد من المعلومات والأمثلة العملية حول كيفية استخدام الأدوات المتاحة بشكل فعال.

من خلال الجمع بين هذه الأدوات وفهمك للمفاهيم الأساسية لإدارة الفيكستشرز واستخدام العلامات في pytest، يمكنك تحقيق مزيد من المرونة والتحكم في عمليات الاختبار الخاصة بك، مما يساعد في تطوير تطبيقات ذات جودة أعلى وأكثر استقرارًا.

زر الذهاب إلى الأعلى