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

🎸 شرح Django

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

الدرس 27 من 36· ⏱ 2 دقائق قراءة· 🗓 آخر تحديث: ١٨ يوليو ٢٠٢٦

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.

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