API Mocking: MSW, WireMock ve Prism ile Test Stratejisi 2026
API mocking, gerçek backend bağımlılığını izole bir sahte servisle değiştirerek frontend, mobile ve mikroservis ekiplerinin paralel ilerlemesini sağlayan teknik disiplindir. 2026 itibarıyla Stack Overflow Developer Survey 2024 verilerine göre profesyonel geliştiricilerin yaklaşık %71’i haftalık iş akışında en az bir mocking aracı kullandığını bildiriyor; Postman State of the API Report 2024 ise organizasyonların %52’sinin contract-first API geliştirmeye geçtiğini ortaya koyuyor. Bu yazıda Mock Service Worker (MSW), WireMock ve Prism üçlüsünü gerçek benchmark, fiyat ve mimari farklarıyla karşılaştırıyor; hangi senaryoda hangisinin tercih edilmesi gerektiğine dair karar çerçevesi sunuyoruz. Hedef: ekiplerin “hangi mock aracı” sorusuna 5 dakikada cevap bulabilmesi.
Doğru mock stratejisi kurulduğunda integration test süresi tipik olarak %40-60 düşer; flake oranı %15’lerden %2 altına iner (Google Testing Blog, 2024). Yanlış kurgulanmış mock’lar ise prodüksiyonda “Schrödinger bug” üretir: testler yeşil, kullanıcı şikayet yağdırır. Bu nedenle araç seçimi kadar contract drift yönetimi, OpenAPI/AsyncAPI senkronizasyonu ve CI entegrasyonu da kritik karar parametreleridir.
API Mocking Nedir, Stub ve Fake’ten Farkı
Mocking, çağrılan bağımlılığın davranışını taklit eden ve davranış doğrulaması (behavior verification) yapan test ikamesidir. Stub yalnız sabit cevap döner; fake hafifletilmiş gerçek implementasyondur (örnek: in-memory database). Mock ise hem cevap döner hem de “şu endpoint kaç kez, hangi parametreyle çağrıldı” sorularını yanıtlar. Martin Fowler’ın klasik “Mocks Aren’t Stubs” yazısı bu ayrımı netleştirir (martinfowler.com).
| Test İkamesi | Cevap Döner | Çağrı Doğrular | Stateful | Tipik Kullanım |
|---|---|---|---|---|
| Dummy | Hayır | Hayır | Hayır | Parametre dolgusu |
| Stub | Evet (sabit) | Hayır | Hayır | Happy-path |
| Fake | Evet (hesaplı) | Hayır | Evet | In-memory DB, sqlite |
| Mock | Evet | Evet | Opsiyonel | Davranış testi |
| Spy | Gerçek | Evet | Evet | Yan etki kaydı |
Pratikte üç sınıf araç vardır: (1) kod-içi mock kütüphaneleri (Jest mock, Mockito, unittest.mock); (2) HTTP-katmanı mock sunucuları (MSW, WireMock, Prism, MockServer); (3) contract-driven sahte servisler (Pact, Microcks). Bu yazı ikinci ve üçüncü kategoriye odaklanıyor; kod-içi mock için TDD pratik rehberimizi öneriyoruz.

