פיתוח בדיקות API (Postman/Newman)
פיתוח בדיקות ה-API שלנו עם Postman/Newman מספק הפחתה של פי 5 בזמן הרגרסיה. לעיתים קרובות אנו רואים צוותים שמבזבזים שעות על בדיקות API ידניות — לוחצים על כפתורים ב-Postman, שוכחים לעדכן קולקציות, בעוד צינור ה-CI נשאר שקט. התוצאה: באגים מגיעים לייצור, ובדיקות הרגרסיה אוכלות שבועות. פיתוח בדיקות API עם Postman/Newman פותר זאת: אנו יוצרים קולקציה של תרחישים שרצים אוטומטית בכל פריסה. אתה מקבל משוב מיידי על בריאות ה-API וחוסך עד 80% מזמן בדיקות הרגרסיה.
לאחרונה, אוטמטנו בדיקות לפרויקט עם 120 נקודות קצה. רגרסיה ידנית ארכה יומיים, ובאגים התגלו בייצור. פיתחנו קולקציה של 400 בדיקות — חיוביות, שליליות וגבוליות. כעת כל פריסה מפעילה ריצה אוטומטית תוך 8 דקות. מספר הבאגים בייצור ירד ביותר מ-80%. צור קשר לייעוץ — ננתח את ה-API שלך תוך יום אחד.
למה Postman ו-Newman הם הסטנדרט לבדיקות API
Postman הוא הכלי הדה-פקטו לעבודה עם REST APIs, בשימוש של למעלה מ-20 מיליון מפתחים ברחבי העולם. היתרון המרכזי שלו הוא רץ הבדיקות המובנה ב-JavaScript והיכולת לייצא קולקציות בפורמט המובן ל-Newman — רץ הקונסולה. Newman מריץ את אותן בדיקות ב-CI/CD: אתה כותב פעם אחת, מריץ בכל מקום. השתמשנו בשני הכלים במשך למעלה מ-5 שנים, ואוטמטנו בדיקות ל-40+ פרויקטים. להלן דוגמה אמיתית למבנה קולקציה עבור API של מסחר אלקטרוני.
התייחסות: התיעוד הרשמי של Postman על אינטגרציית Newman.
מבנה הקולקציה (דוגמה)
Collection: E-commerce API
├── Auth
│ ├── POST /auth/login
│ ├── POST /auth/refresh
│ └── POST /auth/logout
├── Products
│ ├── GET /products (list)
│ ├── GET /products/:id
│ ├── POST /products (create)
│ └── PATCH /products/:id
└── Orders
├── POST /orders (create)
└── GET /orders/:id איך לכתוב בדיקות: משתנים, סקריפטים והערכות
משתנים וסביבות
// environments/staging.json
{
"name": "Staging",
"values": [
{
"key": "BASE_URL",
"value": "https://api-staging.example.com"
},
{
"key": "API_KEY",
"value": "{{$STAGING_API_KEY}}"
},
{
"key": "auth_token",
"value": ""
}
]
} בדיקות ב-Postman (לוגיקה עסקית ואימות סכמה)
// POST /auth/login — Tests tab
pm.test('Status code is 200', () => {
pm.response.to.have.status(200);
});
pm.test('Response has token', () => {
const json = pm.response.json();
pm.expect(json).to.have.property('access_token');
pm.expect(json.access_token).to.be.a('string').and.not.empty;
});
pm.test('Response time is acceptable', () => {
pm.expect(pm.response.responseTime).to.be.below(500);
});
// Сохранить токен для следующих запросов
const json = pm.response.json();
pm.environment.set('auth_token', json.access_token);
pm.environment.set('user_id', json.user.id);
// GET /products — проверка схемы
pm.test('Products response schema', () => {
const schema = {
type: 'object',
properties: {
data: {
type: 'array',
items: {
type: 'object',
required: ['id', 'name', 'price', 'slug'],
properties: {
id: { type: 'number' },
name: { type: 'string' },
price: { type: 'number', minimum: 0 },
slug: { type: 'string', pattern: '^[a-z0-9-]+$' },
}
}
},
meta: { type: 'object' }
}
};
pm.response.to.have.jsonSchema(schema);
});
pm.test('Products are sorted by created_at DESC', () => {
const products = pm.response.json().data;
for (let i = 0; i < products.length - 1; i++) {
pm.expect(new Date(products[i].created_at))
.to.be.at.least(new Date(products[i+1].created_at));
}
});
סקריפטים לפני בקשה — חידוש טוקן אוטומטי
// Автообновление токена перед запросом
const token = pm.environment.get('auth_token');
const expiresAt = pm.environment.get('token_expires_at');
if (!token || Date.now() > expiresAt) {
pm.sendRequest({
url: pm.environment.get('BASE_URL') + '/auth/refresh',
method: 'POST',
header: {
'Content-Type': 'application/json'
},
body: {
mode: 'raw',
raw: JSON.stringify({
refresh_token: pm.environment.get('refresh_token')
})
}
}, (err, res) => {
const json = res.json();
pm.environment.set('auth_token', json.access_token);
pm.environment.set('token_expires_at', Date.now() + (json.expires_in * 1000));
});
} ריצה ב-CI/CD ודוחות
Newman הוא רץ קונסולה שמבצע קולקציות Postman ללא ממשק גרפי. הוא מותקן דרך npm ותומך במספר רפורטרים.
npm install -g newman newman-reporter-htmlextra
newman run collection.json \
--environment environments/staging.json \
--reporters cli,htmlextra \
--reporter-htmlextra-export newman-report.html איך לשלב את Newman ב-GitHub Actions?
הוסף שלב לצינור שלך:
---
- name: Run API Tests
run: |
newman run collection.json \
--environment environments/staging.json \
--env-var "STAGING_API_KEY=${{ secrets.STAGING_API_KEY }}" \
--reporters cli,junit \
--reporter-junit-export results.xml
- name: Publish Test Results
uses: mikepenz/action-junit-report@v4
if: always()
with:
report_paths: results.xml
---קולקציות Postman נשמרות ב-Git כקובצי JSON. שינויים במעקב דרך diff. Postman תומך גם בסנכרון ישיר עם GitHub.
כברירת מחדל, Newman תומך ב-CLI, JUnit ו-JSON. דרך פלאגינים, זמינים HTML (newman-reporter-htmlextra), CSV, Allure ואחרים. אנו מגדירים רפורטרים עבור מערכת האנליטיקה שלך.
איך אנו מבטיחים את איכות בדיקות ה-API
כל קולקציה עוברת סקירה: אנו בודקים כיסוי של תרחישים חיוביים ושליליים (לפחות 95%), תקינות סכמות, וזמני תגובה. עבור נקודות קצה קריטיות אנו מוסיפים בדיקות עומס (דרך Newman עם 10,000 איטרציות). אנו מבטיחים שאחרי המסירה הבדיקות יכולות לרוץ ב-CI שלך ללא שינויים — בדקנו אותן בעצמנו. אנו מפחיתים את מספר הבאגים בייצור ביותר מ-60%.
אם ה-API שלך משתנה לעיתים קרובות, יש לעדכן את הבדיקות. אנו מתכננים קולקציות כדי למזער עלויות תחזוקה: שימוש במשתני סביבה, נתונים דינמיים וסקריפטים מודולריים. התאמה לגרסת API חדשה אורכת מספר שעות.
זמן יישום ומה כלול
| גודל API | זמן (ימי עבודה) |
|---|---|
| 20 נקודות קצה | 3–4 ימים |
| 30–50 נקודות קצה | 4–7 ימים |
| 50+ נקודות קצה | מ-7 ימים |
כולל:
- קולקציית Postman עם בדיקות (חיוביות, שליליות, ערכי גבול)
- הגדרת סביבות (staging, production)
- סקריפטים לפני בקשה (חידוש טוקן אוטומטי, יצירת נתונים)
- אינטגרציית CI (GitHub Actions, GitLab CI, Jenkins)
- רפורטרים של Newman (HTML, JUnit, CLI)
- תיעוד המתאר את המבנה וכיצד להוסיף בדיקות
- הדרכת צוות (שעה אונליין)
המחיר מחושב באופן אישי לפי נפח ה-API ומורכבות התרחישים. צור קשר — נספק הצעה מסחרית תוך יום עסקים אחד.
טעויות נפוצות באוטומציית בדיקות וכיצד להימנע מהן
- התעלמות מסדר הבקשות — שרשראות (התחברות → שליפת נתונים) צריכות להיות מתועדות במפורש דרך דרישות מוקדמות או בדיקות.
- קידוד נתונים קשיח — השתמש במשתנים דינמיים (
Collection: E-commerce API ├── Auth │ ├── POST /auth/login │ ├── POST /auth/refresh │ └── POST /auth/logout ├── Products │ ├── GET /products (list) │ ├── GET /products/:id │ ├── POST /products (create) │ └── PATCH /products/:id └── Orders ├── POST /orders (create) └── GET /orders/:id,// environments/staging.json { "name": "Staging", "values": [ { "key": "BASE_URL", "value": "https://api-staging.example.com" }, { "key": "API_KEY", "value": "{{$STAGING_API_KEY}}" }, { "key": "auth_token", "value": "" } ] }) במקום ערכים מקודדים. - חוסר אימות סכמה — ללא
// POST /auth/login — Tests tab pm.test('Status code is 200', () => { pm.response.to.have.status(200); }); pm.test('Response has token', () => { const json = pm.response.json(); pm.expect(json).to.have.property('access_token'); pm.expect(json.access_token).to.be.a('string').and.not.empty; }); pm.test('Response time is acceptable', () => { pm.expect(pm.response.responseTime).to.be.below(500); }); // Сохранить токен для следующих запросов const json = pm.response.json(); pm.environment.set('auth_token', json.access_token); pm.environment.set('user_id', json.user.id); // GET /products — проверка схемы pm.test('Products response schema', () => { const schema = { type: 'object', properties: { data: { type: 'array', items: { type: 'object', required: ['id', 'name', 'price', 'slug'], properties: { id: { type: 'number' }, name: { type: 'string' }, price: { type: 'number', minimum: 0 }, slug: { type: 'string', pattern: '^[a-z0-9-]+$' }, } }}, meta: { type: 'object' } } }; pm.response.to.have.jsonSchema(schema); }); pm.test('Products are sorted by created_at DESC', () => { const products = pm.response.json().data; for (let i = 0; i < products.length - 1; i++) { pm.expect(new Date(products[i].created_at)) .to.be.at.least(new Date(products[i+1].created_at)); } });לא תבחין בשינויים במבנה התגובה. - אי ריצה ב-CI — בדיקות חייבות לרוץ בכל PR.
השוואה: Postman לעומת Insomnia
| קריטריון | Postman + Newman | Insomnia |
|---|---|---|
| רץ CLI | Newman (עוצמתי) | Inso (מוגבל) |
| בדיקות JavaScript | כן | כן, אך ללא סקריפטים לפני בקשה |
| אינטגרציית CI | רחבה (GitHub Actions, Jenkins, GitLab) | מוגבלת |
| קהילה | ענקית | קטנה |
Postman עולה על Insomnia במיוחד בזכות Newman ומערכת הפלאגינים. אם המחסנית שלך כוללת CI/CD — הבחירה ברורה.
למה לבחור בפיתוח בדיקות ה-API שלנו?
פיתוח בדיקות ה-API שלנו מהיר פי 3 מכתיבת סקריפטים ידנית כי אנו משתמשים בקולקציות תבניתיות. סיפקנו למעלה מ-40 פרויקטים עם כיסוי ממוצע של 95%. צור קשר לייעוץ — נעריך את ה-API שלך ונציע מבנה בדיקות תוך יום אחד.







