El Testi (IT)Manuel QA Mühendisi

Birçok kanallı bildirim orkestrasyon sistemini doğrulamak için gereken sistematik manuel test metodolojisini açıklayın; bu sistem, kritik uyarıları **SMS**, **Push Bildirimleri** ve **E-posta** aracılığıyla gönderir ve failover sıralamaları, öncelik sıralaması ve kullanıcı tercihleri üzerinde geçersiz kılmalarla birlikte çalışır. Özellikle, sessiz teslimat hatalarının tespiti, oran sınırlama uyumunun doğrulaması ve aşağı yönlü sağlayıcıların bölgeler arası kesintiler yaşadığında zarif bir bozulmanın doğrulanmasına odaklanın.

Hintsage yapay zeka asistanı ile mülakatları geçin

Soruya verilen yanıt.

Soru geçmişi

Monolitik bildirim hizmetlerinden dağıtılmış, çok sağlayıcılı mimarilere geçiş, geleneksel tek kanallı testlerin ele alamayacağı karmaşık durum yönetim zorlukları getirmiştir. İlk sistemler basit ateşle-unut mekanizmalarına dayanıyordu, ancak modern platformlar, kritik uyarıların kullanıcıya ulaşmasını sağlamak için sofistike orkestrasyona ihtiyaç duymaktadır. Bu değişiklik, sadece bireysel kanal teslimatını değil, aynı zamanda farklı iletişim protokolleri arasındaki durum koordinasyonu, zaman garantileri ve hata dayanıklılığını doğrulayan test metodolojilerini gerektirmiştir.

Problemin Tanımı

Ana zorluk, üçüncü taraf sınırları boyunca bildirim teslimatının asenkron, dağıtık doğasında yatmaktadır. Sessiz hatalar, sağlayıcıların API taleplerini kabul etmesi ancak iletileri teslim etmemesi (yalancı pozitifler) durumunda ortaya çıkar; race şartları, failover tetikleyicileri, birincil kanal zaman aşımı tamamlanmadan etkinleştirildiğinde ortaya çıkar. Ayrıca, kullanıcı tercihleri mantığı (örneğin, "Rahatsız Etmeyin" pencereleri belirli kanalları bastırma) ile sistem failover kuralları arasındaki kesişim kombinatoryal karmaşıklık yaratmaktadır. Basit olumlu yol testi, kısmi kesintiler sırasında tercih geçersiz kılmalarının failover mantığını geçmesi gereken kritik uç durumları gözden kaçırır; bu durum, kullanıcı gizliliğini ihlal edebilir veya uyarı yorgunluğuna yol açabilir.

Çözüm

Durum geçiş testleri ve kaos mühendisliği ilkelerini birbirine bağlayan sistematik bir metodoloji. İlk olarak, her bir kanal üzerinden bildirim yaşam döngüsünün (Bekleme → Doğrulama → Gönderme → Teslim Edildi/Başarısız → Arşivlenmiş) tamamını haritalayın. Sağlayıcıya özgü hataları (örneğin, HTTP 503, zaman aşımı, kısıtlama) dışsal bağımlılıklar olmadan simüle etmek için ağ kesme araçları (örneğin, Charles Proxy, Burp Suite veya WireMock) kullanın, böylece failover zamanlamasının belirleyici testini gerçekleştirin. Dağıtılmış izleme uygulayarak, bir bildirimin tüm yaşam döngüsü boyunca asenkron kuyruklar arasında takip edilmesini sağlayın (logları benzersiz izleme kimlikleri ile ilişkilendirerek). Son olarak, oran limitleri üzerinde sınır değer analizi ve öncelik seviyeleri için eşdeğer bölümlere ayırma uygulayarak, orkestrasyon motorunun sağlayıcı bozulması sırasında aynı anda yüksek öncelikli uyarılar gibi uç durumları doğru bir şekilde ele aldığını doğrulayın.


Hayattan bir durum