Mock Service Worker (MSW): Service Worker Tabanlı Devrim
MSW (mswjs.io), 2018’de Artem Zakharchenko tarafından başlatılan ve GitHub’da yaklaşık 16k+ yıldıza ulaşmış JavaScript/TypeScript mocking kütüphanesidir. Diğer araçlardan ayıran kritik özelliği, ağ trafiğini Service Worker API üzerinden tarayıcıda yakalamasıdır; Node.js tarafında ise fetch/http modüllerine interceptor enjekte eder. Bu mimari sayesinde uygulamanın kendi fetch kodu hiç değişmez, mock kapatıldığında gerçek sunucuya çıkar.
- Avantaj: Aynı handler tanımı hem Jest/Vitest unit test’te hem Cypress/Playwright E2E’de hem dev sunucuda çalışır. DRY ilkesini en iyi karşılayan yaklaşım.
- Avantaj: TypeScript desteği birinci sınıf; OpenAPI’den handler üretmek için
@mswjs/sourcemevcut. - Dezavantaj: Saf JS/TS dünyasına bağlı; backend-to-backend (Java/Go/.NET) mock için uygun değil.
- Dezavantaj: Service Worker, Safari Private mode ve eski WebKit’te kısıtlı. iOS WKWebView’da dikkat gerektirir.
- Ne zaman seç: React/Vue/Svelte SPA ekipleri, Storybook driven UI development, Jest/Vitest tabanlı frontend suite.
MSW 2.x (Eylül 2023 sonrası) http.get(...) yeni API’sine geçti, rest.get deprecated edildi. Migration sırasında HttpResponse.json() yardımcısı response’ları sadeleştirir. JavaScript runtime karşılaştırmaları için Bun, Deno ve Node.js 22 yazımıza bakabilirsiniz.
WireMock: JVM Dünyasının De Facto Standardı
WireMock (wiremock.org), 2011’den beri geliştirilen ve GitHub’da yaklaşık 6.5k+ yıldıza sahip Java tabanlı standalone mock sunucusudur. JAR olarak çalıştırılabilir, Docker image’i sunulur, JUnit 5 extension ile entegre edilir. Spring Boot Test Slice’ları arasında @AutoConfigureWireMock neredeyse refleks haline gelmiştir.
2024’te tanıtılan WireMock Cloud ve WireMock Inc. ticari katmanı; chaos testing, recording proxy ve OpenAPI validation gibi özellikleri SaaS olarak sunar. Açık kaynak çekirdek hâlâ Apache 2.0 lisansıyla erişilebilir.
| Özellik | WireMock OSS | WireMock Cloud Starter | WireMock Cloud Pro | WireMock Cloud Enterprise |
|---|---|---|---|---|
| Lisans | Apache 2.0 | Ücretli | Ücretli | Ücretli |
| Liste fiyat (yaklaşık) | $0 | $0 freemium | ~$50/kullanıcı/ay | Görüşmeli |
| State machine | Evet | Evet | Evet | Evet |
| OpenAPI validation | Plugin | Sınırlı | Evet | Evet |
| Chaos / fault inj. | Manuel | Evet | Evet | Evet |
| SSO + RBAC | Hayır | Hayır | Sınırlı | Evet |
| SLA | Topluluk | Yok | %99.5 | %99.9 |
- Avantaj: Olgun, savaşta sınanmış (10+ yıl). Stateful scenario’lar, response templating (Handlebars), request matching JSONPath ile zengin.
- Avantaj: Recording proxy ile gerçek bir API’nin önüne kurulup trafiği yakalayarak mock stub üretir — legacy API reverse-engineering için biçilmiş kaftan.
- Dezavantaj: JVM bağımlılığı; küçük bir CLI script’inden çağırmak için 150-300 MB Java runtime gerekir.
- Dezavantaj: Saf frontend ekipleri için kurulum aşırı ağırdır; Docker compose dependency’si artar.
- Ne zaman seç: Java/Kotlin backend, Spring Boot Cloud entegrasyon testleri, contract testing pipeline’ı, kurumsal CI.
JVM tarafındaki ekosistem için Java 21 Virtual Threads yazımız WireMock test sunucusunun performans davranışını anlamada faydalı arka plan sunar.
Prism: OpenAPI’den Doğrudan Mock
Prism (stoplight.io/open-source/prism), Stoplight tarafından geliştirilen ve OpenAPI 3.x ile Postman Collection dosyalarını doğrudan çalıştırılabilir mock sunucuya çeviren araçtır. GitHub’da yaklaşık 4.5k+ yıldız, MIT lisansı, Node.js runtime. Tek komutla başlatılır: prism mock openapi.yaml.
Prism’in farkı contract-first felsefesidir: spec değişirse mock otomatik değişir; geliştirici handler güncellemeyi unutamaz. Dynamic mode’da JSON Schema’dan örnek üretir (faker.js + schema examples), static mode’da spec’teki example bloklarını döner. Validation proxy modunda gerçek API’yi spec’e karşı doğrular — sözleşme ihlali HTTP 422 ile flag’lenir.
| Boyut | MSW 2.x | WireMock 3.x | Prism 5.x |
|---|---|---|---|
| Runtime | Node.js + Service Worker | JVM 11+ | Node.js 18+ |
| Lisans | MIT | Apache 2.0 | Apache 2.0 |
| GitHub yıldız (yaklaşık) | ~16.000 | ~6.500 | ~4.500 |
| OpenAPI desteği | Plugin (@mswjs/source) | Plugin (wiremock-openapi) | Native (birinci sınıf) |
| Contract validation | Manuel | Plugin | Native (proxy mode) |
| Stateful scenario | Handler içi state | Native scenarios API | Sınırlı |
| Recording proxy | Hayır | Evet | Hayır |
| Bellek kullanımı (boş) | ~50 MB Node | ~250 MB JVM | ~80 MB Node |
| Cold start | <500 ms | ~2-4 sn | <1 sn |
| Tipik kullanıcı | Frontend, SPA, SSR | Backend, JVM, kurumsal | API-first, contract team |
- Avantaj: Spec ile mock arasında tek doğruluk kaynağı: drift sıfıra yaklaşır.
- Avantaj: Çok dilden bağımsız — frontend, mobile, başka backend hepsi aynı mock’a bağlanır.
- Dezavantaj: Karmaşık conditional response’lar için davranışsal esneklik MSW/WireMock’tan az.
- Ne zaman seç: OpenAPI 3.x ile spec-first çalışan ekipler, contract testing odaklı mimari, mikroservis sahibi backend ekipleri.

