ברוש מצוין לבדיקות חזיתיות, אבל הוא יכול לבדוק את ממשקי ה-API שלך ביעילות.
ברוש היא מסגרת בדיקה פופולרית המותאמת ליישומי JavaScript. למרות שהוא נועד בעיקר לבחון רכיבי ממשק משתמש ואינטראקציות עם רכיבי ממשק משתמש בדפדפן, הוא גם מתאים היטב לבדיקת ממשקי API. אתה יכול להשתמש במסגרת כדי לבדוק ממשקי API של RESTful באמצעות בקשות HTTP ולאמת את תגובות.
Cypress מאפשרת לך לכתוב מבחנים מקיפים המשתרעים על כל הספקטרום של זרימת העבודה של יישום האינטרנט שלך.
תחילת העבודה עם בדיקת API באמצעות ברוש
Cypress עוזרת לך לוודא שממשקי ה-API שלך עובדים כפי שאתה מצפה מהם. תהליך זה כולל בדרך כלל בדיקת נקודות הקצה של ה-API, נתוני קלט ותגובות HTTP. אתה יכול לאמת אינטגרציה עם כל שירות חיצוני, ולאשר שמנגנוני טיפול בשגיאות פועלים כהלכה.
בדיקת ממשקי ה-API שלך מבטיחה שהם פונקציונליים, אמינים ועונים על הצרכים של אפליקציות התלויות בהם. זה עוזר לזהות ולתקן באגים בשלב מוקדם, ולמנוע בעיות מלהתרחש בייצור.
בְּרוֹשׁ הוא כלי נהדר לבדיקת ממשק משתמש, בשימוש על ידי חלק מה מסגרות JavaScript פופולריות. היכולת שלו לבצע ולבדוק בקשות HTTP הופכת אותו ליעיל באותה מידה בבדיקת ממשקי API.
הוא עושה זאת על ידי שימוש ב-Node.js כמנוע שלו כדי לבצע בקשות HTTP ולטפל בתגובות שלהם.
אתה יכול למצוא את הקוד של הפרויקט הזה בו GitHub מאגר.
צור Express.js REST API
להתחיל, ליצור שרת אינטרנט Express, והתקן את החבילה הזו בפרויקט שלך:
npm install cors
לאחר מכן, הוסף את חבילת Cypress לפרויקט שלך:
npm install cypress --save-dev
לבסוף, עדכן את שלך package.json קובץ לכלול סקריפט בדיקה זה:
"test": "npx cypress open"
הגדר את בקרי ה-API
במקרה של העולם האמיתי, תבצע קריאות API כדי לקרוא ולכתוב נתונים ממסד נתונים או ממשק API חיצוני. עם זאת, עבור דוגמה זו, תדמה ותבדוק קריאות API כאלה על ידי הוספה ושליפה של נתוני משתמש ממערך.
בספריית השורש של תיקיית הפרויקט שלך, צור א controllers/userControllers.js קובץ, והוסיפו את הקוד הבא.
ראשית, הגדר את א רשום משתמש פונקציית בקר שתנהל את מסלול רישום המשתמש. זה יחלץ את נתוני המשתמש מגוף הבקשה, יצור אובייקט משתמש חדש ויוסיף אותו ל- משתמשים מַעֲרָך. אם התהליך הצליח, הוא אמור להגיב עם קוד סטטוס 201 והודעה המציינת שהוא רשם את המשתמש.
const users = [];
exports.registerUser = async (req, res) => {
const { username, password } = req.body;
try {
const newUser = { username, password };
users.push(newUser);
res.status(201).send({ message: 'User registered successfully' });
} catch (error) {
console.error(error);
res.status(500).send({ message: 'An error occurred!!' });
}
};
הוסף פונקציה שנייה-getUsers- כדי לאחזר נתוני משתמש מהמערך, ולהחזיר אותם כתגובת JSON.
exports.getUsers = async (req, res) => {
try {
res.json(users);
} catch (error) {
console.error(error);
res.status(500).send({ message: 'An error occurred!!' });
}
};
לבסוף, אתה יכול גם לדמות ניסיונות כניסה. באותו קובץ, הוסף קוד זה כדי לבדוק אם שם המשתמש והסיסמה שניתנו תואמים לנתוני משתמש כלשהם ב- משתמשים מַעֲרָך:
exports.loginUser = async (req, res) => {
const { username, password } = req.body;try {
const user = users.find((u) =>
u.username username && u.password password);
if (user) {
res.status(200).send({ message: 'Login successful' });
} else {
res.status(401).send({ message: 'Invalid credentials' });
}
} catch (error) {
console.error(error);
res.status(500).send({ message: 'An error occurred!!' });
}
};
הגדר את נתיבי ה-API
כדי להגדיר את המסלולים עבור ה-Express REST API שלך, צור חדש routes/userRoutes.js קובץ בספריית השורש, והוסיפו לו את הקוד הזה:
const express = require('express');
const router = express.Router();
const userControllers = require('../controllers/userControllers');const baseURL = '/v1/api/';
router.post(baseURL + 'register', userControllers.registerUser);
router.get(baseURL + 'users', userControllers.getUsers);
router.post(baseURL + 'login', userControllers.loginUser);
module.exports = router;
עדכן את קובץ Server.js
עדכן את server.js קובץ כדי להגדיר את ה-API באופן הבא:
const express = require('express');
const cors = require('cors');
const app = express();
const port = 5000;app.use(express.json());
app.use(express.urlencoded({ extended: true }));
app.use(cors());const userRoutes = require('./routes/userRoutes');
app.use('/', userRoutes);app.listen(port, () => {
console.log(`Server is listening at http://localhost:${port}`);
});
module.exports = app;
הגדר את סביבת הבדיקה
עם ממשק ה-API של ההדגמה, אתה מוכן להגדיר את סביבת הבדיקה. הפעל את שרת הפיתוח עם פקודת מסוף זו:
node server.js
לאחר מכן, הפעל את פקודת ה-test script במסוף נפרד:
npm run test
פקודה זו תפעיל את לקוח שולחן העבודה של Cypress, המספק את סביבת הבדיקה. ברגע שהוא פתוח, לחץ על בדיקת E2E לַחְצָן. בדיקות מקצה לקצה מבטיחות שאתה בודק את ה-Express API בכללותו, כלומר ל- Cypress תהיה גישה לשרת האינטרנט, למסלולים ולפונקציות הבקר המשויכות.
לאחר מכן, לחץ לְהַמשִׁיך כדי להוסיף קבצי תצורה של Cypress.
לאחר השלמת תהליך ההגדרה, אתה אמור לראות תיקיית Cypress חדשה בפרויקט שלך. ברוש יוסיף גם א cypress.config.js קובץ המכיל את הגדרות התצורה עבור הבדיקות שלך.
קדימה ועדכן את הקובץ הזה כך שיכלול את כתובת האתר הבסיסית של השרת שלך באופן הבא:
const { defineConfig } = require("cypress");
module.exports = defineConfig({
chromeWebSecurity: false,
e2e: {
baseUrl: 'http://localhost: 5000',
setupNodeEvents(on, config) {
},
},
});
כתוב את מקרי המבחן
עכשיו אתה מוכן לכתוב כמה מקרי מבחן. ראשית, בחר את הדפדפן שבו Cypress יופעל כדי להפעיל את הבדיקות מהאפשרויות הזמינות בלקוח Cypress.
לאחר מכן, לחץ על צור מפרט חדש לחצן כדי ליצור את קובץ הבדיקה שלך ולספק שם. לאחר מכן לחץ צור מפרט.
עכשיו, פתח את cypress/fixtures/example.json קובץ, ועדכן את תוכנו עם אישורי המשתמש הבאים. מתקנים הם קבצים המכילים נתוני בדיקה סטטיים שבהם תוכל להשתמש במקרי הבדיקה.
{
"username": "testuser",
"password": "password123"
}
ברוש מספק א cy.request שיטה לבצע בקשות HTTP לשרת אינטרנט. אתה יכול להשתמש בו כדי לבדוק סוגים שונים של נקודות קצה HTTP המנהלות פעולות שונות כולל GET, POST, PUT ומחק.
כדי לבדוק את שלושת מסלולי ה-API שהגדרת קודם לכן, התחל בתיאור מקרה הבדיקה עבור נקודת הקצה של הרישום. מקרה בדיקה זה אמור לאמת שנקודת הקצה פועלת כהלכה על ידי רישום מוצלח של משתמש חדש ואימות ההצהרות.
פתח את ה cypress/e2e/user.routes.spec.cy.js קובץ ועדכן את תוכנו בקוד הבא.
describe('User Routes', () => {
it('registers a new user', () => {
cy.fixture('example').then((testUser) => {
cy.request({
method: 'POST',
url: `${baseUrl}/v1/api/register`,
body: testUser,
}).then((response) => {
expect(response.status).to.eq(201);
expect(response.body.message).to.eq('User registered successfully');
});
});
});
בבדיקה זו, Cypress תטען את נתוני הבדיקה בקובץ המתקן, ותבצע בקשות POST לנקודת הקצה שצוינה עם הנתונים בגוף הבקשה. אם כל הטענות יעברו, מקרה המבחן יעבור. אחרת, זה ייכשל.
ראוי לציין שהתחביר למבחני ברוש דומה מאוד לתחביר המשמש במבחני מוקה, אותו אימצה ברוש.
כעת, תאר את המבחן עבור ה משתמשים מַסלוּל. הבדיקה צריכה לוודא שהתגובה מכילה נתוני משתמש כאשר בקשות מבוצעות לנקודת קצה זו. כדי להשיג זאת, הוסף את הקוד הבא בתוך לְתַאֵר בלוק בדיקה.
it('gets users data and the username matches test data', () => {
cy.fixture('example').then((expectedUserData) => {
cy.request({
method: 'GET',
url: `${baseUrl}/v1/api/users`,
}).then((response) => {
expect(response.status).to.eq(200);
const username = response.body[0].username;
expect(username).to.eq(expectedUserData.username);
});
});
});
לבסוף, כלול מקרה בדיקה שיבדוק את נקודת הקצה של ההתחברות וקבע שסטטוס התגובה הוא 200, מה שמצביע על ניסיון כניסה מוצלח.
it('logs in a user', () => {
cy.fixture('example').then((loginData) => {
cy.request({
method: 'POST',
url: `${baseUrl}/v1/api/login`,
body: loginData,
}).then((response) => {
expect(response.status).to.eq(200);
});
});
});
});
כדי להפעיל את הבדיקות, חזור לגרסת הדפדפן המנוהלת על ידי Cypress ובחר את קובץ הבדיקה הספציפי שברצונך להפעיל.
רץ המבחן ברוש יריץ את המבחנים ויתעד את תוצאותיהם, ויראה את מצב המעבר או הכישלון של כל מקרה מבחן.
הדוגמאות לעיל ממחישות כיצד ניתן לבדוק מסלולים שונים ואת פונקציות הבקר המתאימות שלהם כדי להבטיח את הפונקציונליות וההתנהגות הצפויה שלהם. אמנם חיוני לבדוק את הפונקציונליות של ממשקי API, אך אין להגביל את היקף הבדיקה רק להיבט זה.
אסטרטגיית בדיקת API מקיפה צריכה לכלול גם בדיקות על ביצועים, עומס ושילוב עם שירותים אחרים. על ידי הכללה סוגים שונים של שיטות בדיקה באסטרטגיה שלך, אתה יכול להשיג כיסוי בדיקה יסודי ולהבטיח שממשקי ה-API שלך הם פונקציונליים ואמינים לפני פריסת הקוד שלך לייצור.
בדיקת כל חווית האינטרנט שלך באמצעות ברוש
ברוש הוא כלי פנטסטי לבדיקת יישומי אינטרנט, המכסה בצורה חלקה בדיקות הן עבור הקצה הקדמי והן האחורי.
עם תכונות הבדיקה הידידותיות למשתמש שלה, אתה יכול בקלות ובמהירות להגדיר סביבת בדיקה בפלטפורמה אחת. לאחר מכן תוכל להשתמש בו כדי לבדוק ביסודיות היבטים שונים של היישום שלך ולהבטיח ביצועים מהשורה הראשונה.