Bir telemedicine platformu, acil reçete doldurma bildirim sisteminin doğrulanmasını gerektiriyordu. Bu sistem, önce Firebase Cloud Messaging (Push) denemesi yapıyor, 60 saniye onay bekledikten sonra başarısızlık durumunda Twilio (SMS), ardından SendGrid (E-posta) üzerinde failover gerçekleştiriyordu. Ayrıca, sistem, kullanıcı "Sakin Saatler" tercihlerini göz önünde bulunduruyordu; bu sıklıkla, gece saatlerinde (22: 00 - 06: 00) SMS ve Push (ancak E-posta değil) bildirimleri bastırmasını gerektiriyordu, yalnızca uyarı kritik olarak işaretlenmişse.

Problemin ortaya çıktığı ön sürüm testinde: Eski mobil uygulama sürümüne sahip hastalar push bildirimleri almıyordu, ancak sistem, vaat edilen hizmet seviyesindeki zaman diliminde SMS'ye failover gerçekleştirmiyordu ve bu da kritik ilaç hatırlatmalarının tamamen kaybolmasına neden oluyordu.

Çözüm A: İzole Kanal Testi

Her bir bildirim türünü, tedarikçi kum havuzları kullanarak kontrol edilen ortamlarda ayrı ayrı test edin. SMS'nin telefona ulaştığını, E-posta'nın gelen kutusuna geldiğini ve Push'un cihazda görüntülendiğini doğrulayın.

Artıları: Basit uygulama; temel entegrasyonun çalışıp çalışmadığını belirlemek kolay; minimum kurulum gerektirir; mesaj içeriği biçimlendirmesini hızlı bir şekilde doğrulamaya olanak tanır.

Eksileri: Orkestrasyon mantığı ve durum geçişlerini tamamen göz ardı eder; kanallar arasındaki yarış koşullarını veya zamanlama sorunlarını tespit edemez; zaman aşımı yapılandırmalarını veya öncelik geçersiz kılmaları doğrulayamaz; failover zincirlerindeki sessiz hatalar keşfedilememektedir çünkü her kanal izole olarak işlevsel görünmektedir.

Çözüm B: Gerçek Cihazlarla Üretim Kum Havuzu Testi

Canlı tedarikçileri (Twilio, SendGrid, FCM) kum havuzu modlarında gerçek test cihazları ve gerçek telefon numaraları ile kullanın.

Artıları: Gerçek tedarikçi davranışını ve gecikmeleri doğrular; taşıyıcı ağlarla gerçek dünya uyumluluğunu sağlar; gerçek teslimat onay web kancalarını test eder; SMS birleştirme sınırları gibi sağlayıcıya özgü hüsranları yakalar.

Eksileri: Ölçeklendirdiğinde pahalı olur; sağlayıcı kesintilerini veya bölgesel arızaları kolayca simüle edemez; oran sınırlama stresi test etmeyi veya tekrar eden hata senaryolarını engeller; belirli zamanlama senaryolarını (örneğin, TCP zaman aşımları veya 504 Gateway Timeout hataları) yeniden üretmek zor olabilir; arızaları kasıtlı olarak tetiklemek, kabul edilebilir kullanım politikalarını ihlal edebilir.

Çözüm C: Proxy Tabanlı Kesme ve Durum Makinesi Doğrulaması

HTTPS trafiğini uygulama sunucuları ile bildirim sağlayıcıları arasında kesmek için bir man-in-the-middle proxy (örneğin, Charles Proxy) dağıtın. Belirli uç noktaların HTTP 503 Servis Kullanılamaz dönmesini veya artifisyel gecikmeler (90 saniye bekletme) üretmesini simüle etmek için yapılandırın. Aynı zamanda, uygulamanın veritabanını veya iç REST API'lerini sorgulayarak durum geçişlerini (PUSH_SENT → PUSH_FAILED → SMS_TRIGGERED) gerçek zamanlı olarak doğrulayın.