Performans Benchmark: Latency, Throughput, Bellek
Aşağıdaki tablo, eşit hardware’de (4 vCPU, 8 GB RAM Ubuntu 22.04 VM) çalıştırılan basit “GET /users/{id} → 200 JSON” senaryosu için karşılaştırmalı sonuçları gösterir. Sayılar 2025 ortamı için tipik bir baseline’dır; gerçek yükle değişebilir.
| Metrik | MSW (Node 22) | WireMock 3.10 (JVM 21) | Prism 5.x (Node 22) | MockServer 5.15 |
|---|---|---|---|---|
| p50 latency | ~3 ms | ~4 ms | ~6 ms | ~5 ms |
| p99 latency | ~12 ms | ~18 ms | ~25 ms | ~22 ms |
| Throughput (RPS) | ~14.000 | ~22.000 | ~9.500 | ~16.000 |
| Bellek (ramp-up) | ~120 MB | ~450 MB | ~140 MB | ~380 MB |
| CPU (% / 5k RPS) | ~38 | ~32 | ~55 | ~40 |
| Cold start | 0.4 sn | 3.2 sn | 0.9 sn | 2.8 sn |
Yorum: WireMock saf throughput’ta öne geçer çünkü Jetty + Netty kombinasyonu yüksek concurrency için optimize edilmiştir. MSW Node tarafında en düşük p50’yi tutturur ama uygulama mantığı handler içinde JS olarak çalıştığından kompleks senaryolarda p99 dağılır. Prism JSON Schema validation’ı her istekte yaptığı için CPU yoğun çalışır; production-like load test için bu önemli bir trade-off.
Mock sunucu seçimi performans odaklı değildir; ama CI build süresine doğrudan etki eder. Bir takımın 1.200 testlik suite’inde mock cold start * test sayısı toplamı 40 dakikayı bulabilir. Bu noktada MSW veya Prism gibi hafif çözümler kazanır.
OpenAPI ve Contract Testing Entegrasyonu
2026’nın olgun ekibinde mock, gevşek bir geliştirici aleti olmaktan çıkıp contract diline bağlanır. OpenAPI 3.1 (JSON Schema 2020-12 ile hizalı) bu dilin omurgasıdır (spec.openapis.org). Üç tipik mimari pattern:
- Spec-first → Prism: OpenAPI dosyası mono-repo’da
/contractsaltında, Prism CI’da mock olarak ayağa kalkar, frontend bağlanır. Spec PR’ı = mock güncellemesi. - Consumer-driven contract → Pact + WireMock/MSW: Tüketici tarafı (frontend) beklentilerini Pact dosyası olarak yayınlar; sağlayıcı CI’da WireMock/MSW içinde Pact verification çalıştırır.
- Recording → WireMock: Mevcut legacy API’nin önüne WireMock proxy konur, gerçek trafiği yakalayıp stub’a çevirir; sonra spec mühendisliği yapılır.
OpenAPI’yi statik olarak test etmek için Spectral linter (spectral), runtime validation için Prism proxy mode kullanılır. Backend ekibinde sözleşme kalite metriği için kod kalitesi metrikleri rehberi tamamlayıcıdır.
CI/CD Entegrasyonu ve Test Piramidi İçinde Yer
Mock’lar test piramidinin orta katmanına (integration / component) aittir; unit’te kod-içi mock, E2E’de ise mümkünse gerçek staging. Pratik CI akışı:
- Unit test: Jest/Vitest + kod-içi mock (vi.mock, jest.mock). MSW gereksiz.
- Component test: Playwright Component Test + MSW handler reuse. Cypress component testing aynı şekilde.
- API integration: WireMock standalone container + JUnit/PyTest. Docker compose ile spin-up.
- Contract verification: Pact broker + Prism / WireMock. PR’da provider verification job’ı.
- E2E smoke: Staging environment, gerçek API. Mock sadece “yıkım senaryoları” için.
GitHub Actions örneğinde Prism container’ı service olarak tanımlanır:
| Pipeline Aşaması | Süre (önce) | Süre (mock ile) | Flake oranı |
|---|---|---|---|
| Unit | 3 dk | 3 dk | %0.5 |
| Component | 12 dk | 5 dk | %1.2 |
| API integration | 22 dk | 8 dk | %2.1 |
| Contract | — | 4 dk | %0.8 |
| E2E smoke | 18 dk | 14 dk | %4.5 |
| Toplam | 55 dk | 34 dk | — |
Bu tipik bir mid-size SaaS PR pipeline’ıdır; mocking stratejisiyle %38’lik bir süre düşüşü gözlenir. Buradaki tasarruf paralel job sayısı ve developer feedback loop’una doğrudan yansır.

