Archi's Academy

BLACK FRIDAY

85% Discount for all November

whatsapp
Get in touch

API Automation Testing

Cypress ile API Testi Nasıl Yapılır? 2026 Rehberi

Çoğu geliştirici Cypress'i sadece buton tıklamak ve form doldurmak için kullanır. Oysa Cypress, tüm API katmanını test edebilir; istek gövdelerini, yanıt kodlarını, başlıkları ve ağ trafiğini doğrulayabilirsiniz. 2026'da QA veya backend alanında çalışıyorsanız bu yetkinliği mutlaka öğrenmelisiniz.

Cypress ile API Testi Yapılabilir mi?

Evet, hem de oldukça güçlü bir şekilde.
Cypress, API testleri için iki temel araç sunar:
  • cy.request() — API'nize doğrudan HTTP çağrısı yapar. Tarayıcı arayüzünden bağımsız olarak çalışır; test suit'inizin içindeki bir HTTP istemcisi gibi düşünebilirsiniz.
  • cy.intercept() — frontend'iniz ile backend'iniz arasına girerek uygulamanızın yaptığı her ağ isteğini dinlemenizi, üzerinde doğrulama yapmanızı, değiştirmenizi veya tamamen stub'lamanızı sağlar.
Bu iki araç birlikte iki ana senaryoyu kapsar: API'yi doğrudan test etmek ve frontend'in API ile nasıl etkileşime girdiğini test etmek.

cy.request() ile Doğrudan API Testi

cy.request(), Cypress'in yerleşik HTTP istemcisidir. Sunucunuza gerçek HTTP istekleri gönderir ve yanıt üzerinde tam erişim sağlayarak doğrulama yapmanıza olanak tanır.
// Temel GET isteği
cy.request('GET', '/api/kullanicilar').then((response) => {
  expect(response.status).to.eq(200)
  expect(response.body).to.have.length.greaterThan(0)
})

// Gövde ve başlıklarla POST isteği
cy.request({
  method: 'POST',
  url: '/api/kullanicilar',
  headers: {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer token-degerim'
  },
  body: {
    ad: 'Ayşe Yılmaz',
    email: '[email protected]'
  }
}).then((response) => {
  expect(response.status).to.eq(201)
  expect(response.body).to.have.property('id')
  expect(response.body.email).to.eq('[email protected]')
})

// DELETE ve 204 doğrulaması
cy.request('DELETE', '/api/kullanicilar/1').its('status').should('eq', 204)
cy.request() ile doğrulayabilecekleriniz:
  • response.status — HTTP durum kodu
  • response.body — parse edilmiş yanıt gövdesi (JSON otomatik parse edilir)
  • response.headers — yanıt başlıkları
  • response.duration — isteğin süresi
  • response.requestHeaders — gönderilen istek başlıkları

cy.intercept() ile Ağ İsteklerini Yakalama ve Stub'lama

cy.intercept(), entegrasyon testleri için daha güçlü bir araçtır. Çalışan uygulamanızın gerçek ağ trafiğini yakalar; üzerinde doğrulama yapmanızı, değiştirmenizi veya tamamen kendi yanıtınızla değiştirmenizi sağlar.
// İstek üzerinde dinleme ve doğrulama
cy.intercept('GET', '/api/urunler').as('urunleriGetir')
cy.visit('/urunler')
cy.wait('@urunleriGetir').then(({ request, response }) => {
  expect(response.statusCode).to.eq(200)
  expect(response.body).to.be.an('array')
})

// Fixture verisiyle yanıtı stub'lama
cy.intercept('GET', '/api/kullanicilar', { fixture: 'kullanicilar.json' }).as('kullanicilariGetir')
cy.visit('/panel')
cy.wait('@kullanicilariGetir')
cy.get('[data-testid="kullanici-listesi"]').should('have.length', 3)

// Hata durumunu simüle etme
cy.intercept('POST', '/api/siparisler', {
  statusCode: 500,
  body: { hata: 'Sunucu hatası' }
}).as('basarisizSiparis')
cy.visit('/odeme')
cy.get('[data-testid="siparis-ver"]').click()
cy.wait('@basarisizSiparis')
cy.get('[data-testid="hata-mesaji"]').should('be.visible')

