Создайте переменные для логина и пароля: test_login и test_password. В эти переменные с помощью csv-файла нужно передать тестовые данные для логина и пароля. Тестируя логин и пароль, необходимо провести 3 позитивных и 5 негативных тестов на статус-код 200.
Для авторизации можно использовать любой из доступных аккаунтов.
Настройте авторизацию для всех заголовков коллекции, динамически получая значение токена с помощью скрипта в запросе «Авторизация пользователя».
Получите текущий баланс пользователя. Запишите текущее значение баланса в переменную коллекции current_balance.
Для сайта “Скан-интефакс”
csv
login,password
test_user1,password1
test_user2,password2
test_user3,password3
Теперь, давайте перейдем к самому коду.
Сначала, мы должны прочитать данные из csv-файла и сохранить их в переменные test_login и test_password:
javascript
const fs = require('fs');
const csv = require('csv-parser');
let test_login;
let test_password;
fs.createReadStream('credentials.csv')
.pipe(csv())
.on('data', (row) => {
test_login = row.login;
test_password = row.password;
})
.on('end', () => {
console.log('Credentials loaded');
});
Здесь мы используем модуль fs для чтения файла и модуль csv-parser для парсинга csv-файла. Мы инициализируем переменные test_login и test_password вне потока, чтобы сохранить значения в них и использовать их в другом месте кода.
Теперь нам нужно провести 3 позитивных и 5 негативных тестов на статус-код 200. Для этого мы можем использовать библиотеку supertest, которая позволяет выполнять запросы к нашему серверу и ассертировать на ожидаемый статус-код. Ниже приведен пример кода для позитивного теста:
javascript
const request = require('supertest');
request(app)
.post('/login')
.send({ login: test_login, password: test_password })
.expect(200)
.end((err, res) => {
if (err) throw err;
console.log('Positive test passed');
});
Здесь мы используем метод post для отправки запроса на эндпоинт /login с указанными логином и паролем. Затем проверяем, что полученный статус-код равен 200. Если статус-код не равен 200, тест провален и будет сгенерирована ошибка.
Теперь мы можем создать 3 позитивных и 5 негативных тестов с помощью цикла:
javascript
// Позитивные тесты
for (let i = 1; i <= 3; i++) {
request(app)
.post('/login')
.send({ login: test_login, password: test_password })
.expect(200)
.end((err, res) => {
if (err) throw err;
console.log(`Positive test ${i} passed`);
});
}
// Негативные тесты
for (let i = 1; i <= 5; i++) {
request(app)
.post('/login')
.send({ login: 'invalid_login', password: 'invalid_password' })
.expect(200) // Здесь указываем ожидаемый НЕ статус-код (например, 401 для негативного теста)
.end((err, res) => {
if (err) throw err;
console.log(`Negative test ${i} passed`);
});
}
Теперь у нас есть 3 позитивных и 5 негативных тестов, которые выполняются и выводят сообщение в консоль о том, что тест пройден.
Далее, нам нужно настроить авторизацию для всех заголовков коллекции test, чтобы автоматически получать токен для остальных запросов. Мы можем использовать глобальную переменную в коллекции для хранения текущего токена:
javascript
let current_token;
pm.collectionVariables.set('current_token', current_token);
Теперь мы можем использовать эту переменную в других запросах коллекции, чтобы добавить заголовок "Авторизация пользователя" с текущим токеном:
javascript
pm.request.headers.add({ key: 'Authorization', value: `Bearer {{current_token}}` });
Наконец, мы должны получить текущий баланс пользователя и записать его в переменную коллекции current_balance. Для этого мы можем сделать запрос к эндпоинту, который возвращает текущий баланс пользователя, и сохранить его значение:
javascript
pm.sendRequest('GET', '/balance', (err, response) => {
if (err) throw err;
const data = JSON.parse(response.body);
pm.collectionVariables.set('current_balance', data.balance);
});
Здесь мы используем функцию sendRequest для отправки GET-запроса на эндпоинт /balance. Затем мы парсим ответ и сохраняем значение баланса в переменной коллекции current_balance.
В итоге, весь код собирается в один файл:
javascript
const fs = require('fs');
const csv = require('csv-parser');
const request = require('supertest');
let test_login;
let test_password;
fs.createReadStream('credentials.csv')
.pipe(csv())
.on('data', (row) => {
test_login = row.login;
test_password = row.password;
})
.on('end', () => {
console.log('Credentials loaded');
// Позитивные тесты
for (let i = 1; i <= 3; i++) {
request(app)
.post('/login')
.send({ login: test_login, password: test_password })
.expect(200)
.end((err, res) => {
if (err) throw err;
console.log(`Positive test ${i} passed`);
});
}
// Негативные тесты
for (let i = 1; i <= 5; i++) {
request(app)
.post('/login')
.send({ login: 'invalid_login', password: 'invalid_password' })
.expect(401) // Здесь указываем ожидаемый НЕ статус-код (например, 401 для негативного теста)
.end((err, res) => {
if (err) throw err;
console.log(`Negative test ${i} passed`);
});
}
// Получение текущего баланса пользователя
pm.sendRequest('GET', '/balance', (err, response) => {
if (err) throw err;
const data = JSON.parse(response.body);
pm.collectionVariables.set('current_balance', data.balance);
});
});
Таким образом, вся задача будет реализована с помощью модулей fs, csv-parser, supertest и Postman. Мы считываем данные из csv-файла, выполняем тестовые запросы с различными логинами и паролями, сохраняем текущий баланс пользователя и используем авторизацию с помощью токена.Нажимая «Регистрация» или «Войти через Google», вы соглашаетесь с Публичной офертой, даете Согласие на обработку персональных данных, а также подтверждаете что вам есть 18 лет
Нажимая «Регистрация» или «Войти через Google», вы соглашаетесь с Публичной офертой, даете Согласие на обработку персональных данных, а также подтверждаете что вам есть 18 лет