Pact, tüketici odaklı sözleşme testleri için referans bir araçtır. Tüketiciler, bir sözleşme oluşturan birim testleri yazar, sağlayıcılar bu sözleşmeyi gerçek kodlarına karşı yeniden oynatır, bir Pact Broker sonuçları saklar ve can-i-deploy, bir sürümün yayınlanmaya güvenli olup olmadığını hattınıza bildirir. Döngü çalıştığında, izole birim testlerinin asla yakalayamayacağı entegrasyon hatalarını yakalar. Sorun, döngünün kendisidir: her tüketici ekibinde dile özel test DSL'leri, komut dosyası oluşturulacak ve sürdürülecek sağlayıcı durumları, barındırılacak ve sürümlenecek bir aracı ve kimsenin yerel olarak yeniden üretemediği nedenlerle başarısız olan sağlayıcı doğrulama yapıları. Birçok ekip, tek bir kararsız entegrasyon için Pact'i benimser ve küçük bir sözleşme testi platformu için personel görevlendirir.
İşte kapsamı baştan belirtilmiş doğrudan yanıt: Apidog, asıl sorunu üretici ve tüketici arasındaki şema kayması olan ekipler için en iyi Pact alternatifidir ki bu da çoğu ekip demektir. Sözleşme oluşturma seremonisini, doğruluk kaynağı olarak tek bir OpenAPI spesifikasyonuyla değiştirir, her test çalıştırmasında her yanıtı bu şemaya karşı doğrular, sağlayıcı göndermeden önce tüketicilerin sözleşmeye göre geliştirme yapabilmesi için spesifikasyondan akıllı taklitler sunar ve tüm bunları Apidog CLI aracılığıyla CI'da çalıştırır. Yapmadığı şey ise Pact'in tüketici odaklı aracı iş akışını kopyalamaktır: sözleşme dosyası, matris veya can-i-deploy yoktur. Eğer birçok bağımsız dağıtım yapan ekip arasında tam da bu mekanizmaya ihtiyacınız varsa, Pact kendi alanını korur ve bu makale bunu aşağıda belirtiyor.
Pact aslında ne yapar ve neyi iyi yapar
Pact'in belgeleri onu, HTTP ve mesaj entegrasyonlarını test etmek için kod öncelikli bir araç olarak tanımlar. Model tüketici odaklıdır: tüketicinin testleri bir Pact taklit sağlayıcısına karşı çalışır ve somut istek/yanıt çiftlerini bir sözleşme dosyasına kaydeder. Yalnızca tüketicinin kullandığı alanlar kaydedilir, böylece sağlayıcılar kimsenin bağımlı olmadığı her şeyi değiştirmekte serbest kalır. Sağlayıcı daha sonra bu istekleri gerçek kod tabanına karşı yeniden oynatarak sözleşmeyi doğrular ve sağlayıcı durumları her etkileşimin ihtiyaç duyduğu verileri ayarlar.
Pact Broker, bu yapıları dağıtım mantığına dönüştürür. Doğrulanmış her tüketici ve sağlayıcı sürüm çifti bir matrise iner ve can-i-deploy, göndermek üzere olduğunuz sürümün hedef ortamda zaten çalışan her şeye karşı başarılı bir doğrulaması olup olmadığını kontrol eder. Çıkış kodu 0, gönder anlamına gelir, 1 ise gönderme anlamına gelir.
Ekosistem geniştir: JVM, JavaScript, Go, .NET, Python, Ruby, Rust, PHP ve Swift dahil olmak üzere 10'dan fazla dilde resmi uygulamalar bulunmaktadır ve çoğu yerel bir Rust çekirdeğini paylaşır. Bir aracı kendi kendine barındırmak gerçek bir iş olduğu için SmartBear, ücretsiz Başlangıç seviyesi (2 entegrasyon), 50 entegrasyon için aylık 127 dolarlık Ekip seviyesi ve SSO ile şirket içi seçenekleri olan özel fiyatlı Kurumsal seviyesi bulunan yönetilen bir aracı olan PactFlow'u satmaktadır.
Seremoninin biriktiği yerler
Mesele, "döngüyü çalıştırmanın" pratikte neye mal olduğudur.
Her tüketici ekibi DSL kodu yazar. Sözleşmeler test kodundan üretilir, bu nedenle her tüketici ekibi kendi dili için Pact DSL'ini öğrenir ve çok dilli bir organizasyon birkaçını öğrenir. Eşleştirme kuralları ve taklit kurulumu, sonsuza dek yazacağınız, gözden geçireceğiniz ve yeniden düzenleyeceğiniz kodlardır.
Sağlayıcı durumları gizli bir test paketidir. Her etkileşim bir durum gerektirebilir ("42 numaralı kullanıcı ödenmemiş bir faturayla mevcut") ve sağlayıcı ekibi bunu oluşturan bir işleyici uygulamalıdır. Tüketiciler çoğaldıkça, sağlayıcı kontrol edemediği veri şekilleri için bir durum işleyicileri kataloğu tutar.
Aracı bir altyapıdır. Kendi kendine barındırıldığında bir veritabanına, yükseltmelere, kimlik doğrulamasına ve her CI sistemine web kancalarına ihtiyaç duyar. Yönetilen ise başka bir tedarikçi demektir. Her iki durumda da, sürümleme disiplini (dal adları, ortam kayıtları, bekleyen sözleşmeler) ona dokunan her ekibe öğretilmelidir.
Sağlayıcı doğrulama kararsızdır. Doğrulama, tüketici tarafından kaydedilen istekleri canlı bir sağlayıcı örneğine karşı yeniden oynatır ve bu da sağlayıcının tüm çalışma zamanını (veritabanı tohumları, kimlik doğrulama saplamaları, arka plan işleri) beraberinde getirir. Yapı kırmızıya döndüğünde, başarısız olan test başka bir ekip tarafından yazılmıştır ve can-i-deploy aracılığıyla dağıtımlarını engeller. Bu ekipler arası hata ayıklama oturumu, ekiplerin sessizce kontrolü atlamaya başladığı zamandır.
PactFlow'un kendisi bu ağırlığı kabul ediyor. Çift yönlü sözleşme testi, yeniden oynatma adımını ortadan kaldırır: sağlayıcı, sözleşmesi olarak bir OpenAPI belgesi yayınlar, tüketiciler taklit kaynaklı sözleşmeler yayınlar ve PactFlow ikisini statik olarak karşılaştırır. Bu, birçok entegrasyon için şemaları karşılaştırmanın yeterli olduğunu gösteren bir tedarikçi kabulüdür. Ve eğer spesifikasyon sözleşmeyse, geri kalan mekanizma size ne kazandırır? Aynı muhakemeyi çift yönlü sözleşme testinde de ele aldık.
Cevap: Apidog
Apidog, 500.000'den fazla geliştirici tarafından kullanılan bir API geliştirme platformudur. Tek bir OpenAPI spesifikasyonunu merkeze koyar ve ondan her şeyi üretir: dokümantasyon, taklit sunucular, istek doğrulama ve otomatik testler. Bir Pact alternatifi olarak, sunulan şey farklı bir sözleşme teorisidir, API sözleşme testi makalesinde belirttiğimiz gibi: spesifikasyonu sözleşme yapın, sonra bunu her yerde mekanik olarak uygulayın.
- Tek sözleşme, sıfır DSL. Spesifikasyon, üretici ve tüketici arasındaki anlaşmadır. Kimse beş dilde sözleşme oluşturma kodu yazmaz; ekipler tek bir belgeyi görsel olarak veya kod olarak okur ve düzenler.
- Her çalıştırmada şema doğrulama. Apidog'da gönderdiğiniz her istek ve CI'daki her test senaryosu, yanıtı spesifikasyona karşı otomatik olarak doğrular. Yeniden adlandırılmış bir alan, bir tür değişikliği veya düşürülen bir özellik, kimsenin bir doğrulama yazmasına gerek kalmadan çalıştırmayı başarısız kılar. Bu, çoğu ekibin Pact'i satın alma nedeni olan şema kayması algılamasıdır.
- Tüketiciler ilk günden itibaren sözleşmeye göre geliştirme yapar. Akıllı taklit sunucusu, bir uç nokta tanımlandığı anda gerçekçi, şema türevi yanıtlar sunar. Komut dosyası oluşturulacak sağlayıcı durumu yoktur; taklit elle değil, otomatik olarak üretilir.
- Aracı olmadan CI uygulaması.
apidog run, herhangi bir hattaki test senaryolarını yürütür. Spesifikasyonu bozan bir sağlayıcı yapısı, dağıtımdan önce kendi CI'sında başarısız olur: aynı "bozucu değişiklik gönderme" sonucu, matriste değil, kaynakta uygulanır.
Geçişin adım adım görünümü
Sözleşmenin kendisi
Pact'te sözleşme, örnek etkileşimlerin oluşturulmuş bir JSON dosyasıdır; bir tüketicinin gözlemlediklerini açıklar. Apidog'da ise sözleşme, OpenAPI spesifikasyonudur: her uç nokta için türler, gerekli alanlar, numaralandırmalar ve hata şekilleri, dal tabanlı sürümleme ile tek bir yerde sahiplenilir. Takas dürüsttür: Pact'in tüketici başına dilimi, bir sağlayıcıya hangi alanların değiştirilmesinin güvenli olduğunu tam olarak söylerken, paylaşılan bir spesifikasyon bu kullanım sinyalini taşımaz. Spesifikasyonun bunun yerine sunduğu şey, belgelerin, taklitlerin, testlerin ve istemcilerin üzerinde anlaştığı tek bir yapıdır; bu çerçeve hakkında daha fazlası için API sözleşmesi nedir makalesine bakabilirsiniz.
Sağlayıcı tarafı doğrulama
Pact, tüketici etkileşimlerini canlı sağlayıcıya karşı yeniden oynatır. Apidog'un eşdeğeri, CLI aracılığıyla CI'da, şema doğrulaması açıkken gerçek uygulamaya karşı test senaryoları çalıştırmaktır. Sağlayıcı, tüketici tarafından yazılmış durumların bir kataloğu olmadan yine de sözleşmeye karşı doğrulanır.
Tüketici tarafı geliştirme
Pact, her tüketiciye birim testleri içinde bir taklit sağlayıcı verir. Apidog ise her tüketiciye spesifikasyondan türetilmiş, ekipler arasında paylaşılabilir, özel verilere ihtiyaç duyduğunuz yerlerde özel beklentilere sahip bir çalışan taklit URL'i verir. Ön uç ve alt akım ekipleri, sağlayıcı tek bir uygulama satırı bile yazmadan önce başlar; spesifikasyon odaklı taklitlerin elle oluşturulanlarla nasıl karşılaştırıldığını öğrenmek için sözleşme testi ve taklit sunucular makalesine bakınız.
Dağıtım geçitleme
Bu, Pact'in en güçlü kartıdır ve Apidog bunu kopyalamaz. Hizmetler arası matris veya can-i-deploy yoktur. Apidog bunun yerine sözleşme seviyesinde geçitleme yapar: spesifikasyonu ihlal eden bir sağlayıcı değişikliği, sağlayıcının hattını başarısız kılar ve bir spesifikasyon değişikliği, tüm tüketiciler için taklitleri ve belgeleri aynı anda yeniden oluşturan açık, gözden geçirilmiş bir olaydır. Hizmetlerin birkaç koordineli hat aracılığıyla dağıtıldığı yerlerde, sözleşme seviyesinde geçitleme %80'lik durumu oluşturur. Bilinmeyen zamanlarda bağımsız olarak dağıtım yapan düzinelerce ekip için matris seviyesinde geçitleme hala geçerliliğini korur.
Pact ve PactFlow ile Apidog'a bir bakış
| Pact + PactFlow | Apidog | |
|---|---|---|
| Sözleşme artefaktı | Oluşturulan sözleşme dosyaları (tüketici başına) | Tek bir OpenAPI spesifikasyonu |
| Sözleşme kodunu kim yazar | Her tüketici ekibi, dile özel DSL | Kimse; spesifikasyon görsel olarak veya kod olarak düzenlenir |
| Sağlayıcı doğrulama | Etkileşimleri yeniden oynatma + sağlayıcı durumları | Test senaryoları + otomatik şema doğrulama |
| Tüketici taklitleri | Test içi taklit sağlayıcı | Spesifikasyondan barındırılan akıllı taklit, ücretsiz |
| Kayma algılama | Doğrulama çalıştırmalarında | Her istekte ve her CI çalıştırmasında |
| Dağıtım geçitleme | Aracı matrisi + can-i-deploy | Hizmet başına sözleşme geçitli CI |
| Altyapı | Aracı (kendi kendine barındırılan veya PactFlow SaaS) | Ekstra yok; bulut çalışma alanı dahil |
| Belgeler ve tasarım | Kapsam dışı | Etkileşimli belgeler, görsel spesifikasyon düzenleyici |
| Maliyet | OSS ücretsiz; PactFlow 2 entegrasyon için ücretsiz, Ekip aylık 127$ | 4 kullanıcıya kadar ücretsiz; kullanıcı başına aylık 9$'dan başlayan ücretli planlar |
Maliyet ve uygunluk hesaplaması, dürüstçe
Pact'in kütüphaneleri açık kaynaklı ve sonsuza dek ücretsizdir. Ödediğiniz şey koordinasyondur: aracı barındırma veya PactFlow (Ekip aylık 127 dolar, yıllık yaklaşık 1.385 dolar olarak faturalandırılır), artı DSL testlerinin, durum işleyicilerinin ve ekipler arası doğrulama hata ayıklamasının tükettiği mühendislik süresi. Bu süre gerçek faturadır ve entegrasyon sayısıyla birlikte ölçeklenir.
Apidog'un ücretsiz planı, spesifikasyon düzenleyici, sınırsız taklit sunucu kullanımı, test senaryoları, şema doğrulama ve CLI çalıştırmaları ile 4 kullanıcıyı kapsar; ücretli planlar kullanıcı başına aylık 9 dolardan başlar. Yani karşılaştırma lisans ücretleri değildir. Bu, sözleşme testi mekanizmasını sürdürmeyi mi yoksa sözleşme çalışmalarının zaten istediğiniz API istemcisiyle birlikte geldiği bir platformu mu tercih edeceğinizle ilgilidir (araçları birleştirmek mi? en iyi Postman alternatifinden başlayın). Baştan spec-first bir yığın seçen ekipler, parçaların sözleşme odaklı geliştirme araç yığınında nasıl birleştiğini görebilir.
Pact'ten geçiş
Sözleşme dosyalarını dönüştürmezsiniz; spesifikasyonu sözleşme olarak yükseltirsiniz.
- Gerçek bir OpenAPI spesifikasyonu edinin. Eğer bir tane varsa, Apidog'a aktarın; hemen canlı belgeler, taklitler ve doğrulama kuralları haline gelir. Yoksa, kod açıklamalarından bir tane oluşturun, sözleşme dosyalarınızı tüketicilerin gerçekten kullandığı uç noktaların bir kontrol listesi olarak kullanın.
- CI'da şema doğrulamasını açın. Sağlayıcının uç noktaları için test senaryoları oluşturun ve her sağlayıcı derlemesinde CLI ile çalıştırın. Bu, sağlayıcı doğrulamasının yerini alır.
- Tüketicileri akıllı taklit sunucusuna yönlendirin. Tüketici başına Pact taklit kurulumlarını barındırılan taklit URL'i ile değiştirin. Her tüketici geçiş yaptıkça DSL kodunu silin.
- Dağıtımları değil, spesifikasyon değişikliklerini geçitleyin. Spesifikasyon düzenlemelerini bir dal üzerinde gözden geçirilmiş değişiklikler haline getirin, böylece bozan düzenlemeler olay haline gelmeden önce görünür farklılıklar olarak ortaya çıkar.
- Aracıyı en son emekliye ayırın. Bağımsız dağıtım zamanlamasının canlı bir risk olduğu herhangi bir entegrasyonda
can-i-deploy'i tutun; bir seremoni olduğu yerde bırakın.
Pact'in hala anlamlı olduğu durumlar
Eğer birçok ekip hizmetleri kendi zaman çizelgelerine göre bağımsız olarak dağıtıyorsa ve "X sürümü şu anda çalışan her şey göz önüne alındığında üretime girebilir mi" sorusuna makine tarafından kontrol edilebilir bir yanıt arıyorsanız, Pact'in aracı matrisi ve can-i-deploy tam da bunun için tasarlanmıştır ve Apidog bunları kopyalamaz. Mesaj kuyruğu sözleşme testi de Pact'in alanıdır. PactFlow'un çift yönlü modu, ekosistemden ayrılmadan yeniden oynatma seremonisinden kurtulmak istiyorsanız ara adımdır; spesifikasyonun sözleşmeyi taşıyabileceği Apidog'un öncülünü paylaşır. Ancak ağrınız ekipler arası dağıtım sıralaması yerine kayma, taklitler ve CI kontrolleriyse, Pact'in faydasının bir kısmı için tam bedelini ödüyorsunuz demektir.
Sıkça sorulan sorular
Apidog, Pact gibi bir sözleşme test aracı mıdır?
Sözleşmeleri farklı şekilde uygular. Pact, test kodundan tüketici başına sözleşmeler oluşturur ve bunları sağlayıcılara karşı yeniden oynatır. Apidog, OpenAPI spesifikasyonunu sözleşme yapar ve her isteği ve CI çalıştırmasını ona göre doğrular, bu da aracı iş akışı olmadan şema kaymasını kapsar. Bu ayrım API sözleşme testi makalesinde açıklanmıştır.
Apidog, can-i-deploy veya bir Pact Broker'ı destekliyor mu?
Hayır. Apidog'da doğrulama matrisi veya hizmetler arası dağıtım geçidi yoktur. Geçidi sözleşmedir: spesifikasyonu ihlal eden yapılar kendi hatlarını başarısız kılar. Matris seviyesinde geçitlemeye ihtiyaç duyan ekipler, bu entegrasyonlar için Pact'i kullanmaya devam etmelidir; orta yol seçeneği, çift yönlü sözleşme testinde ele alınan statik karşılaştırma yaklaşımıdır.
Apidog, Pact'in tüketici taklitlerini değiştirebilir mi?
Evet, çoğu kullanım için. Akıllı taklit sunucusu, sıfır kurulumla spesifikasyondan şemaya uygun yanıtlar üretir, ayrıca belirli durumlar için özel beklentiler sunar, böylece tüketici ekipleri taklit sağlayıcı DSL yazmak yerine canlı bir sözleşme URL'ine karşı kodlama yapar. Daha geniş araç yelpazesi için sözleşme testi ve taklit araçları makalesine bakınız.
Sağlayıcıyı spesifikasyona karşı fuzzing yapmak ne anlama geliyor?
Apidog'un senaryo testlerini spesifikasyon tabanlı bir özellik test aracıyla eşleştirmek, örnek yeniden oynatmadan daha geniş bir negatif kapsam sağlar. Önde gelen seçeneği Schemathesis nedir makalesinde karşılaştırdık ve aynı spesifikasyon her iki aracı da yönlendiriyor.
PactFlow, Apidog'a kıyasla ne kadar maliyetli?
PactFlow'un Başlangıç seviyesi 2 entegrasyon için ücretsizdir; Ekip aylık 127 dolardan (yıllık yaklaşık 1.385 dolar olarak faturalandırılır) 50 entegrasyon için listelenir; Kurumsal seviye ise özel fiyatlıdır. Apidog, 4 kullanıcıya kadar ücretsizdir, ücretli planlar kullanıcı başına aylık 9 dolardan başlar, sözleşme araçları ayrı bir aracı olarak faturalandırılmaz, dahildir. Yakala-tekrarla araçlarını da mı karşılaştırıyorsunuz? En iyi Keploy alternatifi makalesine bakınız.
Seremoniyi emekliye ayırın, sözleşmeyi koruyun
Eğer Pact kurulumunuz şema kaymasını yakalamak için varsa, bu garantiyi tek bir spesifikasyondan, her çalıştırmada doğrulanmış olarak ve tüketicilerinizin zaten istediği taklitlerle elde edebilirsiniz. OpenAPI dosyanızı içe aktarın, apidog run komutunu CI'a bağlayın ve taklit URL'ini dağıtın. Apidog'u indirin veya tarayıcıda başlayın; 4 kişilik bir ekip hiçbir şey ödemez ve artık bakmak zorunda olmadığınız aracı asıl meseledir.