Cypress API Testiyle Neler Test Edebilirsiniz?

SenaryoAraçÖrnek
Yanıt gövdesini doğrulamacy.request() / cy.intercept()JSON alanları, dizi uzunluğu, iç içe nesneler
Durum kodlarını doğrulamaHer ikisi200, 201, 400, 401, 404, 500
İstek başlıklarını doğrulamacy.intercept()Authorization, Content-Type
Yanıt başlıklarını doğrulamaHer ikisiCache-Control, CORS başlıkları
Yanıtı stub'lamacy.intercept()Fixture veya sabit gövdeyle değiştirme
Ağ hatalarını simüle etmecy.intercept()500 hatası, zaman aşımı, boş yanıt
Yanıtı geciktirmecy.intercept()Yüklenme durumlarını test etme
İstek tetiklenene kadar beklemecy.intercept().as() + cy.wait() kullanımı
Auth akışlarını test etmecy.request()Giriş, token yenileme, çıkış
API üzerinden test verisi oluşturmacy.request()UI testlerinden önce kullanıcı/kayıt oluşturma

Cypress ile Diğer API Test Araçlarının Karşılaştırması

CypressPostmanSupertestREST Assured
Temel kullanımE2E + API entegrasyon testleriManuel + otomatik API testleriNode.js API birim testleriJava API testleri
Frontend entegrasyonuEvet — UI ve API birlikte test edilirHayırHayırHayır
CI/CD desteğiEvetEvet (Newman CLI)EvetEvet
Ağ stub'lamaEvet (cy.intercept)HayırHayırHayır
DilJavaScript / TypeScriptPostman scriptingJavaScriptJava
En iyi kullanımFull-stack QA mühendisleriAPI keşfi ve sözleşme testiBackend birim testleriJava backend'leri
Öğrenme eğrisiJS geliştiricileri için düşükDüşükDüşükOrta
Cypress'in en büyük avantajı şudur: API'yi ve UI'ın o API'ye verdiği tepkiyi aynı testte doğrulayabilirsiniz. POST endpoint'i 201 döndürdüğünde UI'ın doğru şekilde güncellenip güncellenmediğini hemen kontrol edebilirsiniz. Bunu tek adımda yapan başka bir araç yoktur.

Gerçek QA Projelerinde Yaygın Kullanım Kalıpları

Kalıp 1: UI testlerinden önce API ile test verisi oluşturma
beforeEach(() => {
  cy.request('POST', '/api/test/veritabani-sifirla')
  cy.request('POST', '/api/kullanicilar', { ad: 'Test Kullanıcı', email: '[email protected]' })
})
Kalıp 2: Giriş formunu doldurmak yerine API üzerinden kimlik doğrulama
// Her testte form doldurmaktan çok daha hızlı
cy.request('POST', '/api/auth/giris', {
  email: '[email protected]',
  sifre: 'sifre123'
}).then(({ body }) => {
  window.localStorage.setItem('token', body.token)
})
cy.visit('/panel')
Kalıp 3: Yüklenme ve hata durumlarını test etmek için intercept kullanma
cy.intercept('GET', '/api/veri', (req) => {
  req.reply({ delay: 2000, body: [] })
})
cy.visit('/sayfa')
cy.get('[data-testid="yukleniyor-iskeleti"]').should('be.visible')

Cypress API Testi ve QA Kariyer Yolu

API testleri, yalnızca UI test edebilen bir QA mühendisini full-stack test edebilenden ayıran ilk becerilerden biridir. Hem ağ davranışını hem de UI yanıtını kapsayan Cypress testleri yazabilmek, 2026 yılındaki QA iş ilanlarında öne çıkan bir yetkinliktir.
Cypress'in resmi belgelerinde tüm ağ isteği komutları için çalıştırılabilir örnekler bulabilirsiniz: example.cypress.io/commands/network-requests.
Archi's Academy'de geliştirilen Backend Development track'i; test yazma pratiğini izole alıştırmalar olarak değil, gerçek proje senaryoları içinde öğretir. API tasarlarsınız, deploy edersiniz ve aynı iş akışında test edersiniz; tıpkı gerçek bir ekipteki junior geliştirici gibi.
cy.intercept()'in var olduğunu bilmekle onu ne zaman kullanacağını, neyi stub'layıp neyi gerçek veriyle test edeceğini ve API testlerini uçtan uca bir akışa nasıl entegre edeceğini bilmek arasındaki fark, gerçek bir QA rolünde önemli olan şeydir.