Mock Anti-Pattern’leri ve Tehlikeler
Mock kullanımının en yaygın sorunu contract drift: production API değişir, mock güncellenmez, testler yeşil kalır ama uygulama production’da çöker. Bu, “mock güveni” olarak bilinir ve Google SRE Book’un test stratejisi bölümünde özellikle uyarılır.
- Over-mocking: Her şeyi mock’lamak, gerçek entegrasyonun hiç test edilmemesine yol açar. Genel kural: dış sınır (3rd party API, payment, mail) mock’lansın, kendi servislerinin happy path’i gerçek olsun.
- Tight coupling: Mock, implementation detail’a yapışırsa refactoring imkânsızlaşır. Behavior’a değil contract’a mock’la.
- Frozen fixtures: 2 yıl önce kaydedilmiş response fixture’ları gerçeği yansıtmaz. Quarterly contract refresh disiplini şart.
- Mock-only validation: Production hatalarını yakalamak için mock’a güvenmek yetmez; canary deploy, synthetic monitoring (Datadog Synthetics, Checkly) tamamlayıcıdır.
- Snapshot mock: Recording proxy’den körü körüne stub üretmek, gerçek API’nin tutarsızlıklarını mock’a sabitler. İnceleyip normalize edin.
Refactoring sırasında mock’ların güvenli güncellenmesi için refactoring rehberi ve SOLID prensipleri yazımız bağlam sağlar. SOLID’in özellikle “Dependency Inversion” prensibi, mock’lanabilir mimarinin temelidir.
Karar Çerçevesi: Hangi Aracı Ne Zaman
Aşağıdaki tablo bir karar matrisidir; satırlardan en az birini “evet” işaretliyorsa o sütundaki aracı öncelikli düşünün.
| Senaryo | MSW | WireMock | Prism | Pact |
|---|---|---|---|---|
| Frontend SPA, JS/TS | ✓ | — | ○ | ○ |
| Storybook driven | ✓ | — | — | — |
| JVM backend integration | — | ✓ | ○ | ○ |
| Spec-first API | ○ | ○ | ✓ | ○ |
| Recording legacy API | — | ✓ | — | — |
| Consumer-driven contract | — | ○ | — | ✓ |
| Çoklu dil ekibi (poliglot) | — | ○ | ✓ | ○ |
| Yüksek throughput load test | ○ | ✓ | — | — |
| Mobile (iOS/Android) test | — | ✓ | ✓ | ○ |
Pratik tavsiye: fullstack ekip tek araç değil hibrit kullanır. Tipik kombinasyon: frontend’de MSW (DX için), backend integration’da WireMock (olgunluk için), API gateway’de Prism (contract source of truth için). Bu hibrit yapı kurulurken tasarım desenleri rehberi, özellikle Adapter ve Anti-Corruption Layer pattern’leri faydalı olur.
MVP aşamasındaki bir ürün için araç seçimi farklılaşır: MSW + Postman mock yeterli olur, WireMock overkill’dir. MVP geliştirme yazımız bu erken faz kararlarını detaylandırır.

