تخطَّ إلى المحتوى

🎸 شرح Django

استراتيجيات الاختبار في Django

الدرس 27 من 30· ⏱ 2 دقائق قراءة

استراتيجيات الاختبار في Django

Unit Tests vs Integration Tests

النوعالهدفالسرعةالاعتماد على DB
Unit Testاختبار قطعة صغيرة من الكودسريعلا
Integration Testاختبار تفاعل المكونات معاًأبطأغالباً نعم

pytest Setup

إعداد pytest مع django.

# pytest.ini
[pytest]
DJANGO_SETTINGS_MODULE = myproject.settings
python_files = tests.py test_*.py *_tests.py
# conftest.py
import pytest
from django.test import Client

@pytest.fixture
def client():
    return Client()

Factory Boy for Fixtures

إنشاء بيانات اختبار وهمية بسهولة.

import factory
from myapp.models import Product

class ProductFactory(factory.django.DjangoModelFactory):
    class Meta:
        model = Product

    name = factory.Faker('word')
    price = factory.Faker('pydecimal', left_digits=4, right_digits=2)
    in_stock = True

Test Database Strategies

  • استخدام قاعدة بيانات منفصلة للاختبارات
  • إعادة إنشاء الجداول قبل كل اختبار
  • استخدام @pytest.mark.django_db للاختبارات التي تحتاج DB
@pytest.mark.django_db
def test_product_creation():
    product = ProductFactory()
    assert Product.objects.count() == 1

Mocking External APIs

محاكاة الـ APIs الخارجية لتجنب الاعتماد على خدمات خارجية في الاختبارات.

from unittest.mock import patch
import pytest

@patch('myapp.services.requests.get')
def test_external_api(mock_get):
    mock_get.return_value.json.return_value = {'status': 'ok'}
    mock_get.return_value.status_code = 200
    result = call_external_api()
    assert result['status'] == 'ok'

Testing DRF Endpoints

اختبار endpoints الـ REST API.

from rest_framework import status
from rest_framework.test import APITestCase

class ProductAPITest(APITestCase):
    def test_list_products(self):
        ProductFactory.create_batch(5)
        response = self.client.get('/api/products/')
        self.assertEqual(response.status_code, status.HTTP_200_OK)
        self.assertEqual(len(response.data['results']), 5)

CI Integration

دمج الاختبارات في pipeline الـ CI.

# .github/workflows/test.yml
jobs:
  test:
    runs-on: ubuntu-latest
    services:
      postgres:
        image: postgres:15
        env:
          POSTGRES_DB: test_db
        options: >-
          --health-cmd pg_isready
          --health-interval 10s
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-python@v5
        with:
          python-version: '3.12'
      - run: pip install -r requirements.txt
      - run: pytest --cov=myapp

🎯 التالي: إعادة تعيين كلمة المرور والتحقق بالبريد الإلكتروني.

شرح استراتيجيات الاختبار في Django — Django بالعربي
استراتيجيات الاختبار في DjangoDjango بالعربي · The Code Fix

📚 لمزيد من التعمّق في Django، راجِع التوثيق الرسمي لـ Django.

هل كان هذا الدرس مفيدًا؟