Cypress sobib suurepäraselt esiotsa testimiseks, kuid see võib ka teie API-sid tõhusalt testida.

Cypress on populaarne testimisraamistik, mis on kohandatud JavaScripti rakenduste jaoks. Kuigi see on mõeldud peamiselt kasutajaliidese komponentide ja interaktsioonide testimiseks brauseris kasutajaliidese elementidega, on see ka seda sobib hästi API-de testimiseks. Saate raamistikku kasutada RESTful API-de testimiseks HTTP-päringute kaudu ja nende kinnitamiseks vastuseid.

Cypress võimaldab teil kirjutada põhjalikke teste, mis hõlmavad teie veebirakenduse töövoo kogu spektrit.

Cypressi abil API testimise alustamine

Cypress aitab teil kontrollida, kas teie API-d töötavad ootuspäraselt. See protsess hõlmab tavaliselt API lõpp-punktide, sisendandmete ja HTTP vastuste testimist. Saate kontrollida integratsiooni mis tahes välisteenustega ja veenduda, et veakäsitlusmehhanismid töötavad õigesti.

API-de testimine tagab, et need on funktsionaalsed, töökindlad ja vastavad neist sõltuvate rakenduste vajadustele. See aitab vigu varakult tuvastada ja parandada, hoides ära probleemide ilmnemise tootmises.

instagram viewer

Küpress on suurepärane kasutajaliidese testimise tööriist, mida kasutavad mõned populaarsed JavaScripti raamistikud. Selle võime teha ja testida HTTP-päringuid muudab selle API-de testimisel sama tõhusaks.

See teeb seda, kasutades HTTP-päringute tegemiseks ja nende vastuste haldamiseks mootorina Node.js-i.

Selle projekti koodi leiate sellest GitHub hoidla.

Looge Express.js REST API

Alustamiseks luua Expressi veebiserverja installige see pakett oma projekti:

npm install cors

Järgmisena lisage oma projektile Cypressi pakett:

npm install cypress --save-dev

Lõpuks värskendage oma package.json faili selle testskripti lisamiseks:

"test": "npx cypress open"

Määratlege API-kontrollerid

Reaalsel juhul teeksite API-kutseid, et lugeda ja kirjutada andmeid andmebaasist või välisest API-st. Kuid selle näite puhul simuleerite ja testite selliseid API-kutseid, lisades massiivist kasutajaandmeid ja hankides neid.

Looge oma projektikausta juurkataloogis a controllers/userControllers.js faili ja lisage järgmine kood.

Esiteks määratlege a registreeriKasutaja kontrolleri funktsioon, mis haldab kasutaja registreerimismarsruuti. See ekstraktib kasutaja andmed päringu kehast, loob uue kasutajaobjekti ja lisab selle kasutajad massiivi. Kui protsess on edukas, peaks see vastama olekukoodiga 201 ja sõnumiga, mis näitab, et see on kasutaja registreerinud.

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!!' });
}
};

Lisage teine ​​funktsioon -getUsers— kasutajaandmete toomiseks massiivist ja tagastamiseks JSON-i vastusena.

exports.getUsers = async (req, res) => {
try {
res.json(users);
} catch (error) {
console.error(error);
res.status(500).send({ message: 'An error occurred!!' });
}
};

Lõpuks saate simuleerida ka sisselogimiskatseid. Lisage samasse faili see kood, et kontrollida, kas antud kasutajanimi ja parool vastavad failis olevatele kasutajaandmetele kasutajad massiiv:

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!!' });
}
};

Määrake API marsruudid

Oma Express REST API jaoks marsruutide määratlemiseks looge uus routes/userRoutes.js faili juurkataloogis ja lisage sellele järgmine kood:

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;

Värskendage faili Server.js

Värskendage server.js faili API konfigureerimiseks järgmiselt:

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;

Seadistage katsekeskkond

Kui demo API on paigas, olete valmis testimiskeskkonda seadistama. Käivitage arendusserver selle terminalikäsuga:

node server.js

Järgmisena käivitage testskripti käsk eraldi terminalis:

npm run test

See käsk käivitab Cypressi töölauakliendi, mis pakub testimiskeskkonda. Kui see on avatud, klõpsake nuppu E2E testimine nuppu. Lõpptestid tagavad, et testite Express API-t tervikuna, mis tähendab, et Cypressil on juurdepääs veebiserverile, marsruutidele ja seotud kontrolleri funktsioonidele.

