В чем разница между ручным и автоматизированным тестированием?

Ответ

Ручное тестирование выполняется человеком без использования скриптов. Автоматизированное тестирование выполняется специальными программами (скриптами) с минимальным вмешательством человека.

Аспект Ручное тестирование Автоматизированное тестирование
Исполнитель Тестировщик. Скрипт/инструмент (Selenium, Cypress, pytest).
Скорость Медленнее для повторяющихся задач. Быстрее для выполнения и перезапуска тестов.
Первоначальные затраты Низкие. Высокие (написание и поддержка скриптов).
Надежность Зависит от внимательности человека. Стабильна при корректных скриптах.
Лучшее применение Exploratory-тестирование, usability-тесты, Ad-hoc, тестирование UI/UX. Регрессионное, нагрузочное, повторяющиеся сценарии, тестирование API.

Пример автоматизированного теста на Python с Selenium WebDriver:

import pytest
from selenium import webdriver
from selenium.webdriver.common.by import By

@pytest.fixture
def browser():
    driver = webdriver.Chrome()
    yield driver
    driver.quit()

def test_search_functionality(browser):
    # 1. Открыть сайт
    browser.get("https://www.example.com")
    # 2. Найти поле поиска и ввести запрос
    search_box = browser.find_element(By.NAME, "q")
    search_box.send_keys("automated testing")
    search_box.submit()
    # 3. Проверить, что результаты найдены
    results = browser.find_elements(By.CSS_SELECTOR, "div.g")
    assert len(results) > 0
    # 4. Проверить наличие ожидаемого текста в результатах
    assert "automated testing" in browser.page_source

Ключевой вывод: Автоматизация не заменяет ручное тестирование, а дополняет его. Автоматизируйте стабильные, повторяющиеся сценарии, а исследовательское и usability-тестирование оставляйте людям.

Ответ 18+ 🔞

А, ну вот, опять про эту дихотомию, блядь, ручное против автоматического! Слушай, как будто мы на войне, а не софт тестируем. Ёпта, давайте разберём эту пизду, но по-человечески.

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

Второй путь — это когда ты эту обезьяну пытаешься заменить роботом. Называется автоматизированное тестирование. Ты пишешь скрипт, этот скрипт — тупой как пробка, но быстрый и неутомимый. Он будет долбить одно и то же действие десять тысяч раз, и ему не надоест. Но если что-то пойдёт не по плану, он просто сломается и будет молча смотреть в потолок, как манда с ушами.

Вот тебе табличка, чтобы не путаться, а то голова уже болит:

О чём речь Ручное (человек) Автоматическое (робот)
Кто делает Ты, тестировщик, герой. Скрипт (Selenium, Cypress, pytest — не важно, всё равно тупой).
Скорость Для повторок — медленно, как черепаха в сиропе. Для повторок — быстро, как хуй с горы.
Сколько стоит сначала Почти ничего, сел и пошёл кликать. Овердохуища времени и сил на написание.
Надёжность Как повезёт. Зависит от того, выспался ли ты. Как повезёт. Зависит от того, не сломал ли кто твой селектор.
Где лучше Где надо думать, исследовать, чувствовать интерфейс. Где надо долбить одно и то же: регресс, нагрузка, API.

А теперь смотри, как этот робот выглядит в коде. Не пугайся, это просто пример, блядь:

import pytest
from selenium import webdriver
from selenium.webdriver.common.by import By

@pytest.fixture
def browser():
    driver = webdriver.Chrome()
    yield driver
    driver.quit()

def test_search_functionality(browser):
    # 1. Открыть сайт
    browser.get("https://www.example.com")
    # 2. Найти поле поиска и ввести запрос
    search_box = browser.find_element(By.NAME, "q")
    search_box.send_keys("automated testing")
    search_box.submit()
    # 3. Проверить, что результаты найдены
    results = browser.find_elements(By.CSS_SELECTOR, "div.g")
    assert len(results) > 0
    # 4. Проверить наличие ожидаемого текста в результатах
    assert "automated testing" in browser.page_source

Видишь? Всё чётко, по шагам. Но если дизайнер возьмёт и переименует класс с "div.g" на "div.pizdets", то этот тест накроется медным тазом, и робот даже не пикнет, просто упадёт. А ты, живой человек, посмотрел бы и сказал: «Э, бошка, думай! Да тут же кнопка теперь зелёная!».

Так что главный вывод, ёпта: Автоматизация — это не священная корова, а просто инструмент. Не пытайся автоматизировать всё подряд, это путь в ад и бесконечную поддержку скриптов. Автоматизируй то, что стабильно и повторяется до тошноты. А всё, что требует ума, чутья и внезапных «а дай-ка я ткну сюда» — оставь себе, живому. Иначе заебёшься, в рот меня чих-пых.