Blog

Ark Anchors: Her Teste Bilinen Bir Durumdan Başlayın

Yeniden kullanılabilir ve sürüme sabitlenmiş SQL fixture’larının alt kümelenmiş ve geçici test veritabanlarını CI, QA ve demolarda nasıl deterministik hale getirdiği.

Gerçekçi bir test veritabanı her zaman teste hazır bir veritabanı değildir.

Güvenli bir alt küme doğru müşterileri, siparişleri ve ödemeleri içerebilir; ancak testin ihtiyaç duyduğu kesin durum yine de eksik olabilir: süresi dolmuş bir abonelik, bekleyen bir iade, kilitli bir hesap veya yalnızca belirli bir kiracı (tenant) için etkinleştirilmiş bir özellik bayrağı.

Ekipler bu ihtiyacı çoğunlukla repository’lere ve CI pipeline’larına dağılmış tek kullanımlık seed script’leriyle çözer. Zaman içinde bu script’ler birbirinden kopar, yanlış sırada çalışır ve denetlenmesi zor hale gelir.

Ark Anchors, senaryoya özgü bu değişiklikleri yeniden kullanılabilir ve deterministik hale getirir.

Anchor nedir?

Anchor, Ark tarafından yönetilen idempotent bir SQL fixture’ıdır. Hazırlanmış bir veritabanına küçük ve kontrollü bir değişiklik uygulayarak ortamın bilinen bir durumda başlamasını sağlar.

Bir Anchor tanımı şunları içerebilir:

  • PostgreSQL, MySQL veya genel SQL desteği
  • string, tarih, sayı, boolean ve enum gibi tipli çalışma zamanı parametreleri
  • varsayılan ve zorunlu parametre değerleri
  • hedef veritabanı kısıtları
  • birden fazla Anchor seçildiğinde uygulanacak çalıştırma sırası
  • yönetişim için etiketler ve aktif/pasif durumu

Anchors; alt kümeleme sonrasında, test ortamı hazırlandıktan sonra veya ihtiyaç anında çalıştırılabilir. Böylece fixture, ilgisiz bir deployment script’inin içine gizlenmek yerine iş akışının doğru noktasına yerleştirilir.

Sürüme sabitleme neden önemlidir?

Bir iş Anchor seçtiğinde Ark istenen sürümü kaydeder. Çalıştırmadan önce kontrol düzlemi tanımı doğrular, parametreleri çözer, SQL’i ifadelere ayırır ve değiştirilemez bir yürütme planı oluşturur.

İş beklerken Anchor değişirse Ark sessizce farklı SQL çalıştırmak yerine eski seçimi reddeder. Plan ayrıca hash’lenir; böylece çalışma, yeniden üretilebilirlik ve denetim için sabit bir kimlik kazanır.

Yürütme sonuçları hangi Anchor sürümünün çalıştığını, kaç ifadenin uygulandığını, etkilenen satır sayılarını, süreyi ve başarı durumunu kaydeder. SQL metninin ve parametre değerlerinin iş geçmişinde açığa çıkması gerekmez.

Anchors hangi durumlarda kullanışlıdır?

Yaygın örnekler şunlardır:

  • bir siparişi iade edilebilir duruma getirmek
  • bilinen bir dolandırıcılık inceleme vakası oluşturmak
  • kimlik doğrulama testi için kullanıcı hesabını kilitlemek
  • kiracıya (tenant) özgü bir özellik bayrağını etkinleştirmek
  • faturalama veya yenileme sınırlarının çevresindeki tarihleri ayarlamak
  • her sunumdan önce aynı temiz demo senaryosunu hazırlamak

Temel tasarım kuralı, bir Anchor’ın tekrar tekrar güvenle çalıştırılabilmesidir. İdempotent ifadeler, yeniden denemeleri ve tekrarlanan ortam oluşturma işlemlerini öngörülebilir tutar.

Anchors, Business Objects’i tamamlar

Anchors ilişkisel alt kümelemenin yerine geçmez.

Business Objects, ortamda hangi domain kayıtlarının bulunacağını belirler: müşteri, siparişleri, ilgili ödemeler ve aralarındaki ilişkiler. Anchors ise hazırlanmış bu veri üzerinde odaklı değişiklikler yapar.

Bu ayrım iki konuyu da anlaşılır tutar:

  • Business Object: doğru iş bağlamını seçer
  • Anchor: senaryonun kesin durumunu oluşturur

Bu birleşim CI, QA, geliştirici sandbox’ları, kabul testleri ve demolar için kullanışlıdır. Her ortam üretime sadık ilişkilerle, korunmuş hassas verilerle ve test paketinin beklediği deterministik koşullarla başlayabilir.

Sonuç, kırılgan seed script’leriyle dolu yeni bir klasörü yönetmekten çok daha basittir: senaryoyu bir kez tanımlayın, sürümleyin, parametreleştirin ve veritabanını hazırlayan aynı yönetilen iş akışı üzerinden uygulayın.