Cypress ve JavaScript tabanlı, kapsamlı RESTful API test framework'ü.
🎓 Learning Project: Bu framework, gerçek API endpoint'leri olmadan öğrenme amaçlı hazırlanmıştır. Testler için ücretsiz public dummy API'ler kullanılmaktadır.
- ✅ Cypress ile API testleri
- ✅ Dummy API Entegrasyonu - Gerçek API'ye ihtiyaç yok
- ✅ Modüler yapı - Kolay genişletilebilir
- ✅ Custom Commands - Tekrar kullanılabilir API helper'ları
- ✅ Fixtures - Test data yönetimi
- ✅ Raporlama - Mochawesome + Allure desteği
- ✅ Error Handling - Kapsamlı hata senaryoları
- ✅ CI/CD Ready - GitHub Actions entegrasyonu
Bu framework, öğrenme amaçlı olarak aşağıdaki ücretsiz public API'leri kullanmaktadır:
1. DummyJSON (https://dummyjson.com)
- Kullanım: Products, Authentication, Carts
- Endpoint'ler:
/products,/auth/login,/carts - Özellikler: E-commerce senaryoları için kapsamlı endpoint'ler
2. ReqRes (https://reqres.in)
- Kullanım: Authentication, User Management
- Endpoint'ler:
/api/login,/api/register,/api/users - Özellikler: Auth testleri için ideal
3. JSONPlaceholder (https://jsonplaceholder.typicode.com)
- Kullanım: Posts, Comments (Orders simülasyonu)
- Endpoint'ler:
/posts,/comments,/users - Özellikler: CRUD işlemleri için basit ve anlaşılır
- Node.js (v16+)
- npm veya yarn
- Bağımlılıkları yükleyin:
npm install- Environment dosyasını oluşturun:
cp .env.example .env.envdosyasını oluşturun (opsiyonel):
# Dummy API'ler için .env dosyası gerekli değil
# Ancak kendi API'nizi kullanmak isterseniz:
API_BASE_URL=https://dummyjson.com
# API_KEY ve AUTH_TOKEN dummy API'ler için gerekli değilNot: Dummy API'ler için environment değişkenleri gerekli değildir. Framework varsayılan olarak DummyJSON API'sini kullanır.
# Tüm testleri çalıştır
npm test
# Headed mode (tarayıcı ile)
npm run test:headed
# Chrome'da çalıştır
npm run test:chrome
# Rapor ile çalıştır
npm run test:report
# Allure raporu ile çalıştır
npm run test:allurenpm run cy:openapi-testing-framework/
├── cypress/
│ ├── e2e/ # Test dosyaları
│ │ ├── auth.spec.js # Authentication testleri
│ │ ├── products.spec.js # Products API testleri
│ │ ├── orders.spec.js # Orders API testleri
│ │ └── error-handling.spec.js # Error handling testleri
│ ├── fixtures/ # Test data
│ │ ├── users.json
│ │ ├── products.json
│ │ └── orders.json
│ └── support/ # Custom commands ve helpers
│ ├── e2e.js
│ ├── commands.js
│ └── dummy-api-config.js
├── cypress.config.js # Cypress yapılandırması
├── package.json
├── .env.example
└── README.md
- ✅ Valid login (ReqRes & DummyJSON)
- ✅ Invalid credentials
- ✅ Missing fields validation
- ✅ User registration (ReqRes)
- ✅ Token validation
Kullanılan API'ler:
- ReqRes:
/api/login,/api/register - DummyJSON:
/auth/login
- ✅ List products (GET)
- ✅ Get single product (GET)
- ✅ Create product (POST)
- ✅ Update product (PUT)
- ✅ Delete product (DELETE)
- ✅ Pagination & Search
- ✅ Category filtering
- ✅ List categories
Kullanılan API: DummyJSON /products
- ✅ Create order/post (POST)
- ✅ List orders/posts (GET)
- ✅ Get single order/post (GET)
- ✅ Update order/post (PUT)
- ✅ Delete order/post (DELETE)
- ✅ Get order comments
- ✅ Cart operations (DummyJSON)
Kullanılan API'ler:
- JSONPlaceholder:
/posts,/comments - DummyJSON:
/carts
- ✅ 4xx Client Errors (400, 404)
- ✅ Request validation
- ✅ Edge cases (SQL injection, XSS, etc.)
- ✅ Invalid data formats
- ✅ Pagination errors
HTML raporları otomatik olarak cypress/reports/ dizininde oluşturulur:
npm run test:reportRapor dosyası: cypress/reports/mochawesome.html
npm run test:allureBu komut:
- Testleri çalıştırır
- Allure raporunu oluşturur
- Raporu otomatik açar
Framework, aşağıdaki custom command'ları sağlar:
Genel API isteği yapar:
cy.apiRequest('GET', '/products', {
token: 'auth-token',
qs: { page: 1, limit: 10 }
});Login yapar ve token'ı saklar:
cy.apiLogin('user@example.com', 'password123');API response'unu doğrular:
cy.apiRequest('GET', '/products/1').then((response) => {
cy.assertApiResponse(response, 200, {
product: 'object',
id: 'number'
});
});Hata response'unu doğrular:
cy.apiRequest('POST', '/auth/login', {
body: { email: 'invalid' },
failOnStatusCode: false
}).then((response) => {
cy.assertErrorResponse(response, 400, 'Invalid email');
});Proje, GitHub Actions ile CI/CD'ye hazırdır. .github/workflows/ci.yml dosyasına bakın.
Workflow:
- Testleri çalıştırır
- Raporları oluşturur
- Sonuçları yorumlar
- Test Data: Fixtures kullanarak test data'sını yönetin
- Custom Commands: Tekrar eden işlemler için custom command'lar oluşturun
- Assertions:
assertApiResponseveassertErrorResponsekullanın - Environment Variables: Hassas bilgileri
.envdosyasında saklayın - Modular Tests: Her API endpoint'i için ayrı test dosyası oluşturun
describe('Products API (DummyJSON)', () => {
it('should get all products', () => {
cy.apiRequest('GET', 'https://dummyjson.com/products').then((response) => {
cy.assertApiResponse(response, 200);
expect(response.body.products).to.be.an('array');
expect(response.body.total).to.be.greaterThan(0);
});
});
it('should create a product', () => {
cy.fixture('products').then((products) => {
cy.apiRequest('POST', 'https://dummyjson.com/products/add', {
body: {
title: products.validProduct.title,
price: products.validProduct.price,
category: products.validProduct.category,
}
}).then((response) => {
cy.assertApiResponse(response, 200);
expect(response.body.title).to.eq(products.validProduct.title);
});
});
});
});describe('Auth API (ReqRes)', () => {
it('should login successfully', () => {
cy.apiRequest('POST', 'https://reqres.in/api/login', {
body: {
email: 'eve.holt@reqres.in',
password: 'cityslicka'
}
}).then((response) => {
cy.assertApiResponse(response, 200);
expect(response.body.token).to.be.a('string');
});
});
});Kendi API'nizi kullanmak isterseniz:
.envdosyasını oluşturun:
API_BASE_URL=https://your-api.com
API_KEY=your_api_key
AUTH_TOKEN=your_token- Test dosyalarındaki endpoint'leri güncelleyin
- Fixtures'ları kendi API response formatınıza göre düzenleyin
MIT
🎓 Learning Project: Bu framework öğrenme amaçlıdır ve ücretsiz public dummy API'ler kullanmaktadır. Gerçek bir projede kendi API endpoint'lerinizi kullanabilirsiniz.