Ana içeriğe geç

Hacim Testi

Hacim testi tek bir soruya cevap verir: Veritabanında aylarca birikmiş veri varken, tek bir kişi liste ekranını açınca ne kadar bekler?

Bu test “aynı anda çok kullanıcı” senaryosu değildir. O konu yük testi. Burada satır sayısını artırıyoruz (fabrika, makine, görev) ve tek kullanıcı ile yükleme süresini ölçüyoruz — böylece veri kaynaklı yavaşlık, trafik kaynaklı yavaşlıktan ayrılır.

Güncel sayılar ve düzeltme durumu: optimization.tr.md. Sade özet: general-volume-testing.tr.md.


Son sonuçlar (1 Temmuz 2026)

Test boyutu: 200 fabrika, 4.000 makine, 5.000 görev (6 aylık projeksiyon), tek kullanıcı, yerel sunucu.

Ekran Düzeltme öncesi yükleme Son düzeltme sonrası Durum
Görev listesi 437 ms 23 ms Düzeltildi
Fabrika listesi 345 ms 24 ms Düzeltildi
Makine listesi 351 ms 320 ms Düzeltildi
Profilim 3 ms 2 ms OK (kontrol)

437 ms yarım saniyenin altındadır. 23 ms kullanıcı için pratikte anında sayılır.

Bir dakikalık tekrar koşusu (yine tek kullanıcı): görev listesi yükleme 417 ms → 60 ms.

Koşu #1 (26 Haziran) görev listesi sorununu buldu. Koşu #2 (29 Haziran) test verisi yeniden eklendikten sonra düzeltmeyi doğruladı. Çıktılar: docs/volume-results/run-20260629-171059/.


Her koşu ne yapar

  1. Test verisi eklenmeden önce satır sayılarını kaydeder.
  2. Neredeyse boş veritabanında yükleme sürelerini ölçer (baz çizgi).
  3. Seçilen seviye için test verisi ekler (varsayılan: 6 ay / T1).
  4. Aynı ekranlar ve limitlerle tekrar ölçer.
  5. Tek kullanıcı ile bir dakikalık otomatik koşu (mobil uygulama trafiğiyle aynı ekran karışımı).
  6. Sorgu sayısı kontrolü — sunucunun sayfa başına yüzlerce ayrı veritabanı sorgusu çalıştırmadığını doğrular.

Ana ölçümler yalnızca tek istemci ile alınır; sonuç veri boyutunu yansıtır, eşzamanlı trafiği değil.


Ölçülen ekranlar

Mobil yük testiyle aynı karışım:

Ekran İstek Neden
Fabrika listesi GET /api/factories?limit=300 Ağır liste; mobil trafiğin %25’i
Makine listesi GET /api/machines?limit=100 Sayfalama; %25
Görev listesi GET /api/tasks?limit=100 Ana ölçek sorunu buydu; %25
Profilim GET /api/users/me Kontrol — veri artsa da hızlı kalmalı

Veri seviyeleri

Seviye Anlam Fabrikalar Makineler Görevler
T0 Baz (boş veya minimal) ~1 ~1 0
T1 ~6 ay 200 + mevcut satırlar 4.000 + mevcut 5.000
T2 ~12–18 ay (henüz koşulmadı) 1.000 25.000 25.000

Test satırları voltest_ öneki taşır. Gerçek veriye dokunmadan silmek için:

venv/bin/python scripts/volume/seed_volume_db.py clean

Nasıl çalıştırılır

Gerekli: PostgreSQL (migration uygulanmış), loadtest kullanıcısı, yerelde çalışan API ve kurulu k6.

API’yi başlat:

venv/bin/uvicorn main:app --host 127.0.0.1 --port 8000

Tam T1 koşusu:

export BASE_URL=http://127.0.0.1:8000
export K6_USERNAME=loadtest
export K6_PASSWORD=your_password
export VOLUME_TIER=t1

./scripts/volume/run_volume_test.sh

Çıktı docs/volume-results/run-YYYYMMDD-HHMMSS/ altına yazılır. Yükleme sürelerini optimization.tr.md dosyasına işleyin.

Elle adımlar (betikle aynı):

venv/bin/python scripts/volume/seed_volume_db.py counts
venv/bin/python scripts/volume/measure_endpoints.py --tier-label t0 --output /tmp/t0.json
venv/bin/python scripts/volume/seed_volume_db.py seed --tier t1
venv/bin/python scripts/volume/measure_endpoints.py --tier-label t1 --output /tmp/t1.json
K6_SCENARIO=volume-baseline k6 run scripts/load/api-load.js
venv/bin/python -m pytest tests/test_volume_query_efficiency.py -q

Araçlar

Betik Görevi
scripts/volume/seed_volume_db.py Test verisi ekle / sil
scripts/volume/measure_endpoints.py Zamanlı istekler, tek kullanıcı (ekran başına 3 ısınma + 15 ölçüm)
scripts/volume/run_volume_test.sh Yukarıdaki tüm adımları çalıştırır
scripts/load/api-load.js Tek kullanıcılı doğrulama (K6_SCENARIO=volume-baseline)
tests/test_volume_query_efficiency.py Satır sayısı artınca sorgu sayısı artarsa testi kırar

Koşu geçmişi

Tarih Klasör Not
2026-06-26 docs/volume-results/run-20260626-051613/ T1 baz; görev listesi 437 ms
2026-06-29 docs/volume-results/run-20260629-171059/ Görev listesi düzeltmesi; 23 ms

Sınırlar

  • Yerel makine, tek sunucu süreci, localhost — prod farklı olabilir.
  • T1 (~5k görev) uygulama katmanı sorgu sorunlarını yakalar; çok büyük tablolar (100k+) için T2 gerekebilir.
  • Boş veritabanında geçen yük testi, T1’deki liste hızını tahmin etmez. İkisini de koşun.