🤖 Академия QA-автоматизации
← Основы QA-автоматизации: курс для начинающих
Этап 5. Первые шаги в автоматизации: идеи и принципы

Как работает скрипт автоматизации: разбираем готовый тест на примере без написания кода


Зачем вам это знать?

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

Скрипт автоматизации в тестировании — это та же самая «программа-сканер». Он выполняет проверки вместо человека: открывает сайт, нажимает кнопки, вводит текст и смотрит, всё ли работает правильно.

Но как именно он это делает? Из каких частей состоит? Этот урок отвечает на эти вопросы — и главное, без написания кода с нуля. Мы возьмём уже готовый тест и разберём его по кусочкам, как разбирают механизм часов, чтобы понять, что внутри.


Теория: что такое скрипт и из чего он состоит

Что такое скрипт?

Скрипт (от английского script — сценарий) — это набор инструкций, записанных в файл, которые компьютер выполняет по очереди сверху вниз. Думайте о скрипте как о рецепте в кулинарной книге: в нём написано «сначала вскипяти воду, потом добавь макароны, потом посоли» — и повар делает всё строго по рецепту.

Скрипт автоматизации тестирования — это такой же рецепт, только вместо повара — компьютер, а вместо блюда — проверка работы программы или сайта.


Из каких частей состоит тест-скрипт?

Любой скрипт автоматизации, независимо от языка программирования, содержит три обязательных блока. Их иногда называют AAA-структурой (это устоявшееся профессиональное сокращение):

Блок Английское название Что происходит
Подготовка Arrange Готовим всё необходимое для теста
Действие Act Выполняем то, что хотим проверить
Проверка Assert Сравниваем результат с ожидаемым

Давайте разберём каждый блок подробно.


Блок 1. Подготовка (Arrange)

Прежде чем начать проверку, нужно подготовить «рабочее место». Например:

  • открыть браузер,
  • перейти на нужную страницу сайта,
  • войти в аккаунт,
  • создать тестового пользователя.

Аналогия: перед тем как проверить, правильно ли работает весы в магазине, вы их включаете и устанавливаете на ноль. Это и есть подготовка.


Блок 2. Действие (Act)

Здесь скрипт выполняет конкретное действие, которое мы тестируем. Например:

  • нажать кнопку «Войти»,
  • ввести логин и пароль,
  • добавить товар в корзину.

Аналогия: вы кладёте на весы гирю в 1 кг — это ваше «действие».


Блок 3. Проверка (Assert)

Assert (ассёрт) — это слово из профессионального словаря тестировщиков. По-русски его переводят как «утверждение» или «проверка-утверждение». Скрипт как бы «утверждает»: «Я ожидаю, что на экране будет вот это». Если утверждение оказывается верным — тест проходит (статус PASS). Если нет — тест падает (статус FAIL), и нам сообщают об ошибке.

Аналогия: вы смотрите на весы и проверяете: показывают ли они ровно 1 кг? Если показывают 1,5 кг — весы сломаны, тест «упал».


Что такое локатор?

Чтобы нажать кнопку на сайте, скрипту нужно её найти. Для этого используется локатор — уникальный «адрес» элемента на странице. Представьте, что веб-страница — это многоквартирный дом. Локатор — это номер квартиры: «3-й этаж, квартира 47». Без этого адреса скрипт не знает, куда «нажать».

Локаторы бывают разными. Самые распространённые:

  • ID — как паспортный номер, уникален для каждого элемента (кнопка_войти)
  • текст — скрипт ищет элемент по надписи на нём («Войти», «Купить»)
  • CSS-selector и XPath — более сложные адреса (о них — в следующих уроках)

Что такое ожидаемый и фактический результат?

Это два ключевых понятия:

  • Ожидаемый результат — то, что должно произойти по логике. Например: «После ввода правильного пароля пользователь должен попасть на главную страницу».
  • Фактический результат — то, что произошло на самом деле. Например: «Пользователь остался на странице входа и увидел сообщение об ошибке».

Когда ожидаемый и фактический результаты не совпадают — это баг (ошибка в программе). Работа скрипта и состоит в том, чтобы сравнивать эти два результата автоматически.


Как скрипт «разговаривает» с браузером?

Один из самых популярных инструментов автоматизации — Selenium (Селениум). Это библиотека (готовый набор команд), которая позволяет скрипту управлять браузером: открывать страницы, кликать, печатать текст, читать содержимое.

Другой популярный инструмент — Playwright (Плейрайт). Он работает похожим образом, но считается более современным.

Думайте об этих инструментах как о «руках» скрипта: именно через них скрипт физически взаимодействует с браузером так, как это делал бы человек.


Разбираем готовый тест по шагам

Теперь посмотрим на реальный скрипт. Мы используем язык Python (Питон) и библиотеку Selenium — это один из самых распространённых вариантов в индустрии. Вам не нужно уметь писать этот код — нужно только понять, что каждая строка делает.

Задача теста: проверить, что пользователь может успешно войти на сайт с правильным логином и паролем.