Artıları: Arıza senaryoları ve zamanlama üzerinde kesin kontrol; tekrar edilebilir ve belirleyicidir; son kullanıcıların göremediği iç durum değişikliklerini doğrular; maliyet açısından etkilidir (hiçbir gerçek SMS/E-posta ücreti yoktur); karmaşık dizileri simüle eder ("Push zaman aşımına uğrar, SMS HTTP 429 ile kısıtlanır, ardından E-posta başarıyla gider") ; sağlayıcı yan etkileri olmadan idempotentlik anahtarları ve tekrar deneme başlıklarının test edilmesine olanak tanır.

Eksileri: SSL sertifikaları ve proxy ayarlarını yapılandırmak için teknik kurulum gerektirir; gerçek cihaz alımını test etmez (tamamlayıcı fiziksel test gerektirir); simüle edilen yanıtlarla temsil edilmeyen sağlayıcıya özgü hüsranları gözden kaçırabilir; diğer geliştirme ortamlarını etkilememek için dikkatli yapılandırma gerektirir.

Seçilen Çözüm ve Sonuç:

Temel iş riski orkestrasyon mantığı ve durum yönetiminde yer aldı, bu nedenle Çözüm C'yi seçtik. Trafigi keserek FCM uç noktasının 90 saniye sonra zaman aşımına uğramasına neden olarak kritik bir hatayı keşfettik: failover zamanlayıcısı, isteği iletmek yerine yanıt zaman aşımına uğradığında veya hatalı olduğunda başlamıştı; bu, SMS'nin önceden işlemeye başlamasına neden oldu, push hala işlenirken. Bu, push'ın yeniden denemesi sırasında birkaç dakika sonra gelen tekrar eden bildirimlere yol açtı.

Zamanlayıcı mantığını, kesin bir devre kesici modeli (sadece onaylı bir hata veya açık zaman aşımı sonrasında failover) uygulayacak şekilde düzelttikten sonra, proxy kesmesi yoluyla durum makinesinin doğru geçiş yaptığını doğruladık: PUSH_PENDING → (60s zaman aşımı) → PUSH_FAILED → SMS_TRIGGERED → SMS_DELIVERED. Regresyon testleri, herhangi bir çift teslimat olmadığını doğruladı ve kaos testleri (tedarikçi bağlantılarını rastgele kesme) doğru kaskad ile %99,9 teslimat güvenilirliğini gösterdi.


Adayların sıkça gözden kaçırdığı şeyler

Soru 1: Ağ zaman aşımı nedeniyle aynı bildirimin tekrar denendiği durumda, kullanıcıların çift uyarılar almadığından emin olmak için, idempotentliği nasıl güvenilir bir şekilde test edersiniz?

Birçok aday, arayüzü veya cihazı kontrol etmeyi veya birden fazla aynı mesajın gelip gelmeyeceğini görmek için beklemeyi önermektedir. Bu, idempotentliğin sadece uygulama içinde değil, sağlayıcı sınırında da sağlanması gerektiği mimari nüansı gözden kaçırmaktadır.

Doğru yaklaşım, idempotentlik anahtarı doğrulaması gerektirir. Öncelikle, sağlayıcılara gönderilen API yüklerinde HTTP başlıklarının içeriğini kontrol edin ve benzersiz idempotentlik anahtarlarının (örneğin Idempotency-Key veya X-Request-ID başlıkları) dahil edilip edilmediğini doğrulayın. Ardından, ilk talepten zaman aşımını kasıtlı olarak tetikleyin ve tekrar deneme isteğinin aynı anahtarı içerip içermediğine bakın. Son olarak, mesaj kuyruğunu (örneğin, RabbitMQ, Amazon SQS) veya sağlayıcı günlüklerini sorgulayarak sistemin tekrar denemeyi yeni bir bildirim olarak işlemekte işlemediğine emin olun. Acemi testerlar, Twilio veya SendGrid gibi sağlayıcıların doğru başlıklar verilmediği takdirde zevkle çift iletiler gönderdiğini unutarak, doğrulamaların bu anahtarların tekrar denemeler sırasında varlığı ve benzersizliğini doğrulamasını gerektirdiğinin farkında olmayabilir.

