pm.expect(pm.environment.get("env")).to.equal("Test");
/**
* @description Функция для получения значения переменной окружения.
* @param {string} key - Ключ переменной окружения.
* @returns {string} Значение переменной окружения.
* @example "personnelNumber": "1234567890"
* @throws {Error} Если переменная окружения не найдена.
*/
var jsonData = pm.response.json();
/**
* @description Функция для установки переменной окружения.
* @param {string} key - Ключ переменной окружения.
* @returns {string} Значение переменной окружения.
* @example "sessionId": "1234567890"
* @throws {Error} Если статус ответа не соответствует ожидаемому значению.
*/
pm.collectionVariables.set("sessionId", jsonData.sessionId)
/**
* @description Функция для проверки ответа.
* @returns {void} Ничего не возвращает.
* @example "Проверка ответа" - проверка, что позиция сотрудника "Водитель" и что сотрудник является объектом с строковым значением personnelNumber.
* @throws {Error} Если проверка не пройдена.
* @example "Проверка статуса ответа" - проверка, что статус ответа равен 200.
*/
pm.test("Проверка ответа", function () {
const response = pm.response.json();
pm.expect(response.employee.position).to.eql("Водитель");
pm.expect(response.employee).to.be.an("object");
pm.expect(response.employee.personnelNumber).to.be.a("string");
});
/**
* @description Функция для проверки корректности ответа API.
* @returns {void} Ничего не возвращает.
* @example "Проверка статуса ответа" - проверка, что статус ответа равен 200 или 201.
* @example "Проверка типа контента" - проверка, что тип контента ответа равен "application/json".
* @example "Проверка наличия JSON тела" - проверка, что тело ответа является объектом.
* @example "Проверка отсутствия поля 'error'" - проверка, что поле "error" отсутствует в ответе.
* @example "Проверка структуры ответа" - проверка, что ответ является объектом.
*/
pm.test("Проверка корректности ответа API", function () {
try {
// Проверка статуса ответа
pm.expect(pm.response.code).to.be.oneOf([200, 201]);
// Проверка статуса ответа
pm.expect(pm.response.code).to.be.within(200, 299);
// Проверка типа контента
pm.expect(pm.response.headers.get("Content-Type")).to.contain("application/json");
// Проверка наличия JSON тела
const responseBody = pm.response.json();
pm.expect(responseBody).to.exist;
// Проверка отсутствия поля "error"
pm.expect(responseBody).to.not.have.property("error");
// Дополнительная проверка структуры ответа
pm.expect(responseBody).to.be.an("object");
console.log("Ответ API проверен успешно");
} catch (error) {
console.error("Ошибка при проверке ответа:", error.message);
pm.expect.fail(error.message);
}
});
/**
* @description Функция для проверки подробности ответа.
* @returns {void} Ничего не возвращает.
* @example "Подробная проверка ответа" - проверка, что статус ответа в диапазоне 200-299, что тип контента ответа "application/json", что тело ответа не пусто и является объектом.
* @example "Проверка статуса ответа" - проверка, что статус ответа в диапазоне 200-299.
* @example "Проверка типа контента" - проверка, что тип контента ответа "application/json".
*/
pm.test("Подробная проверка ответа", function () {
try {
pm.response.to.be.ok;
const status = pm.response.code;
pm.expect(status).to.be.within(200, 299);
pm.expect(pm.response.headers.get("Content-Type")).to.contain("application/json");
const response = pm.response.json();
pm.expect(response).to.exist;
console.log(`Запрос успешно выполнен со статусом ${status}`);
} catch (error) {
console.error("Ошибка при проверке ответа:", error.message);
pm.expect.fail(error.message);
}
});
/**
* @description Функция для проверки наличия тела ответа.
* @returns {void} Ничего не возвращает.
* @example "Проверка наличия тела ответа" - проверка, что тело ответа не пусто.
* @example "Проверка наличия JSON тела" - проверка, что тело ответа является объектом.
*/
pm.test("response must be valid and have a body", function () {
pm.response.to.be.ok;
pm.response.to.be.withBody;
pm.response.to.be.json;
});
//
/**
* @description Функция для проверки свойств ответа.
* @example "Проверка свойств ответа" - проверка, что ответ содержит обязательные свойства "type", "name", "id" и что их значения соответствуют ожидаем
* @returns {void} Ничего не возвращает.
*/
pm.test("Комплексная проверка свойств ответа", function () {
try {
const responseJson = pm.response.json();
// Базовая проверка структуры
pm.expect(responseJson).to.exist;
pm.expect(responseJson).to.be.an('object');
// Проверка обязательных свойств
pm.expect(responseJson).to.have.all.keys('type', 'name', 'id');
// Проверка значений
pm.expect(responseJson.type).to.equal('vip');
pm.expect(responseJson.name).to.be.a('string');
pm.expect(responseJson.name).to.not.be.empty;
// Проверка ID
pm.expect(responseJson.id).to.be.a('string');
pm.expect(responseJson.id).to.have.lengthOf(1);
pm.expect(responseJson.id).to.match(/^[a-zA-Z0-9]+$/); // проверка формата
console.log("Все проверки пройдены успешно");
} catch (error) {
console.error("Ошибка:", error.message);
pm.expect.fail(error.message);
}
});
/**
* @description Функция для проверки формата ID.
* @example "Проверка формата ID" - проверка, что ID соответствует формату UUID или состоит только из букв и цифр.
* @returns {void} Ничего не возвращает.
*/
pm.test("Проверка формата ID", function () {
const responseJson = pm.response.json();
// Базовая проверка
pm.expect(responseJson.id).to.match(/^[a-zA-Z0-9]+$/);
// Альтернативные варианты
// Только цифры
pm.expect(responseJson.id).to.match(/^\d+$/);
// Буквы и цифры с подчеркиванием
pm.expect(responseJson.id).to.match(/^[a-zA-Z0-9_]+$/);
// UUID формат
pm.expect(responseJson.id).to.match(/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i);
});
/**
* @description Функция для проверки формата электронной почты.
*/
pm.expect(email).to.match(/^[^\s@]+@[^\s@]+\.[^\s@]+$/);
/**
* @description Функция для проверки формата номера телефона.
*/
pm.expect(phone).to.match(/^\+?[0-9]{10,15}$/);
/**
* @description Функция для проверки формата даты.
*/
pm.expect(date).to.match(/^\d{4}-\d{2}-\d{2}$/); // формат YYYY-MM-DD
/**
* @description Функция для проверки формата ID.
*/
pm.test("Комплексная проверка ID", function () {
try {
const responseJson = pm.response.json();
// Проверка существования
pm.expect(responseJson.id).to.exist;
// Проверка типа
pm.expect(responseJson.id).to.be.a('string');
// Проверка формата
pm.expect(responseJson.id).to.match(/^[a-zA-Z0-9]+$/);
// Дополнительная проверка длины
pm.expect(responseJson.id).to.have.lengthOf(10);
console.log("ID прошел все проверки");
} catch (error) {
console.error("Ошибка при проверке ID:", error.message);
pm.expect.fail(error.message);
}
});
pm.test("Проверка JSON ответа", function () {
try {
const responseJson = pm.response.json();
// Базовые проверки
pm.expect(responseJson).to.exist;
pm.expect(responseJson).to.be.an('object');
// Проверка конкретных полей
pm.expect(responseJson.id).to.be.a('string');
pm.expect(responseJson.name).to.be.a('string');
pm.expect(responseJson.name).to.not.be.empty;
// Сохранение значений
pm.environment.set("userId", responseJson.id);
console.log("JSON ответ успешно обработан");
} catch (error) {
console.error("Ошибка:", error.message);
pm.expect.fail("Не удалось обработать JSON ответ");
}
});
pm.test("Комплексная проверка XML ответа", function () {
try {
// Преобразуем XML в JSON
const responseJson = xml2Json(pm.response.text());
// Проверка базового ответа
pm.expect(responseJson).to.exist;
pm.expect(responseJson).to.be.an('object');
// Проверка HTTP статуса
pm.expect(pm.response.code).to.equal(200);
// Проверка времени ответа
pm.expect(pm.response.responseTime).to.be.below(1000);
// Проверка Content-Type
pm.expect(pm.response.headers.get("Content-Type"))
.to.contain("application/xml");
// Проверка корневой ноды
const root = Object.keys(responseJson)[0];
pm.expect(root).to.equal('users');
// Проверка наличия обязательных элементов
pm.expect(responseJson.users).to.have.property('user');
pm.expect(responseJson.users.user).to.be.an('array');
// Проверка количества пользователей
pm.expect(responseJson.users.user).to.have.lengthOf(3);
// Проверка каждого пользователя
responseJson.users.user.forEach((user, index) => {
pm.test(`Проверка пользователя ${index + 1}`, () => {
// Проверка обязательных полей
pm.expect(user).to.have.property('id');
pm.expect(user).to.have.property('name');
pm.expect(user).to.have.property('email');
// Проверка типов данных
pm.expect(user.id).to.be.a('string');
pm.expect(user.name).to.be.a('string');
pm.expect(user.email).to.be.a('string');
// Проверка форматов
pm.expect(user.id).to.match(/^\d+$/);
pm.expect(user.email).to.match(/^^@\s+@^@\s+\.^@\s+$/);
// Проверка бизнес-логики
pm.expect(user.name).to.not.be.empty;
pm.expect(user.email).to.not.be.empty;
});
});
// Дополнительная проверка атрибутов
if (responseJson.users.hasOwnProperty('attributes')) {
pm.expect(responseJson.users.attributes.total).to.equal('3');
}
// Сохранение важных данных
pm.environment.set("totalUsers", responseJson.users.user.length);
console.log("Все проверки XML данных пройдены успешно");
} catch (error) {
console.error("Ошибка при проверке XML данных:", error.message);
pm.expect.fail("Тест не пройден: " + error.message);
}
});
pm.test("Проверка XML ответа", function () {
try {
// Получаем и преобразуем ответ
const responseJson = xml2Json(pm.response.text());
// Базовые проверки
pm.expect(responseJson).to.exist;
pm.expect(responseJson).to.be.an('object');
// Проверка конкретных полей
pm.expect(responseJson.user.id).to.be.a('string');
pm.expect(responseJson.user.name).to.be.a('string');
pm.expect(responseJson.user.name).to.not.be.empty;
// Сохранение значений
pm.environment.set("userId", responseJson.user.id);
console.log("XML ответ успешно обработан");
} catch (error) {
console.error("Ошибка:", error.message);
pm.expect.fail("Не удалось обработать XML ответ");
}
});
pm.test("Комплексная проверка CSV ответа", function () {
try {
// Получаем и парсим CSV данные
const responseJson = parse(pm.response.text(), {
delimiter: ',',
trim: true,
columns: true,
skip_empty_lines: true
});
// Проверка базового ответа
pm.expect(responseJson).to.exist;
pm.expect(responseJson).to.be.an('array');
// Проверка HTTP статуса
pm.expect(pm.response.code).to.equal(200);
// Проверка времени ответа
pm.expect(pm.response.responseTime).to.be.below(1000);
// Проверка Content-Type
pm.expect(pm.response.headers.get("Content-Type"))
.to.contain("text/csv");
// Проверка количества записей
pm.expect(responseJson).to.have.lengthOf(3);
// Проверка заголовков
const headers = Object.keys(responseJson0);
pm.expect(headers).to.have.members(['id', 'name', 'age', 'email']);
// Проверка конкретных значений
responseJson.forEach((row, index) => {
pm.test(`Проверка записи ${index + 1}`, () => {
pm.expect(row.id).to.be.a('string');
pm.expect(row.id).to.match(/^\d+$/);
pm.expect(row.name).to.be.a('string');
pm.expect(row.name).to.not.be.empty;
pm.expect(row.age).to.be.a('string');
pm.expect(parseInt(row.age)).to.be.above(18);
pm.expect(row.email).to.be.a('string');
pm.expect(row.email).to.match(/^[^@\s]+@[^@\s]+\.[^@\s]+$/);
});
});
// Дополнительная бизнес-логика
const totalAge = responseJson.reduce((sum, row) => sum + parseInt(row.age), 0);
pm.expect(totalAge).to.be.above(70);
// Сохранение важных данных
pm.environment.set("totalRecords", responseJson.length);
pm.environment.set("averageAge", totalAge / responseJson.length);
console.log("Все проверки CSV данных пройдены успешно");
} catch (error) {
console.error("Ошибка при проверке CSV данных:", error.message);
pm.expect.fail("Тест не пройден: " + error.message);
}
});
pm.test("Проверка HTML ответа", function () {
try {
// Загружаем HTML
const $ = cheerio.load(pm.response.text());
// Базовая проверка ответа
pm.expect(pm.response.code).to.equal(200);
pm.expect(pm.response.responseTime).to.be.below(1000);
pm.expect(pm.response.headers.get("Content-Type"))
.to.contain("text/html");
// Проверка наличия основных элементов
pm.test("Проверка заголовка страницы", () => {
const title = $('title').text();
pm.expect(title).to.equal('Главная страница');
});
pm.test("Проверка навигационного меню", () => {
const navItems = $('nav ul li').length;
pm.expect(navItems).to.equal(5);
});
// Проверка контента
pm.test("Проверка основного контента", () => {
const content = $('#main-content').text().trim();
pm.expect(content).to.contain('Добро пожаловать');
});
// Проверка форм
pm.test("Проверка формы входа", () => {
const form = $('#login-form');
pm.expect(form).to.exist;
pm.expect(form.find('input[name="username"]')).to.exist;
pm.expect(form.find('input[name="password"]')).to.exist;
pm.expect(form.find('button[type="submit"]')).to.exist;
});
// Проверка атрибутов
pm.test("Проверка ссылок", () => {
const links = $('a');
links.each((index, link) => {
const href = $(link).attr('href');
pm.expect(href).to.not.equal('#');
pm.expect(href).to.match(/^https:\/\//);
});
});
// Сохранение важных данных
const currentUser = $('#user-info .username').text();
pm.environment.set("currentUser", currentUser);
console.log("Все проверки HTML пройдены успешно");
} catch (error) {
console.error("Ошибка при проверке HTML:", error.message);
pm.expect.fail("Тест не пройден: " + error.message);
}
});
Комментариев нет:
Отправить комментарий