# ===== ПОДГОТОВКА (Arrange) =====

# Импортируем инструменты — это как достать нужные книги с полки перед работой
from selenium import webdriver
from selenium.webdriver.common.by import By
import time

# Создаём "водителя браузера" — он будет управлять Chrome вместо нас
driver = webdriver.Chrome()

# Открываем сайт — как ввести адрес в адресной строке браузера
driver.get("https://example-shop.ru/login")

# Делаем паузу 2 секунды, чтобы страница успела загрузиться
time.sleep(2)


# ===== ДЕЙСТВИЕ (Act) =====

# Находим поле "Логин" по его ID и вводим туда текст
login_field = driver.find_element(By.ID, "username")
login_field.send_keys("[email protected]")

# Находим поле "Пароль" по его ID и вводим пароль
password_field = driver.find_element(By.ID, "password")
password_field.send_keys("MySecurePassword123")

# Находим кнопку "Войти" и нажимаем на неё
login_button = driver.find_element(By.ID, "login-button")
login_button.click()

# Ждём, пока загрузится следующая страница
time.sleep(2)


# ===== ПРОВЕРКА (Assert) =====

# Читаем заголовок страницы, на которой оказались после входа
# page_title — это переменная, она хранит текст как в "ящике с именем"
page_title = driver.title

# Ожидаемый результат: заголовок страницы должен содержать слово "Личный кабинет"
expected_text = "Личный кабинет"

# Сравниваем ожидаемое с фактическим
if expected_text in page_title:
    print("✅ ТЕСТ ПРОЙДЕН: пользователь успешно вошёл в систему")
else:
    print(f"❌ ТЕСТ ПРОВАЛЕН: ожидали '{expected_text}', получили '{page_title}'")


# ===== ЗАВЕРШЕНИЕ =====

# Закрываем браузер — убираем за собой
driver.quit()

Разбираем каждую часть

Строки 1–11: Подготовка

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

import (импорт) — команда «возьми инструмент с полки». Мы говорим скрипту: «подключи библиотеку Selenium, нам понадобятся её инструменты».

driver = webdriver.Chrome()

driver — это «водитель» браузера. Переменная driver хранит управление над браузером Chrome. Отныне все команды вида driver.что-то — это инструкции для браузера.

driver.get("https://example-shop.ru/login")

Браузер открывает указанный адрес — точно так же, как вы вводите URL в адресную строку.


Строки 14–25: Действие

login_field = driver.find_element(By.ID, "username")
login_field.send_keys("[email protected]")

Разберём по словам:

  • find_element — «найди элемент на странице»
  • By.ID, "username" — «ищи по ID, имя которого — username»
  • send_keys — «напечатай вот этот текст в найденном поле»

Аналогия: это как сказать роботу «найди на столе тарелку с надписью "суп" и положи в неё ложку».

login_button.click()

click() — нажать на элемент. Просто и понятно.


Строки 28–37: Проверка

page_title = driver.title

driver.title — читает заголовок текущей страницы браузера (то, что написано во вкладке).

if expected_text in page_title:
    print("✅ ТЕСТ ПРОЙДЕН...")
else:
    print(f"❌ ТЕСТ ПРОВАЛЕН...")

if...else — это условие: «если верно одно — делай это, иначе — делай другое». Здесь скрипт сравнивает ожидаемый текст с тем, что реально появилось на экране, и выводит результат.


Строка 41: Завершение

driver.quit()

Закрывает браузер. Хороший тест всегда «убирает за собой» — закрывает то, что открыл.


Как выглядит результат запуска?

Если всё работает правильно, в консоли (окне вывода) вы увидите:

✅ ТЕСТ ПРОЙДЕН: пользователь успешно вошёл в систему

Если на сайте есть баг (например, вход не работает):

❌ ТЕСТ ПРОВАЛЕН: ожидали 'Личный кабинет', получили 'Ошибка авторизации | Example Shop'

Это и есть суть работы автотеста — он чётко говорит: «Я ожидал вот это, а получил вот это».


Схема работы скрипта целиком

Чтобы закрепить понимание, вот весь процесс в виде схемы:

┌─────────────────────────────────────────────────────────┐
│                   ЗАПУСК ТЕСТА                          │
└──────────────────────────┬──────────────────────────────┘
                           │
                           ▼
┌─────────────────────────────────────────────────────────┐
│  ПОДГОТОВКА (Arrange)                                   │
│  • Открыть браузер                                      │
│  • Перейти на страницу входа                            │
└──────────────────────────┬──────────────────────────────┘
                           │
                           ▼
┌─────────────────────────────────────────────────────────┐
│  ДЕЙСТВИЕ (Act)                                         │
│  • Ввести логин                                         │
│  • Ввести пароль                                        │
│  • Нажать «Войти»                                       │
└──────────────────────────┬──────────────────────────────┘
                           │
                           ▼
