Автоматические тесты

Автоматические тесты проверяют поведение и внешний вид приложения без участия человека: тест сам нажимает кнопки, вводит текст и сверяет, что на экране оказалось то, что нужно.

Внутри FlutterFlow генерирует код для фреймворка интеграционного тестирования Flutter — его можно выгрузить и прогонять локально или в сервисах вроде Firebase Test Lab.

внимание
Устаревший способ

Автоматические тесты считаются устаревшим механизмом. Для новых проектов используйте Test Pilot: сценарии там описываются обычным текстом, а проходит их ИИ-агент.

инфо
Сколько тестов даёт тариф
  • Free и Basic — автоматических тестов нет.
  • Growth1 тест на проект.
  • Businessдо 3 тестов на проект.
  • Enterprise — без ограничений.

Как устроен тест

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

Типы шагов

  1. Interact with Widget — действие над виджетом.
  2. Wait to Load (Pump & Settle) — пауза.
  3. Expect Result — проверка.

1. Interact with Widget

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

Тип действия
  • Tap — одиночное нажатие.
  • Double Tap — двойное нажатие.
  • Long Press — нажатие с удержанием.
  • Enter Text — ввод указанного текста.
  • Scroll Until Visible — прокрутка, пока виджет не окажется на экране. В Delta задаётся шаг прокрутки в пикселях; если прокручиваемых виджетов несколько, нужный выбирается в свойстве Scrollable.

2. Wait to Load (Pump & Settle)

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

Настройки:

  • Duration — сколько ждать; по умолчанию 100 мс.
  • Timeouts — предельное время ожидания, после которого тест падает.
совет
Как лучше
  • Начинайте тест с паузы примерно на 3 секунды (3000 мс).
  • После каждого шага «Interact with Widget» обычно нужна ещё одна пауза.

3. Expect Result

Проверка: после действия тест убеждается, что на экране получилось ожидаемое. Здесь нужно найти виджет и выбрать условие:

  • Find Nothing — виджета на экране нет.
  • Finds Num Widgets — виджетов ровно столько, сколько указано.
  • Finds One Widget — виджет ровно один.
  • Finds Widgets — виджетов несколько.
  • Is Enabled — виджет не только виден, но и работает.
  • Is Disabled — виджет отключён и на действия не отвечает.
  • Has State — виджет в определённом состоянии, True или False: например, отмечен ли флажок.

Как найти виджет

Способ указать тесту, с каким именно виджетом работать:

  • Select from UI Builder — выбрать виджет мышью прямо в редакторе.
  • Find By ValueKey — по уникальному ValueKey. Задать его можно в свойстве Value Key в разделе Testing панели свойств виджета.
  • Find By Type — по типу: Text, Button и так далее.
  • Find By Semantics Label — по метке доступности.
  • Find By Text — по тексту, который виджет показывает.
  • Find By Descendent — по конкретному потомку или родителю.

Добавление тестов

Разберём на примере: проверим, что товар добавляется в избранное и убирается оттуда.

  1. Первый тест проверяет, что нужная страница открылась.
  1. Дальше находим кнопку избранного по ValueKey, равному идентификатору товара, и нажимаем на неё. ValueKey здесь обязателен: без него тест найдёт на странице несколько одинаковых кнопок избранного, не поймёт, какую нажимать, и упадёт.
  1. Тест на удаление из избранного проще всего сделать копией первого. На последнем шаге (Expect Result) поставьте Expectations в Finds Nothing — так тест убедится, что товар из списка исчез.

Шаг Expect Result с условием Finds Nothing для теста удаления из избранного

Запуск тестов

Тесты можно прогонять на своих устройствах или в сервисах вроде Firebase Test Lab.

Локально:

  1. Выгрузите код проекта.
  2. Откройте your_project/integration_test/test.dart.
  3. Отдельный тест запускается кнопкой воспроизведения рядом с ним, все сразу — двойным щелчком по такой кнопке рядом с void main.
  4. Либо из терминала: flutter test integration_test/test.dart.
инфо

Запуск в Firebase Test Lab описан в документации Flutter.

перевод официальной документации FlutterFlow

обновлено

ESC