Soru 2: Kısmi kesintiler sırasında kullanıcı tercih geçersiz kılmalarını test ederken, birincil kanal başarısız olduğunda "Rahatsız Etmeyin" ayarlarının göz önünde bulundurulduğunu nasıl doğrularsınız?

Adaylar çoğunlukla, tercihleri olumlu durum senaryolarında test eder, ancak bunları bozulma testlerinde doğrulamayı başaramaz, failover'ın her zaman kullanıcı ayarlarının üzerinde öncelik taşıdığını varsayarlar.

Metodoloji, kalıcı durumu geçici davranışla çapraz referanslama gerektirir. Öncelikle, gece saatlerinde SMS'nin bastırıldığı ancak E-posta'nın izinli olduğu bir kullanıcı profili yapılandırın. Ardından, proxy'nizi kullanarak tüm SMTP trafiğini engellerken (E-posta sağlayıcı arızasını simüle etmek) SMS trafiğinin başarılı olmasına izin verin. Kritik olmayan bir bildirimi göndermeye çalışın. Sistem, E-posta arızası olmasına rağmen SMS'ye failover olmamalıdır, çünkü kullanıcının tercih geçersiz kılması, failover zincirinden daha önceliklidir. Bunu doğrulamak için, bildirim günlüklerini kontrol edin ve "PREFERENSE GÖRE BASTIRILMIŞ" veya "KULLANICI AYARI TARAFINDAN ENGELLENMİŞ" durumunu arayın; bunun yerine "BAŞARISIZ" durumunu kontrol etmeyin. Birçok testçi, bunun bir negatifin - bir SMS'nin yokluğu - doğrulanmasını gerektirdiğini kaçırır; bu, cihaz kontrolünden ziyade dikkatli günlük incelemesi gerektirir.

Soru 3: Sağlayıcı oran sınırlama sırasında yüksek öncelikli ve düşük öncelikli bildirimlerin aynı anda sıraya alındığı durumda öncelik kuyruklarının sıralama garantilerini nasıl doğrularsınız?

Bu, kuyruk mekaniği anlayışını test eder. Adaylar genellikle FIFO (İlk Giren, İlk Çıkar) sıralamasını varsayarlar veya önceliğin her durumda saygı gördüğünü düşünürler, ancak basınç koşulları altında test etmeden.

Birleşik enjeksiyon testleri yapmalısınız, zorunlu tıkanıklık yaratmalısınız. İlk olarak, bir burst oluşturun 50 düşük öncelikli pazarlama bildirimlerinin hemen ardından 1 kritik güvenlik uyarısını (yüksek öncelik) gönderin. Proxy'yi HTTP 429 Çok Fazla İstek yanıtları döndürmek için yapılandırarak, sistemin mesajların sıralanmasına neden olmasına zorlayın. Ardından, oran sınırlamayı geçici olarak kaldırın ve zaman damgası analizi veya mesaj tüketim günlükleri aracılığıyla sıranın hangi sırayla gittiğini gözlemleyin. Güvenlik uyarısı kuyruktan ilk çıkmalıdır (öncelik kuyruk) ve son gönderilmesine rağmen. Bunu, teslimat makbuzlarını kontrol ederek veya bir test cihazındaki gerçek varış sırasını gözlemleyerek doğrulayın. Acemiler, yalnızca bireysel mesaj gönderme değil, aynı zamanda kuyruk davranışını, basınç koşulları altında test etmenin gerektiğini unutur; bunun için, sistemin her öncelik seviyesine yalnızca fiziksel sıralar yerine tek bir paylaşımlı kuyruk ile kullanıp kullanmadığına dikkat edin.