┌─────────────────────────────────────────────────────────┐
│  ПРОВЕРКА (Assert)                                      │
│  • Прочитать заголовок страницы                         │
│  • Сравнить с ожидаемым текстом                         │
└──────────────────────────┬──────────────────────────────┘
                           │
               ┌───────────┴───────────┐
               ▼                       ▼
        Совпадает?                Не совпадает?
           │                          │
           ▼                          ▼
      ✅ PASS                    ❌ FAIL
   (тест пройден)           (тест провален,
                             есть баг!)

Практика

Эти упражнения не требуют установки программ или написания кода. Они помогут закрепить понимание того, как работает скрипт.


Упражнение 1. Разложи тест на блоки

Прочитайте описание ручного теста ниже и разложите каждый шаг по блокам: Подготовка, Действие, Проверка.

Описание теста:

Тестировщик хочет проверить, что функция поиска на сайте интернет-магазина работает. Он открывает браузер и переходит на главную страницу магазина. Затем он вводит слово «наушники» в строку поиска и нажимает Enter. После этого он смотрит на страницу с результатами и проверяет, что заголовок страницы содержит слово «наушники», а список товаров не пустой.

Запишите ответ в такой форме:

Подготовка:  [ваш ответ]
Действие:    [ваш ответ]
Проверка:    [ваш ответ]

Подсказка: Подготовка — это то, что нужно сделать ДО начала теста. Действие — это то, что именно тестируем. Проверка — это то, как убеждаемся, что всё сработало правильно.


Упражнение 2. Найди ожидаемый и фактический результат

Прочитайте отчёт об упавшем тесте и ответьте на вопросы:

Отчёт:

Тест «Добавление товара в корзину» провален.
Ожидалось: счётчик корзины в правом верхнем углу должен показывать «1».
Получено: счётчик корзины показывает «0».

Вопросы:

  1. Что является ожидаемым результатом?
  2. Что является фактическим результатом?
  3. Есть ли здесь баг? Если да — опишите его своими словами.
  4. На каком блоке (Подготовка / Действие / Проверка) тест обнаружил проблему?

Упражнение 3. Читаем псевдокод

Ниже написан псевдокод (псевдокод — это запись логики программы обычными словами, без настоящего языка программирования). Прочитайте его и ответьте на вопросы.

НАЧАЛО ТЕСТА: "Проверка регистрации нового пользователя"

ПОДГОТОВКА:
  открыть браузер
  перейти на страницу "https://my-app.ru/register"

ДЕЙСТВИЕ:
  ввести в поле "Имя" значение "Анна"
  ввести в поле "Email" значение "[email protected]"
  ввести в поле "Пароль" значение "Pass1234!"
  нажать кнопку "Зарегистрироваться"
  подождать 3 секунды

ПРОВЕРКА:
  прочитать текст на странице
  если текст содержит "Регистрация успешна":
    вывести "ТЕСТ ПРОЙДЕН"
  иначе:
    вывести "ТЕСТ ПРОВАЛЕН"

ЗАВЕРШЕНИЕ:
  закрыть браузер

КОНЕЦ ТЕСТА

Вопросы:

  1. Что именно тестирует этот скрипт?
  2. Зачем нужна команда «подождать 3 секунды»?
  3. Что произойдёт, если после нажатия кнопки сайт покажет текст «Пользователь с таким email уже существует»?
  4. Предложите ещё одну проверку, которую можно было бы добавить в блок ПРОВЕРКА.

Упражнение 4. Составь псевдокод самостоятельно

Используя структуру из упражнения 3, напишите псевдокод для следующего теста:

Задание: Проверить, что на странице «Контакты» сайта отображается номер телефона.

Вам нужно описать:

  • что подготовить,
  • какое действие выполнить,
  • что проверить.

Пишите своими словами, никакой синтаксис не требуется — главное, чтобы была логика трёх блоков.


Ключевые выводы

  • Скрипт автоматизации — это набор инструкций, которые компьютер выполняет вместо тестировщика-человека.
  • Любой тест-скрипт состоит из трёх блоков: Подготовка (Arrange)Действие (Act)Проверка (Assert). Запомните аббревиатуру AAA.
  • Assert (проверка-утверждение) — это сердце теста: именно здесь скрипт сравнивает ожидаемый результат с фактическим.
  • Если ожидаемый и фактический результаты совпадают — тест получает статус PASS. Если нет — FAIL, что сигнализирует о баге.
  • Локатор — это «адрес» элемента на странице (кнопки, поля, ссылки), по которому скрипт находит нужный элемент.
  • Инструменты Selenium и Playwright — это «руки» скрипта, которые позволяют ему управлять браузером.
  • Понять логику готового теста важнее, чем уметь написать его с нуля — особенно на старте.
  • Даже не зная языка программирования, вы уже можете читать простые скрипты и понимать их структуру.

Rejoining the server...

Rejoin failed... trying again in seconds.

Failed to rejoin.
Please retry or reload the page.

The session has been paused by the server.

Failed to resume the session.
Please retry or reload the page.