Kendi kurulumunuzu doğrulama
artifacts/kapsam/index.html altına satır satır düşer.
Dört katman, dört ayrı soru
1.197 test dört katmana ayrılır ve her katman farklı bir şeyi kanıtlar:
Birkaç ayrıntı, çünkü bu katmanların değeri tam olarak oralarda:
- Konnektör uyum kiti listesini DI kaydından okur. Yeni bir banka eklendiğinde ortak sözleşme testleri kendiliğinden o bankayı da kapsar — ayrıntı banka adaptörleri sayfasında.
- Entegrasyon testleri üretimle aynı rol modelini kurar: migration’lar sahip
rolüyle koşar, testler
poyra_approlüyle bağlanır. Böylece RLS gerçekten sınanır — işyerleri arası görünmezlik ham SQL ile doğrulanır, çapraz işyeriINSERT42501ile düşer, olay defterindeUPDATE/DELETEreddedilir. - E2E testleri uygulamaları gerçek Kestrel portlarında ayağa kaldırır; dışarıda ayakta duran bir servise bağımlılık yoktur. Sahte sağlayıcı sunucuları da artık rastgele port seçmez — rastgelelik ara sıra çakışıp testleri sebepsizce kırıyordu.
Yük profili: ölçek iddiası ayrı bir araçtır
Dört katman doğruluğu kanıtlar; “kaç işlem kaldırır” sorusu ayrı bir araca bırakıldı.tests/Poyra.Tests.Load bir konsol uygulamasıdır — dotnet test
onu görmez, CI’ın normal akışına karışmaz; elle ya da ayrı bir workflow ile koşar:
Release şarttır: Debug’da JIT eniyilemesi kapalıdır ve mikrosaniyelik rota
çekirdeği ölçümü tamamen anlamsızlaşır. Senaryo süzgeci, süre (--sure),
eşzamanlılık (--es) ve ısınma (--isinma) parametreleri komut satırından verilir.
Hazır bir yük aracı yerine araç elle yazıldı: NBomber kurumsal kullanımda ücretli
aboneliğe bağlıdır ve paketi eklemek Poyra’yı self-host eden her kuruma aynı
yükümlülüğü bindirirdi; k6 lisans açısından uygundur ama yalnız HTTP konuşur —
rota karar çekirdeğinin süreç içi ölçümü onunla yazılamazdı.
Bir geliştirici dizüstünde (Docker’da ayarsız PG 18, MockBank, yük üreteci
uygulamayla aynı süreçte), 10 sn · 16 eşzamanlı:
Okunuşu: rota kararı darboğaz değildir — ödeme başına bir kez koşan
mikrosaniyelik bir iştir, toplam maliyette görünmez. Tam akış bu donanımda ~16
eşzamanlıda doyuma ulaşır; ötesinde gecikme büyür ama verim artmaz.
Bu rakamlar bir taahhüt değil, kendi donanımınızda tekrarlayacağınız bir
ölçümün örneğidir. Araç, sonuçların yanına ölçüm koşullarını da basar:
koşulsuz bir yük rakamı pazarlama cümlesidir, mühendislik verisi değil.
Kapsam bir hedef değil, gerileme kapısıdır
Ölçülen kapsam: satır %80,7 · dal %54,3 · metot %90. CI’daki eşikler bunun hemen altındadır (satır 80, dal 54) ve bilinçli olarak öyledir. Amaç yüksek bir rakama ulaşmak değil, testsiz kod eklendiğinde oranın düşüp PR’ın kırılmasıdır. Oran yükseldikçe eşik de yükseltilmelidir. Kendi çatalınızda eşikleri ortam değişkeniyle verirsiniz:Betik, kapsam dosyası hiç üretilmediyse “yeşil” görünmez.
vstest, bozuk bir
runsettings dosyasını sessizce yok sayıp 0 ile çıkabiliyor; ölçüm
yapılmadan geçen bir kapsam kapısı, hiç kapı olmamasından beterdir.Mutasyon testi: “davranış gerçekten doğrulandı mı?”
Kapsam “kod çalıştı mı” der; mutasyon “davranış doğrulandı mı” der. Koda kasıtlı küçük hatalar (mutant) enjekte edilir ve testlerin bunları yakalayıp yakalamadığına bakılır.Installments modülünün satır kapsamı %95,6 ama
mutasyon skoru %76,99 — 137 kasıtlı hatadan 35’i hiçbir testi kırmadan
geçti, 17 mutant hiç kapsanmayan koda düştü. Yüksek kapsam, doğrulanmış davranış
demek değildir.
Mutasyon pahalıdır (proje başına dakikalar), bu yüzden her PR’da değil CI’da
elle (workflow_dispatch) tetiklenir.
İki aşamalı boru hattı
Yük profili de CI’a bir kapı olarak eklenmedi: dakikalar sürer ve paylaşımlı runner’ın gürültüsünde rastgele kırmızı yanardı. Ne zaman ve hangi koşullarda koşacağına insan karar verir. Hızlı aşama kırmızıysa pahalı iş hiç başlamaz. Entegrasyon ile E2E ayrı işlere bölünmedi: kapsam ancak hepsi birlikte koştuğunda anlamlıdır, ayırmak iki runner’ın cobertura dosyalarını birleştirmeyi gerektirirdi — karşılığında kazanç yok. CI çıktıları artefakt olarak saklanır: kapsam raporu, E2E kanıtları (başarısız testin ekran görüntüsü ve izi) ve mutasyon raporu.Sürüm yükseltme sırası
1
Değişiklikleri okuyun
Konnektör davranışını, hata kodu eşlemesini veya migration’ı etkileyen
değişiklikler sürüm notlarında ayrıca işaretlenir.
2
Hızlı testleri koşun
./scripts/test-hizli.sh — Docker gerekmez, saniyeler.3
Yedek alın
Yükseltme öncesi veritabanı yedeği; ayrıntı
İşletim sayfasında.
4
Migration'ı ayrı işle koşun
Üretim kompozisyonunda
migrate servisi bunu zaten yapar: şemayı sahip
rolüyle kurar ve çıkar, uygulamalar ancak o bittikten sonra kalkar.5
Sağlık uçlarını doğrulayın
GET /health/ready üç host için de 200 dönmeli. Açılışta sır doğrulaması ve
RLS bekçisi zaten koşar — zayıf anahtarla ya da süper kullanıcı bağlantısıyla
süreç hiç açılmaz.