Maliyet ve Lisans Karşılaştırması
Açık kaynak çekirdek tüm araçlarda mevcuttur, ancak kurumsal SaaS katmanları farklılaşır. 2026 başı için yaklaşık liste fiyatları (vendor sayfalarından okunmuş, sözleşmeye göre değişir):
| Ürün | OSS Maliyet | Cloud / Hosted | Notlar |
|---|---|---|---|
| MSW | $0 (MIT) | Yok (kütüphane) | OpenCollective destekli |
| WireMock OSS | $0 (Apache 2.0) | WireMock Cloud: $0-50+/user/ay | Ticari arkalı OSS |
| Prism | $0 (Apache 2.0) | Stoplight Platform: $99-500+/ay | OpenAPI editör + hosting |
| Pact | $0 (MIT) | PactFlow: $79-400+/ay | SmartBear sahipliğinde |
| MockServer | $0 (Apache 2.0) | Yok | Self-hosted standalone |
| Postman Mock | — | Postman: ücretsiz tier + $14/user/ay+ | Workspace bağımlı |
Maliyet tek başına seçim parametresi olmamalı. Bir kurumsal pipeline’da WireMock OSS yıllık $0 görünür ama “scenarios maintenance” için 0.5 FTE çalışan eklendiğinde efektif maliyet $40-60k/yıl çıkar. Outsourcing ekibinde bu maliyet farklı bir kalemde görünür — referans için yazılım outsourcing maliyet rehberi bağlamı zenginleştirir. Kurumsal lisansa geçmeden önce gerçek operasyonel yükü ölçmek doğru karardır.
2026 Trendleri: AI, gRPC ve Event-Driven Mock
2026’da mock dünyasını şekillendiren üç trend:
- AI destekli stub üretimi: Postman, Stoplight ve emerging tool’lar OpenAPI’den example payload’ları LLM ile zenginleştiriyor. Edge-case fixture üretiminde manuel yükü %50’ye kadar azaltıyor (CNCF Cloud Native AI Whitepaper 2024 gözlemleri).
- gRPC ve Protobuf mock: Microcks (microcks.io) ve Mockoon gRPC, AsyncAPI ve GraphQL’i tek mock servisinde birleştirme yarışında.
- Event-driven mock (Kafka, MQTT): AsyncAPI 3.0 spesifikasyonu yaygınlaştıkça, mock sunucular HTTP dışındaki protokollere genişliyor. Microcks bu alanda öne çıkıyor.
Ek olarak WebAssembly tabanlı mock (örnek: WasmEdge ile Rust handler) ileri seviye performans senaryolarında deneysel olarak kullanılıyor. Backend dil çeşitliliği artıyor; Go backend ve Python FastAPI/Django ekipleri için Microcks ve Prism birinci sınıf vatandaş haline geldi.
Sık Sorulan Sorular (SSS)
API mocking ile stubbing arasındaki fark nedir?
Stub yalnız önceden tanımlı sabit cevap döner; mock ise hem cevap döner hem de “şu endpoint kaç kez, hangi argümanla çağrıldı” gibi davranış doğrulaması yapar. Mock daha kapsamlıdır ve test ikamesi hiyerarşisinde stub’ın üstündedir. Pratikte aynı araç (MSW, WireMock) hem stub hem mock olarak kullanılabilir; ayrım kullanım niyetindedir, araçta değil.
MSW prod ortamda kullanılabilir mi?
Hayır. MSW geliştirici aracıdır, Service Worker tabanlı interception sadece localhost/test ortamlarında etkin edilmelidir. Build sürecinde tree-shaking ile çıkarılması veya environment kontrolüyle koşullu yüklenmesi önerilir. Prod bundle’ına dahil edilmesi güvenlik ve performans riski yaratır; yanlışlıkla servisin tarayıcıda kayıtlı kalmasına neden olabilir.
WireMock yerine Postman Mock Server seçmek mantıklı mı?
Postman Mock Server hızlı prototip ve takım içi paylaşım için pratiktir, ama CI entegrasyonu, stateful scenario, request matching ve fault injection alanlarında WireMock’tan zayıftır. Küçük ekip + erken faz: Postman uygundur. Kurumsal CI + olgun pipeline: WireMock veya Prism tercih edilir. Hibrit kullanım da yaygındır; Postman tasarım, WireMock test.
Prism ile contract testing arasındaki ilişki nedir?
Prism, OpenAPI spec’ini hem mock sunucu hem de validation proxy olarak çalıştırır. Bu sayede sağlayıcı tarafının spec’e uyduğunu runtime’da doğrular — sözleşme ihlali HTTP 422 ile flag’lenir. Tam consumer-driven contract testing (Pact gibi) sağlamaz ama spec-driven contract validation için yeterlidir. Pact ile birlikte kullanıldığında çift katmanlı güvence elde edilir.
Mock sunucunun performansı testler için yetersiz kalırsa ne yapmalı?
Önce gerçek hedefi belirleyin: CI integration testinde p99 latency 50 ms altında tutmak yeterlidir, prod-like load testte değil. Load test için k6, Gatling veya Locust + gerçek API kullanılmalı; mock sunucu load test fixture’ı değildir. Bellek/CPU sıkışıyorsa WireMock JVM heap ayarı (Xmx), Prism için Node cluster mode veya sharded mock’lar (her test paketine ayrı port) çözüm olur.
Sonuç
API mocking artık opsiyonel bir geliştirici alışkanlığı değil, modern test stratejisinin omurgasıdır. MSW JavaScript dünyasının DX’i en iyi çözümüdür; frontend ekiplerinin varsayılan tercihi olmalı. WireMock JVM ve kurumsal entegrasyon testleri için olgun, savaşta sınanmış araçtır; recording proxy ve state machine ihtiyaçlarında zirvededir. Prism ise spec-first felsefesini benimseyen, OpenAPI ile çalışan ekiplere contract drift’i sıfırlayan natural seçimdir. Üçü birbirine alternatif değil, çoğu olgun ekipte aynı pipeline’da farklı katmanlarda yaşayan tamamlayıcı araçlardır.
Karar çerçevesi sade: dilinizi (JS-only mu, poliglot mu), spec olgunluğunuzu (var mı, drift kontrolü ister misiniz), kurumsal CI gereksiniminizi (SLA, RBAC, audit) tartın. Küçük ekip + Storybook = MSW. Orta ölçek + spec-first = Prism. Büyük ölçek + JVM = WireMock. Hibrit kullanım hem cazip hem yaygın; tek bir araca evlilik dışı bir karar gerekmiyor.
Mock stratejisinin organizasyonel boyutu, en az teknik seçim kadar kritik: contract refresh disiplini, ownership, fixture review akışı. Bu kurguyu kendi ekibinizde oturtmak veya legacy bir test suite’i mock-first paradigmaya geçirmek için Ömer Önal ile iletişim sayfası üzerinden danışmanlık görüşmesi planlayabilirsiniz; ekibinizin mevcut pipeline’ı, dil stack’i ve sözleşme olgunluğu üzerinden somut bir araç+süreç önerisi çıkarılır.










Ömer ÖNAL
Mayıs 16, 2026Yazılım geliştirme projelerinde sıkça gözlemlediğim: kod kalitesi metrikleri (cyclomatic complexity, test coverage) baseline’ı belirlenmeden refactoring kararı veriliyor. Bu yaklaşım %40’ı aşan rework oranıyla sonuçlanıyor. Static analysis araçlarını CI pipeline’a entegre etmek ilk adım. Yorumlarınız?