„Cypress“ puikiai tinka priekiniam testavimui, tačiau jis taip pat gali veiksmingai išbandyti jūsų API.

„Cypress“ yra populiari testavimo sistema, pritaikyta „JavaScript“ programoms. Nors jis visų pirma skirtas UI komponentams ir sąveikai su UI elementais naršyklėje išbandyti, taip pat puikiai tinka API testavimui. Galite naudoti sistemą norėdami išbandyti RESTful API naudodami HTTP užklausas ir patvirtinti atsakymus.

„Cypress“ leidžia rašyti išsamius testus, apimančius visą jūsų žiniatinklio programos darbo eigos spektrą.

API testavimo naudojant Cypress pradžia

Cypress padeda patikrinti, ar jūsų API veikia taip, kaip tikitės. Šis procesas paprastai apima API galinių taškų, įvesties duomenų ir HTTP atsakymų testavimą. Galite patikrinti integraciją su bet kokiomis išorinėmis paslaugomis ir patvirtinti, kad klaidų apdorojimo mechanizmai veikia tinkamai.

Išbandę API įsitikinsite, kad jos yra funkcionalios, patikimos ir atitinka nuo jų priklausančių programų poreikius. Tai padeda anksti nustatyti ir ištaisyti klaidas, užkertant kelią gamybos problemoms.

instagram viewer

Kiparisas yra puikus vartotojo sąsajos testavimo įrankis, kurį naudoja kai kurie populiarios JavaScript sistemos. Dėl galimybės teikti ir tikrinti HTTP užklausas jis yra vienodai veiksmingas tikrinant API.

Tai daroma naudojant Node.js kaip variklį HTTP užklausoms teikti ir jų atsakymams tvarkyti.

Šio projekto kodą galite rasti jame GitHub saugykla.

Sukurkite Express.js REST API

Pradėti, sukurti „Express“ žiniatinklio serverį, ir įdiekite šį paketą savo projekte:

npm install cors

Tada pridėkite Cypress paketą prie savo projekto:

npm install cypress --save-dev

Galiausiai atnaujinkite savo package.json failą, kad būtų įtrauktas šis bandomasis scenarijus:

"test": "npx cypress open"

Apibrėžkite API valdiklius

Realiu atveju atliktumėte API skambučius, kad galėtumėte skaityti ir rašyti duomenis iš duomenų bazės arba išorinės API. Tačiau šiame pavyzdyje tokius API iškvietimus modeliuosite ir išbandysite pridėdami ir gaudami vartotojo duomenis iš masyvo.

Projekto aplanko šakniniame kataloge sukurkite a controllers/userControllers.js failą ir pridėkite šį kodą.

Pirmiausia apibrėžkite a registruotisVartotojas valdiklio funkcija, kuri valdys vartotojo registracijos maršrutą. Jis išskirs vartotojo duomenis iš užklausos turinio, sukurs naują vartotojo objektą ir pridės jį prie vartotojų masyvas. Jei procesas sėkmingas, jis turėtų atsakyti su 201 būsenos kodu ir pranešimu, nurodančiu, kad jis užregistravo vartotoją.

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

Pridėkite antrą funkciją –getUsers– gauti vartotojo duomenis iš masyvo ir grąžinti juos kaip JSON atsakymą.

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

Galiausiai taip pat galite imituoti bandymus prisijungti. Tame pačiame faile pridėkite šį kodą, kad patikrintumėte, ar nurodytas vartotojo vardas ir slaptažodis atitinka bet kokius vartotojo duomenis vartotojų masyvas:

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

Apibrėžkite API maršrutus

Norėdami apibrėžti savo Express REST API maršrutus, sukurkite naują routes/userRoutes.js failą šakniniame kataloge ir pridėkite prie jo šį kodą:

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;

Atnaujinkite failą Server.js

Atnaujinkite server.js failą, kad sukonfigūruotumėte API taip:

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;

Nustatykite bandymo aplinką

Įdiegę demonstracinę API, esate pasirengę nustatyti testavimo aplinką. Paleiskite kūrimo serverį naudodami šią terminalo komandą:

node server.js

Tada paleiskite bandomojo scenarijaus komandą atskirame terminale:

npm run test

Ši komanda paleis „Cypress“ darbalaukio klientą, kuris suteikia testavimo aplinką. Kai jis bus atidarytas, spustelėkite E2E testavimas mygtuką. Visapusiški bandymai užtikrina, kad išbandysite visą Express API, o tai reiškia, kad „Cypress“ turės prieigą prie žiniatinklio serverio, maršrutų ir susijusių valdiklio funkcijų.

