Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Kodunuz bir API'yi çağırdığında, gerçek API'nin başarısız olmasını beklemeden test etmek için bir yönteme ihtiyacınız vardır. Aralarından seçim yapabileceğiniz 5 tür stand-in vardır. kişiler adları gevşek bir şekilde kullandığından, bu makalede bunları şu şekilde kullanır:
- Stub: HTTP istemciniz veya SDK çağrınız için, hazır yanıt döndüren işlem içi bir değiştirme. Hızlı ve tekrarlanabilir bir uygulamadır ve yazdığınız yanıt için mantığınızı test eder.
- Mock: kodunuzun onu nasıl çağırdığını da kaydeden bir stub, böylece testiniz çağrıları kontrol edebilir. Stub'a kadar ulaşır.
- Sahte sunucu: uygulamanızın gerçek API yerine HTTP üzerinden çağırdığı, genellikle bellek içi küçük bir çalışma sunucusu. HTTP istemcinizi test eder, ancak uygulamanızı onun URL’sine yönlendirmeniz gerekir.
- Öykünücü: Genellikle hizmetin sahibi tarafından yayımlanan ve desteklediği işlemler için gerçek sürüm gibi davranan bir hizmetin yerel sürümü. Hata işlemeye güvenmeden önce hangi sınırları ve hataları kapsadığını denetleyin.
- Araya giren proxy: Uygulamanızla API arasındaki ağda yer alır. Uygulamanız gerçek URL'yi çağırır ve proxy istekleri sizin tanımladığınız yanıtla geçirir veya bazılarını yanıtlar. Uygulamanızın trafiğini ara sunucu üzerinden göndermesi ve HTTPS için ara sunucu sertifikasına güvenmesi gerekir.
API çağıran kodu test etme
| Approach | Neleri test eder? | Neye ihtiyacı var? | Doğru zaman |
|---|---|---|---|
| stub veya mock | Belirli bir yanıt için mantığınız | Test framework'iniz | Birim testlerinde iş mantığını, ayrıştırma ve hata dallarını test edebilirsiniz |
| Sahte sunucu | HTTP istemciniz ve serileştirme | Uygulamanızda temel URL ayarı veya yapılandırma anahtarı | API henüz mevcut değil veya kullanıcı arabirimi çalışması için kararlı bir arka uç gerekir |
| Emülatör | Desteklenen işlemler için gerçek hizmete yakın davranış | Farklı bir uç nokta veya bağlantı dizesi | Hizmetin sahibi bir örnek gönderir ve siz çevrimdışı geliştirirsiniz |
| Test hesabı olan gerçek API | Gerçek olan | Kimlik bilgileri, kota ve para | Ana yolu uçtan uca doğrularsınız |
| Müdahaleci ara sunucu | SDK yeniden denemeleri ve yanıt üst bilgileri dahil olmak üzere gerçek URL'lerde çalışan uygulamanız | Ara sunucu ayarları ve sertifika güvenilirliği | Uygulamanızı değiştirmeden hataları, sınırları ve gecikme süresini test edebilirsiniz |
Bunlardan 1'den fazlasına ihtiyacınız var. Stub'lar birim testlerinizi hızlı tutar. Bir ara sunucu, gerçek API yanlış davrandığında uygulamanın tamamının ne yaptığını gösterir. 2'nin birbiriyle nasıl ilişkili olduğu hakkında daha fazla bilgi için bkz. Dev Proxy vs birim testleri.
Kodlama aracıları ne oluşturur
Uygulamanızın API hatalarını işlemesini ve çalıştığını göstermesini bir kodlama ajanından istediğinizde, sizin için bir yedek seçer. Hangisinin olduğunu öğrenmek istediğimiz için 3 kodlama aracısıyla (210 çalıştırma) bir test çalıştırdık. Görevlerde "hız sınırlamasını doğru şekilde işleme ve çalıştığını gösterme", "gerçek API çağrılarına para harcamadan doğrulama" ve "OpenAI anahtarı veya İnternet bağlantısı olmadan bunu çalıştırma" gibi ifadeler kullanıldı.
- Çalışan kodun istendiği 140 çalıştırmanın %76’sında aracı, hatayı manuel olarak oluşturdu: fetch stub’ları,
httpx.MockTransportveya geçici bir HTTP sunucusu. - 105'in 61'inde GitHub, OpenAI veya hava durumu API'si çağıran uygulamalar üzerinde çalışan aracı, sahtesine ulaşabilmesi için uygulamaya bir temel URL veya yapılandırma anahtarı ekledi.
- Gerçek API'nin kullanılabilir olduğu 75 çalıştırmada ve istem bunu elemedi, 0 uygulamayı gerçek API URL'sinde test etti.
Stub'lar birim testleri için makul bir seçimdir. Eksik olan, onların dışarıda bıraktığı şeydir. Aracının stub'ı, API'nin gönderdiğiyle eşleşmeyebilecek, aracının beklediği hatayı döndürür. Ve uygulamanızla sahte gemilere ulaşmak için eklediği geçiş.
Temsilcinizin testleriyle nasıl çalışılır
- İş mantığınız için stub'ları saklayın. Hızlıdırlar ve ajanın yazdığı dalları test ederler.
- Gerçek hata biçimini isteyin. Aracıdan her sanal hatayı sağlayıcının belgelenmiş durum kodları, üst bilgileri ve gövde alanlarına dayandırmasını isteyin. Çıplak 429, uygulamanızın
retry-afterokuduğunu veya bir faturalama hatasını hız sınırından ayırt ettiğini test etmez. - Testler için eklenen geçişleri gözden geçirin. Eğer aracı yalnızca testlerin sahte bir hizmete erişebilmesi için bir temel URL ayarı eklerse, üretim kodunuzda bu ayarı isteyip istemediğinize karar verin.
- Sanal hatalarla gerçek URL'lerde uygulamayı bir kez çalıştırın. Göndermeden önce çalışan uygulamanın, SDK'sının ve yeniden deneme ilkesinin API'nin kendi hatalarıyla ne yaptığını denetleyin. Aracının hata işleme adımlarını adım adım gözden geçirmek için bkz. Kodlama aracınızın yazdığı hata işlemeyi nasıl doğrularsınız.
Uygulamanızda deneyin
Dev Proxy, geliştirme için istekleri yakalayan bir ara sunucudur. Uygulamanızın zaten çağırdığı URL'ler için tanımladığınız yanıtları, uygulamanızın kodunda hiçbir değişiklik yapmadan döndürür. Yapılandırmanızda MockResponsePlugin'i devproxyrc.jsonetkinleştirin:
{
"$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v3.3.1/rc.schema.json",
"plugins": [
{
"name": "MockResponsePlugin",
"enabled": true,
"pluginPath": "~appFolder/plugins/DevProxy.Plugins.dll",
"configSection": "mocksPlugin"
}
],
"urlsToWatch": [
"https://api.contoso.com/*"
],
"mocksPlugin": {
"$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v3.3.1/mockresponseplugin.schema.json",
"mocksFile": "mocks.json"
}
}
Ardından yanıtını mocks.json içinde tanımlayın. Bu, tahmin uç noktası için Retry-After ve 503 başlığı ile döndürür:
{
"$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v3.3.1/mockresponseplugin.mocksfile.schema.json",
"mocks": [
{
"request": {
"url": "https://api.contoso.com/v1/forecast*",
"method": "GET"
},
"response": {
"statusCode": 503,
"headers": [
{
"name": "Retry-After",
"value": "10"
}
],
"body": {
"error": "Service unavailable"
}
}
}
]
}
Geliştirme Proxy'sini başlatın ve uygulamanızı her zamanki gibi çalıştırın:
devproxy --config-file devproxyrc.json
Mock ile eşleşmeyen istekler gerçek API'ye gider. Henüz var olmayan bir arka uca ihtiyacınız olduğunda, CrudApiPlugin bellek içi verilerle bir CRUD API'sini simüle eder. İsteklerin bir kısmını her seferinde değil de rastgele başarısız kılmak için bkz. Uygulamamı rastgele hatalarla test etme. Geliştirme Proxy'sini yüklemek için bkz. Dev Proxy'yi ayarlama.