AXV

APIni Testlash va Hujjatlashtirish

APITestCase orqali avtomatlashtirilgan sinovlar, OpenAPI 3.0, Swagger va ReDoc

10-sinfAdvanced Python Back-end3-hafta · 9-dars

Dars rejasi

Avtomatlashtirilgan Testlar

APITestCase, APIClient, force_authenticate va regressiyalarni oldini olish.

OpenAPI & Swagger

drf-spectacular, interaktiv Swagger UI va ReDoc hujjatlashtirish tizimi.

1-bob Yakuni (NewsPortal)

3 haftalik to'liq professional REST API loyihasini muvaffaqiyatli topshirish.

01

APIni testlash

APITestCase va ishonchli sinovlar

APITestCase qanday ishlaydi?

Har bir test vaqtinchalik xotira bazasida izolyatsiyalangan holda bajariladi

1. setUp() Vaqtinchalik Test Baza Foydalanuvchi yaratiladi Kategoriya yaratiladi 2. Test Metodi client.post('/posts/') assertEqual(status, 201) assertIn("results", ...) 3. Tozalash (TearDown) Vaqtinchalik baza o'chadi Asosiy baza toza qoladi Natija: OK (Yashil!)

src/apps/news/tests/test_posts_api.py

class PostAPITestCase(APITestCase):
    def setUp(self):
        self.user = User.objects.create_user("[email protected]", "pass")
        self.cat = Category.objects.create(name="IT", slug="it")

    def test_list_posts(self):
        response = self.client.get("/api/v1/posts/")
        self.assertEqual(response.status_code, status.HTTP_200_OK)

    def test_create_post_authenticated(self):
        self.client.force_authenticate(user=self.user)
        res = self.client.post("/api/v1/posts/", {"title": "A", "category": self.cat.id})
        self.assertEqual(res.status_code, status.HTTP_201_CREATED)

    def test_create_unauthenticated_fails(self):
        res = self.client.post("/api/v1/posts/", {"title": "X"})
        self.assertEqual(res.status_code, status.HTTP_401_UNAUTHORIZED)
02

API Hujjatlashtirish

drf-spectacular va OpenAPI 3.0 standarti

Avtomatik hujjatlashtirish oqimi

Kodingizdagi o'zgarishlar darhol veb-hujjatda aks etadi

Django Kodlari ModelViewSetlar Serializer maydonlari Filter & Permissions drf-spectacular AutoSchema Generator /api/schema/ OpenAPI 3.0 JSON/YAML Interfeyslar Swagger UI (/api/docs/) ReDoc (/api/redoc/) Interaktiv sinash!

Swagger UI: /api/docs/

http://127.0.0.1:8000/api/docs/

NewsPortal REST API v1.0.0 — [Authorize Bearer]

GET /api/v1/posts/ — Maqolalar ro'yxatini olish

POST /api/v1/posts/ — Yangi maqola yaratish

GET /api/v1/posts/{slug}/ — Maqola tafsilotlari

03

1-bob Xulosasi: NewsPortal

3 haftalik to'liq backend arxitekturasi

NewsPortal to'liq arxitekturasi

1. Autentifikatsiya Custom User, JWT Access & Refresh 2. CRUD & Routers Post, Category, Tag DefaultRouter 3. Xavfsizlik IsOwnerOrStaff IDOR himoyasi 4. Filtr & Pagination django-filter, Search PageNumber, Throttling 5. Fayllar (Upload/Download) MultiPartParser & FileResponse 6. Testlar & Swagger APITestCase & OpenAPI 3.0

Atamalarni eslab qolamiz

APITestCase

Bosing va tekshiring

Test sinfi

Vaqtinchalik xotira bazasida so'rovlarni avtomatik sinovdan o'tkazuvchi vosita.

Swagger UI

Bosing va tekshiring

Interaktiv hujjat

Brauzerda API ni ko'rish va to'g'ridan-to'g'ri testlab ko'rish interfeysi.

force_authenticate

Bosing va tekshiring

Tezkor kirish

Testda parolsiz foydalanuvchi nomidan darhol so'rov yuborish imkoni.

Tezkor bilim tekshiruvi

Nima uchun Swagger UI frontend dasturchilar bilan ishlashda eng muhim vosita hisoblanadi?

To'g'ri! Swagger UI backend va frontend o'rtasidagi asosiy ko'prikdir: hech qanday bahs-munozarasiz aniq API spetsifikatsiyasini ko'rsatadi.

Dasturchilar ko'p yo'l qo'yadigan xatolar

Xato: Test yozishni vaqtni yo'qotish deb bilish (natijada yangi o'zgarish kiritilganda butun tizim qulashi mumkin).
To'g'ri: Har bir muhim endpoint (CRUD, Auth, Permissions) uchun kamida bittadan avtomatlashtirilgan test yozing.

Amaliy topshiriq 20 daqiqa

Oson apps/news/tests/test_posts_api.py faylini yarating va python manage.py test qiling.
O'rta pip install drf-spectacular qilib, /api/docs/ marshrutini ulang.
Qiyin Swagger UI da "Try it out" tugmasi orqali yangi maqola yarating va natijani tekshiring.
AXV

1-BOBNI TUGATDIK! TABRIKLAYMIZ!

Keyingi bobda (II Bob): Asinxron Python olami — zamonaviy va o'ta tezkor FastAPI freymvorkini boshlaymiz!

APITestCase (100% OK) OpenAPI 3.0 Swagger UI & ReDoc NewsPortal REST API Tayyor!