Järgmisena klõpsake Jätka Cypressi konfiguratsioonifailide lisamiseks.

Kui häälestusprotsess on lõpule viidud, peaksite oma projektis nägema uut kausta Cypress. Cypress lisab ka a cypress.config.js fail, mis sisaldab teie testide konfiguratsioonisätteid.

Jätkake ja värskendage seda faili, et lisada oma serveri baas-URL järgmiselt:

const { defineConfig } = require("cypress");

module.exports = defineConfig({
chromeWebSecurity: false,
e2e: {
baseUrl: 'http://localhost: 5000',
setupNodeEvents(on, config) {
},
},
});

Kirjutage testjuhtumid

Nüüd olete valmis mõned testjuhtumid kirjutama. Esmalt valige Cypressi kliendis saadaolevate valikute hulgast testide käivitamiseks brauser, milles Cypress käivitub.

Järgmisena klõpsake nuppu Loo uus spetsifikatsioon nuppu, et luua oma testfail, ja sisestage nimi. Seejärel klõpsake Loo spetsifikatsioon.

Nüüd avage cypress/fixtures/example.json faili ja värskendage selle sisu järgmiste kasutajaandmetega. Fixtures on failid, mis sisaldavad staatilisi testiandmeid, mida saate testjuhtumitel kasutada.

{
"username": "testuser",
"password": "password123"
}

Cypress pakub a cy.request meetod HTTP-päringute tegemiseks veebiserverisse. Saate seda kasutada erinevat tüüpi HTTP lõpp-punktide testimiseks, mis haldavad erinevaid toiminguid, sealhulgas GET, POST, PUT ja DELETE.

Kolme varem määratletud API marsruudi testimiseks alustage registri lõpp-punkti testjuhtumi kirjeldamisest. See testjuhtum peaks uue kasutaja edukalt registreerides ja väiteid kinnitades kontrollima, et lõpp-punkt töötab õigesti.

Ava cypress/e2e/user.routes.spec.cy.js faili ja värskendage selle sisu järgmise koodiga.

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');
});
});
});

Selles testis laadib Cypress testiandmed kinnitusfaili ja esitab määratud lõpp-punktile POST-päringud koos päringu kehas olevate andmetega. Kui kõik väited läbivad, läheb testjuhtum läbi. Vastasel juhul see ebaõnnestub.

Väärib märkimist, et Cypressi testide süntaks sarnaneb väga Mocha testides kasutatava süntaksiga, mille Cypress on omaks võtnud.

Nüüd kirjeldage testi kasutajad tee. Kui sellele lõpp-punktile päringuid tehakse, peaks test kontrollima, kas vastus sisaldab kasutajaandmeid. Selle saavutamiseks lisage jaotisesse järgmine kood kirjeldada testplokk.

 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);
});
});
});

Lõpuks lisage testjuhtum, mis testib sisselogimise lõpp-punkti ja kinnitab, et vastuse olek on 200, mis näitab edukat sisselogimiskatset.

 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);
});
});
});
});

Testide käivitamiseks naaske Cypressi hallatava brauseri versiooni juurde ja valige konkreetne testfail, mida soovite käivitada.

Cypressi testijooksja viib läbi testid ja salvestab nende tulemused, näidates iga testijuhtumi läbimise või ebaõnnestumise olekut.

Ülaltoodud näited illustreerivad, kuidas saate testida erinevaid marsruute ja nende vastavaid kontrolleri funktsioone, et tagada nende funktsionaalsus ja eeldatav käitumine. Kuigi API-de funktsionaalsuse testimine on hädavajalik, ei tohiks te piirata testimise ulatust ainult selle aspektiga.

Põhjalik API testimisstrateegia peaks hõlmama ka jõudluse, koormuse ja teiste teenustega integreerimise teste. Kaasades erinevat tüüpi testimismeetodid oma strateegias saate saavutada põhjaliku testide katvuse ja tagada, et teie API-d on nii funktsionaalsed kui ka töökindlad enne koodi tootmisse juurutamist.

Kogu oma veebikogemuse testimine küpressi abil

Cypress on fantastiline tööriist veebirakenduste testimiseks, mis katab sujuvalt nii esi- kui ka tagaotsa testid.

Selle kasutajasõbralike testimisfunktsioonide abil saate hõlpsalt ja kiiresti seadistada testimiskeskkonna ühel platvormil. Seejärel saate seda kasutada oma rakenduse erinevate aspektide põhjalikuks testimiseks ja tipptasemel jõudluse tagamiseks.