İşte Elixir'deki Harici API'leri Bypass ile Test Etme

$config[ads_kvadrat] not found

The Hardest Karaoke Song in the World

The Hardest Karaoke Song in the World

İçindekiler:

Anonim

Hizmet Odaklı Mimari ilkelerine öncelik veriyoruz Ters. Bu, açıkça tanımlanmış sorumluluklara sahip küçük, bakımı yapılabilir bileşenlere sahip olduğumuz anlamına gelir. Birbirleriyle (çoğunlukla) Temsilci Devlet Aktarımı veya REST API'leri aracılığıyla iletişim kurarlar.

Bu esneklik sağlar ve önemli bir faset hariç bize iyi hizmet etti: Test. Test yaparken, aşağıdakilerden kaçınılması gerekir:

  • Aynı makinede çalışan harici servislere bağlı.
  • Yavaş testler.

Uygulamalar doğal olarak dış hizmetlere dayandığından, bu bağımlılıklar için bir test stratejisinin uygulanması çok önemlidir.

Geçenlerde Bypass'ı kullanmaya başladık ve oraya nasıl geldiğimizi ve özellikle onu nasıl kullandığımızı açıklayacağım.

Geçmiş

Yöntemleri taklit edin ve bunun gibi bazı örnek verileri döndürün:

Ruby / Rails dünyasında “gitmenin yolu” buydu (ve hala inanıyorum). Ne yazık ki, bu José Valim'in en iyi açıkladığı şekilde kötü davranışları teşvik ediyor.

Daha sonra harika bir kütüphane olan ExVCR kullanmaya başladık, ancak alay / taslaklarla benzer sakıncaları var: Tembellik duygusunu teşvik ediyor ve iyi tanımlanmış API'ler için kritik olan endişelerin ayrılmasını teşvik etmiyor. ExVCR, gerçek veriyi “kaydetmeyi” ve “oynatmayı” sağlar. Entegre edilmesi çok kolaydır (testinizde birkaç satır ve diğer her şeyle ilgilenilir). Fakat ideal olarak, testlerde dış bağımlılıkları düşünmeniz gerekir, onları soyutlamayın. Uç nokta davranışının minimum ek yük ile test edilmesi gereken senaryolar için hala uygun bir seçenek olabilir (Amazon’un S3 gibi AWS Servislerine yapılan aramaları test etmek için kullanıyoruz).

Adaptörleri Girin

Adaptörler çok iyi çalışır ve API sözleşmelerinde ve açıkça tanımlanmış iletişim sınırlarında tartışmayı teşvik eder. Bu yaklaşımı özellikle Adaptör daha karmaşık olduğunda (JSON-RPC soketi gibi) kullanıyoruz.

Bir Adaptör böyle görünebilir:

Ancak, basit HTTP Bitiş Noktaları için, Adaptörler çok iş gibi görünüyor ve önemli bir dezavantajı var: Tükettikleri kütüphaneleri test denkleminin dışında bırakıyorlar. HTTP veya JSON kütüphanelerindeki herhangi bir şey değişirse, testler onu yakalayamaz. Bu yaklaşım tarafından denenmeyen üretim kritik kod miktarı kabul edilemez.

Şimdi ve Gelecek

Bypass, kullandığımız harici servisleri simüle eden testlerde çok basit bir web sunucusu başlatmamızı sağlar.

Artık HTTP kütüphanesi, JSON kodlama / kod çözme kütüphanesi ve kimlik doğrulama mekanizmaları dahil tüm yığını test edebiliriz. Bypass README iyi yazılmış, bu yüzden uygulama detaylarını değiştireceğim. Ancak, testleri özlü ve okunaklı tutmak için nasıl kullandığımızı biraz değiştiriyoruz:

Öncelikle, testler tam bir entegrasyon paketi olarak yapıldığında bazen Facebook'u aramak istiyoruz. Bunu, Facebook API’nin beklentilerimize göre hala çalışır durumda olmasını sağlamak için düzensiz yapıyoruz. Ekleme - entegrasyon dahil için karışım testi API'yi simüle etmez, ancak bunun yerine harici servise çağırır (satır 5, 7).

Bypass'ı kullanan her testin sahip olması gereken dış hizmetlere yönelik istekleri simüle ettiğimizde açık bir durumdayız. @tag facebook_bypass (satır 7).

Sonunda, handle_fb işlevi (satır 30–39) çağrılır (verilen request_path maçlar). Hangi yoldan tepki gösterdiğimizi açıkça belirttiği ve farklı yollar için farklı işlevler tanımlamamıza izin verdiği için işlev kafasında eşleştirmeyi seviyorum.

Bypass sadece etiketli testlerde çalışır @tag: bypass ve bizim entegrasyon takımımızı çalıştırmadığımızda. Baypas'ı ayarlarken yaptığımız bir şey daha, etiketin bir sayfa kimliği geçirmesine izin vermek (satır 8, 20). Öyleyse, Bypass'ı kullanan bir test tüm ihtişamıyla nasıl görünüyor:

Gördüğünüz gibi facebook_bypass etiketi API'yi simüle ettiğimizi açıkça belirtir (entegrasyon modunda olmadıkça). Bilgileri benzetilmiş API'ye aktarmamızı sağlar ve aynı Bypass yapılandırmasını farklı testler için yeniden kullanmak çok kolaydır.

Umarım bu harici API’leri test etmenize yardımcı olur. Başka sorularınız varsa beni Twitter'da bulabilirsiniz (aşağıya bakınız).

$config[ads_kvadrat] not found