Ответ
Виды тестирования классифицируются по цели проверки:
- Функциональное: Проверяет, что система делает (соответствие функциональным требованиям).
- Пример (проверка логина):
# pytest def test_login_with_valid_credentials(): result = login(username="test_user", password="correct_pass") assert result.is_successful() == True assert result.get_session() is not None
- Пример (проверка логина):
- Нефункциональное: Проверяет, как система работает (качества).
- Нагрузочное (Performance): Проверка под нагрузкой.
- Тестирование безопасности (Security).
- Юзабилити-тестирование.
Типы тестирования классифицируются по способу/уровню проведения:
- По уровню (Test Levels):
- Модульное (Unit): Тестирование отдельных функций/классов.
// Jest test('sum function adds numbers', () => { expect(sum(1, 2)).toBe(3); }); - Интеграционное: Тестирование взаимодействия модулей/сервисов.
# Интеграционный тест API def test_create_order_flow(): user_id = create_test_user() # Модуль A item_id = add_item_to_catalog() # Модуль B order = place_order(user_id, item_id) # Интеграция A и B assert order.status == "PAID" - Системное (End-to-End, E2E): Тестирование всей системы как единого целого.
- Модульное (Unit): Тестирование отдельных функций/классов.
- По доступу к коду:
- "Белый ящик" (White-box): С знанием внутренней реализации.
- "Черный ящик" (Black-box): Без знания реализации, только по спецификации.
- "Серый ящик" (Gray-box): Частичное знание (например, структура БД).
Итог: Вид отвечает на вопрос "что тестируем?" (функцию или качество), а тип — "как и на каком уровне?" (модуль, интеграция, E2E).
Ответ 18+ 🔞
А, ну вот, классика жанра, блядь! Сидишь такой, думаешь: «Щас всё по полочкам разложу, как умный». А потом бац — и путаница в терминах, хуй с горы, ёпта! Давай разберём эту всю хуйню, чтобы не было как в том анекдоте про Герасима, который «Муму» говорит, а ему — «утопить в пизду».
Смотри, есть, условно, два главных вопроса. Первый: «ЧТО, блядь, мы проверяем?». Второй: «КАК, сука, и НА КАКОМ УРОВНЕ мы это делаем?».
1. ВИДЫ (ЧТО проверяем?)
Тут всё просто, как три копейки. Либо ты смотришь на функцию, либо на качество.
-
Функциональное (Что делает система?). Ну, тут всё ясно. Кнопка должна нажиматься, форма отправляться, данные сохраняться. Как в жизни: нажал «войти» с правильным паролем — зашёл, ебать мои старые костыли. Нажал с левым — получил по ебалу ошибкой.
# pytest def test_login_with_valid_credentials(): result = login(username="test_user", password="correct_pass") assert result.is_successful() == True # Должно быть True, иначе пиздец assert result.get_session() is not None -
Нефункциональное (КАК она это делает?). А вот это уже интереснее. Функция-то работает, а вот как — вопрос. Это как машина: едет-то она едет, но если со скоростью 20 км/ч глохнет, а пароль в базе лежит открытым текстом — это пиздопроебибна, а не система.
- Нагрузочное: А выдержит ли она, когда на неё навалится овердохуища народу? Не ляжет ли, как сука, в самый ответственный момент?
- Безопасность: А не проёбываем ли мы данные налево и направо? Нельзя же доверять пользователям, они же все — потенциальные пидарасы шерстяные.
- Юзабилити: А удобно ли этой хренью пользоваться, или интерфейс спроектировал манда с ушами?
2. ТИПЫ (КАК и НА КАКОМ УРОВНЕ проверяем?)
А вот тут начинается матч-реванш между «мелко» и «крупно».
-
По уровню (Test Levels):
- Модульное (Unit). Это когда ты выковыриваешь одну маленькую функцию, изолируешь её от всего мира и начинаешь долбить со всех сторон. Типа, «а вдруг она, сука, сломается?».
// Jest test('sum function adds numbers', () => { expect(sum(1, 2)).toBe(3); // Не 3? Ну всё, пизда функции. }); - Интеграционное. А вот тут уже начинается веселье. Ты соединяешь две или больше этих самых функций/модулей/сервисов и смотришь, как они друг друга ебут. Один данные отдаёт, другой принимает, третий записывает. Главное — чтобы по цепочке не пошла хуйня.
# Интеграционный тест API def test_create_order_flow(): user_id = create_test_user() # Модуль A (пользователи) item_id = add_item_to_catalog() # Модуль B (каталог) order = place_order(user_id, item_id) # А вот тут они встречаются, блядь! assert order.status == "PAID" # И если статус не "PAID" — волнение ебать, всё просрали. - Системное (E2E). Это апофеоз, ёперный театр! Ты садишься за комп, открываешь браузер (или мобилу) и проходишь ВЕСЬ путь, как настоящий пользователь: регистрация, выбор товара, оплата, получение чека. Если тут всё работает — можно выдохнуть. Но ненадолго, потому что обычно это долго и хрупко, как хуй в пальто.
- Модульное (Unit). Это когда ты выковыриваешь одну маленькую функцию, изолируешь её от всего мира и начинаешь долбить со всех сторон. Типа, «а вдруг она, сука, сломается?».
-
По доступу к коду (Какой у тебя план, Фокс?):
- «Белый ящик»: Ты, блядь, архитектор. Ты знаешь ВСЁ: каждый if, каждый for, каждую переменную. Тестируешь с умным видом, заглядывая в кишки.
- «Чёрный ящик»: Ты — пользователь, хитрая жопа. Тебе похуй, как там внутри циклы бегают. Ты даёшь на вход — смотришь на выход. Не совпало? Баг, нахуй!
- «Серый ящик»: Ты — полупидор. Немного знаешь (например, схему базы данных), но не всё. Используешь это знание, чтобы бить точно в больные места.
Итог, Колян, блядь:
Вид — это ЧТО (функция или качество).
Тип — это КАК (долбим по одному модулю, проверяем их стыковку или гоняем всю систему целиком) и С КАКИМИ ЗНАНИЯМИ (в кишках ковыряемся или снаружи плюём).
Запомни это, а то будешь как тот Герасим: «Муму» говорить, а тебе в ответ — «интеграционное нагрузочное тестирование, блядь».