Cypress отлично подходит для внешнего тестирования, но он также может эффективно тестировать ваши API.

Cypress — популярная среда тестирования, предназначенная для приложений JavaScript. Хотя он в первую очередь предназначен для тестирования компонентов пользовательского интерфейса и взаимодействия с элементами пользовательского интерфейса в браузере, он также хорошо подходит для тестирования API. Вы можете использовать эту платформу для тестирования API RESTful через HTTP-запросы и проверки ответы.

Cypress позволяет вам писать комплексные тесты, охватывающие весь спектр рабочего процесса вашего веб-приложения.

Начало работы с тестированием API с использованием Cypress

Cypress поможет вам убедиться, что ваши API работают так, как вы ожидаете. Этот процесс обычно включает в себя тестирование конечных точек API, входных данных и ответов HTTP. Вы можете проверить интеграцию с любыми внешними службами и убедиться, что механизмы обработки ошибок работают правильно.

Тестирование ваших API гарантирует, что они функциональны, надежны и соответствуют потребностям приложений, которые от них зависят. Это помогает выявлять и исправлять ошибки на ранних стадиях, предотвращая возникновение проблем в рабочей среде.

instagram viewer

Кипарис — отличный инструмент для тестирования пользовательского интерфейса, используемый некоторыми популярные фреймворки JavaScript. Его способность создавать и тестировать HTTP-запросы делает его одинаково эффективным при тестировании API.

Он делает это, используя Node.js в качестве механизма для выполнения HTTP-запросов и обработки их ответов.

Вы можете найти код этого проекта в его GitHub хранилище.

Создайте REST API Express.js.

Для начала, создать веб-сервер Expressи установите этот пакет в свой проект:

npm install cors

Затем добавьте пакет Cypress в свой проект:

npm install cypress --save-dev

Наконец, обновите свой пакет.json файл, чтобы включить этот тестовый скрипт:

"test": "npx cypress open"

Определите контроллеры API

В реальном случае вы будете выполнять вызовы API для чтения и записи данных из базы данных или внешнего API. Однако в этом примере вы будете моделировать и тестировать такие вызовы API, добавляя и извлекая пользовательские данные из массива.

В корневом каталоге папки вашего проекта создайте файл контроллеры/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, создайте новый маршруты/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.

Обновите сервер.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

Затем запустите команду тестового сценария в отдельном терминале:

npm run test

Эта команда запустит настольный клиент Cypress, который предоставляет среду тестирования. Когда оно откроется, нажмите кнопку E2E-тестирование кнопка. Сквозные тесты гарантируют, что вы протестируете Express API в целом, а это означает, что Cypress будет иметь доступ к веб-серверу, маршрутам и связанным функциям контроллера.

Далее нажмите Продолжать для добавления файлов конфигурации Cypress.

После завершения процесса установки вы должны увидеть новую папку Cypress в своем проекте. Cypress также добавит кипарис.config.js файл, содержащий настройки конфигурации для ваших тестов.

Обновите этот файл, включив в него базовый URL-адрес вашего сервера следующим образом:

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

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

Напишите тестовые примеры

Теперь вы готовы написать несколько тестовых примеров. Сначала выберите браузер, в котором Cypress запустится для запуска тестов, из опций, доступных в клиенте Cypress.

Далее нажмите кнопку Создать новую спецификацию кнопку, чтобы создать тестовый файл, и укажите имя. Затем нажмите Создать спецификацию.

Теперь откройте кипарис/светильники/example.json файл и обновите его содержимое, указав следующие учетные данные пользователя. Фикстуры — это файлы, содержащие статические тестовые данные, которые можно использовать в тестовых случаях.

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

Кипарис обеспечивает cy.request метод для отправки HTTP-запросов на веб-сервер. Вы можете использовать его для тестирования различных типов конечных точек HTTP, которые управляют различными операциями, включая GET, POST, PUT и DELETE.

Чтобы протестировать три маршрута API, которые вы определили ранее, начните с описания тестового примера для конечной точки регистра. Этот тестовый пример должен проверить правильность работы конечной точки путем успешной регистрации нового пользователя и проверки утверждений.

Открой кипарис/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-запросы к указанной конечной точке с данными в теле запроса. Если все утверждения пройдены, тестовый пример будет пройден. В противном случае это потерпит неудачу.

Стоит отметить, что синтаксис тестов Cypress очень похож на синтаксис, используемый в тестах Mocha, который принял Cypress.

Теперь опишите тест на пользователи маршрут. Тест должен убедиться, что ответ содержит пользовательские данные при отправке запросов к этой конечной точке. Для этого добавьте следующий код в файл описывать тестовый блок.

 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, и выберите конкретный тестовый файл, который вы хотите запустить.

Средство запуска тестов Cypress запускает тесты и записывает их результаты, показывая статус прохождения или неудачи каждого тестового примера.

Приведенные выше примеры иллюстрируют, как можно протестировать различные маршруты и соответствующие им функции контроллера, чтобы убедиться в их функциональности и ожидаемом поведении. Хотя тестирование функциональности API крайне важно, не следует ограничивать объем тестирования исключительно этим аспектом.

Комплексная стратегия тестирования API должна также включать тесты производительности, нагрузки и интеграции с другими сервисами. Включив различные методы тестирования В своей стратегии вы можете добиться тщательного тестового покрытия и убедиться, что ваши API-интерфейсы функциональны и надежны, прежде чем развертывать свой код в рабочей среде.

Тестирование всего вашего веб-интерфейса с помощью Cypress

Cypress — фантастический инструмент для тестирования веб-приложений, легко охватывающий тесты как для внешнего, так и для внутреннего интерфейса.

Благодаря удобным функциям тестирования вы можете легко и быстро настроить среду тестирования на одной платформе. Затем вы можете использовать его для тщательного тестирования различных аспектов вашего приложения и обеспечения первоклассной производительности.