Herkese merhaba!
Kullanıcı arayüzü ve API test kapsamı olmak üzere çift amaçlı test otomasyon çerçevelerine her zaman şüpheyle baktım. Genellikle farklı test çalıştırmalarında (veya etkinlik projelerinde) farklı test katmanları çalıştırırsınız çünkü bunların her birinin muhtemelen kendine ait bir özelliği vardır.
Son zamanlarda Playwright'ın API testi açısından neler sunabileceğine bir göz attım ve bunu Cypress deneyimim ile karşılaştırdım, işte sizinle paylaşmam gerekenler:
Cypress bir süre önce API testini mümkün kıldı. Öğrenme portalında bu aracın API testi açısından ne kadar harika olduğunu örneklerle anlatan bir makale bulabilirsiniz.
Testleri çalıştırmak için proje bağımlılıklarınızı yüklemeniz gerekiyor, değil mi? Cypress bir elektron tarayıcıyla birlikte gelir ve yalnızca API testleri çalıştırmak istiyorsanız kurulumu oldukça gereksiz (ve zaman alıcı) olabilir (diyelim ki UI ve API test çalıştırmaları için CI'da ayrı işleriniz var, bu genellikle böyledir).
İyi görünmüyor, değil mi? ☝️
Ayrıca, API testlerini çalıştırdığınızda yine de bir tarayıcı başlatılır.
Cypress ile basit bir API testi şöyle görünecektir:
it('Sign in with valid credentials', () => { cy.request('POST', '/auth', { login: Cypress.env('username'), password: Cypress.env('password'), }).should(response => { expect(response.body.token).to.be.a('string') expect(response.status).to.eq(200) }) })
Oldukça basit ve anlaşılır görünüyor, değil mi? Burada bunun genel bir Cypress sözdizimi olduğunu, yani her çıktıyı değişkene yazmak yerine ( bazı ayarlamalarla mümkün olsa da) zincirleme şeyler olduğunu söylemek önemlidir.
Tıpkı Cypress gibi, Playwright da bir test otomasyon çerçevesidir; yalnızca bir tarayıcı otomasyon aracını veya tüm çerçeveyi (test çalıştırıcısı, iddia kitaplığı, tarayıcı otomasyon aracı, HTTP istemcisi, raporlayıcı vb.) kullanabilirsiniz.
Buradaki fark, Playwright'ın kutudan herhangi bir tarayıcıyla çıkmamasıdır; bunları ayrı bir komutla yüklemeniz gerekir (eğer isterseniz).
Burada büyük bir fark yaratıyor, çünkü yalnızca API testlerini çalıştırma açısından herhangi bir tarayıcıyı veya başka bir masaüstü uygulamasını çalıştırmayacak ve makinenizde çalışma süresinden ve kaynaklardan bir miktar tasarruf sağlamayacak.
Playwright ile basit bir API testi şöyle görünecektir:
import {test, expect} from '@playwright/test' test('Sign in with valid credentials', async ({request}) => { const response = await request.post('/auth', { data: { login: process.env.USERNAME, password: process.env.PASSWORD, }, }) expect(response.status()).toEqual(200) expect(await response.json()).toEqual({ token: expect.any(String), }) })
Nesneleri öne süren Jest benzeri bir sözdizimini vurgulamak istiyorum:
expect(await response.json()).toEqual({ token: expect.any(String), })
Bu sözdizimi, nesnenin tüm yapısını tek bir expect
çağrısıyla doğrulamanıza olanak tanır ☝️
Çalıştırılması için çok fazla şey gerektirmediğinden API testlerinin küçük ve hafif olması gerekir.
Yukarıdaki materyali özetleyelim…
✅ Oyun yazarı , kutudan 13 kat daha hızlı temiz kurulumla kazanır.
ℹ️ Önceden yüklenmiş bağımlılıklara sahip bir görüntü kullanırsanız veya bunları CI depolama alanınızda önbelleğe alırsanız CI'da Cypress kurulum süresini azaltabilirsiniz.
✅ Oyun yazarı, API testlerini çalıştırmak için bir tarayıcıya ihtiyaç duymadığı için kazanır, dolayısıyla doğrudan konuya girer.
ℹ️ Çerçevenin mantığının bir parçası olduğundan, API testlerinde tarayıcıyı "çalıştırmamanın" hiçbir yolu yoktur.
Burada bir kazanan seçemiyorum çünkü ne Cypress ne de Oyun Yazarı için nesnel bir avantaj yok.
İkisinin de ufak farklarla oldukça basit bir sözdizimi var. Burada neyi beğendiklerini seçmenin testçinin kararı olduğunu söyleyebilirim.
Performansı nedeniyle Playwright'ı API test otomasyonu için kullanmanın yeterince güvenli olduğunu kesinlikle söyleyebilirim. Bu çerçeveyle zaten kullanıcı arayüzü testleriniz varsa bu adil bir çözüm olacaktır.
Kullanıcı arayüzü testleri için Cypress kullanan ve API katmanını kapsamak isteyenlere tavsiyem; başka bir şey kullanmaları daha iyi olur ( Jest + Axios , orada bir örnek görebilirsiniz).