Ready to turn insights into real skills?

Start building with guided, project-based training and gain hands-on experience from day one.


Gerçek Backend ve QA Becerilerini Geliştirmeye Başla


Sıkça Sorulan Sorular

Cypress ile REST API testi yapılabilir mi? Evet. cy.request() komutu herhangi bir URL'e gerçek HTTP isteği gönderir; GET, POST, PUT, PATCH, DELETE desteklenir. Yanıt gövdesi, durum kodu, başlıklar ve süre üzerinde doğrulama yapabilirsiniz. Tarayıcı açık olması gerekmez; bu da Cypress'i mevcut test suit'inizde kullanabileceğiniz bir API test istemcisine dönüştürür.
Cypress'te cy.request() ile cy.intercept() arasındaki fark nedir? cy.request() testinizden doğrudan bir HTTP çağrısı yapar; bir script'ten API çağırmak gibi düşünebilirsiniz. cy.intercept() ise çalışan frontend uygulamanız ile ağ arasına girerek UI kodunuzun yaptığı istekleri dinlemenizi, doğrulamanızı veya stub'lamanızı sağlar. API'nin kendisini test etmek için cy.request()'i, frontend'in API yanıtlarını nasıl işlediğini test etmek için cy.intercept()'i kullanın.
Cypress'te API yanıtları stub'lanabilir mi? Evet. cy.intercept() ile herhangi bir API yanıtını fixture verisi, sabit bir gövde, belirli bir durum kodu veya gecikmeli bir yanıtla değiştirebilirsiniz. Bu özellik; hata durumlarını (500 yanıtı), yüklenme durumlarını (gecikmeli yanıt) ve uç durumları (boş dizi, null alanlar) backend'in bu koşulları yeniden oluşturmasına gerek kalmadan test etmek için oldukça kullanışlıdır.
Cypress'te bir API çağrısını nasıl beklerim? cy.intercept() ile isteği .as('aliasAdi') kullanarak adlandırın, ardından cy.wait('@aliasAdi') ile testin o istek tamamlanana kadar beklemesini sağlayın. Bu yöntem, keyfi cy.wait(2000) zaman aşımlarından çok daha güvenilirdir ve doğrulama için tam istek ile yanıt nesnesine erişim sağlar.
Cypress, Postman'ın yerini alabilir mi? Otomatik, entegre testler için evet; Cypress, bir CI pipeline'ında Postman'ın yaptıklarını karşılayabilir. Postman, manuel API keşfi, sözleşme belgesi oluşturma ve frontend olmadan API'leri izole test etmek için hâlâ daha iyi bir seçenektir. API ve UI'ın aynı test çalışmasında birlikte nasıl çalıştığını test etmeniz gerektiğinde Cypress daha üstündür.
Archi's Academy'de Cypress öğrenebilir miyim? Archi's Academy'nin Backend Development track'i, gerçek proje simülasyon modeli kapsamında test yazımını içerir. API tasarlar, deploy eder ve testlerinizi yaygın kullanılan araçlarla yazarsınız; yalnızca lokal geliştirmede değil, gerçek bir ekipte junior geliştirici olarak çalışırken kullanacağınız iş akışının aynısıyla. Ücretsiz 1 haftalık deneme ile başlayın.

Yaparak Öğren. Yaparak Kanıtla. İşe Gir.

Cypress, API testi veya hangi track'in hedeflerinize uygun olduğu hakkında sorularınız mı var? Archi's Academy ekibi her seviyeden geliştiriciyle çalışmaktadır. İstediğiniz zaman bize ulaşın.
dirDirector of Engineering: Archi's Academy

Ahamad Cholassery

Wednesday, May 13, 2026