Toliau spustelėkite Tęsti Norėdami pridėti Cypress konfigūracijos failus.

Kai sąrankos procesas bus baigtas, savo projekte turėtumėte pamatyti naują aplanką Cypress. Cypress taip pat pridės a cypress.config.js failą, kuriame yra jūsų testų konfigūracijos nustatymai.

Eikite į priekį ir atnaujinkite šį failą, kad įtrauktumėte bazinį serverio URL, kaip nurodyta toliau:

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

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

Parašykite bandomuosius atvejus

Dabar esate pasirengę parašyti keletą bandomųjų atvejų. Pirmiausia pasirinkite naršyklę, kurioje bus paleista „Cypress“, kad paleistumėte testus iš „Cypress“ kliento parinkčių.

Tada spustelėkite Sukurti naują spec mygtuką, kad sukurtumėte bandomąjį failą, ir nurodykite pavadinimą. Tada spustelėkite Sukurti spec.

Dabar atidarykite cypress/fixtures/example.json failą ir atnaujinkite jo turinį šiais vartotojo kredencialais. Fixtures yra failai, kuriuose yra statinių bandymų duomenų, kuriuos galite naudoti bandomaisiais atvejais.

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

Cypress suteikia a cy.prašymas būdas pateikti HTTP užklausas žiniatinklio serveriui. Galite naudoti jį norėdami išbandyti įvairių tipų HTTP galinius taškus, kurie valdo skirtingas operacijas, įskaitant GET, POST, PUT ir DELETE.

Norėdami išbandyti tris anksčiau apibrėžtus API maršrutus, pradėkite aprašydami registro galutinio taško bandomąjį atvejį. Šis bandomasis atvejis turėtų patikrinti, ar galutinis taškas veikia tinkamai, sėkmingai užregistruojant naują vartotoją ir patvirtinant tvirtinimus.

Atidaryk cypress/e2e/user.routes.spec.cy.js failą ir atnaujinkite jo turinį tokiu kodu.

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

Atliekant šį testą, „Cypress“ įkels testo duomenis į tvirtinimo failą ir pateiks POST užklausas nurodytam galutiniam taškui su užklausos turinyje esančiais duomenimis. Jei visi teiginiai pasitvirtins, bandomasis atvejis bus sėkmingas. Priešingu atveju tai nepavyks.

Verta paminėti, kad Cypress testų sintaksė labai panaši į Mocha testuose naudojamą sintaksę, kurią patvirtino Cypress.

Dabar apibūdinkite testą vartotojų maršrutą. Bandymas turėtų patikrinti, ar atsakyme yra vartotojo duomenų, kai pateikiamos užklausos šiam galutiniam taškui. Norėdami tai padaryti, įtraukite šį kodą apibūdinti bandymo blokas.

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

Galiausiai įtraukite bandomąjį atvejį, kuris patikrins prisijungimo galutinį tašką ir patvirtins, kad atsakymo būsena yra 200, o tai rodo sėkmingą prisijungimo bandymą.

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

Norėdami atlikti testus, grįžkite į naršyklės versiją, kurią valdo Cypress, ir pasirinkite konkretų bandomąjį failą, kurį norite paleisti.

„Cypress“ bandomasis bėgikas atliks testus ir užregistruos jų rezultatus, parodydamas kiekvieno bandymo atvejo sėkmingo arba nesėkmingo būseną.

Aukščiau pateikti pavyzdžiai iliustruoja, kaip galite išbandyti įvairius maršrutus ir atitinkamas jų valdiklio funkcijas, kad užtikrintumėte jų funkcionalumą ir numatomą elgesį. Nors būtina išbandyti API funkcionalumą, neturėtumėte apriboti testavimo apimties tik šiuo aspektu.

Į išsamią API testavimo strategiją taip pat turėtų būti įtraukti našumo, apkrovos ir integravimo su kitomis paslaugomis bandymai. Įtraukiant įvairių tipų bandymų metodai savo strategijoje galite pasiekti išsamią bandymų aprėptį ir užtikrinti, kad jūsų API būtų funkcionalios ir patikimos prieš įdiegdami kodą gamybinėje versijoje.

Išbandykite visą žiniatinklio patirtį naudodami „Cypress“.

„Cypress“ yra puikus įrankis žiniatinklio programoms išbandyti, sklandžiai apimantis tiek priekinės, tiek galinės dalies testus.

Naudodami patogias testavimo funkcijas galite lengvai ir greitai nustatyti testavimo aplinką vienoje platformoje. Tada galėsite jį naudoti norėdami nuodugniai išbandyti įvairius programos aspektus ir užtikrinti aukščiausio lygio našumą.