Интеграционный тест с phpunit: как запросить ввод пользователя?

Я написал модульные тесты с phpunit для RESTful API.

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

bootstrap.php из интеграция testsuite выполняет дамп базы данных и заполнение. Интеграционные тесты довольно медленные, поэтому их будут вызывать не так часто, как модульные тесты. Им будут управлять только люди.

Чтобы предотвратить непреднамеренное удаление локальной базы данных разработки, я хочу, чтобы тестовый скрипт запросил подтверждение перед сбросом базы данных. Только в случае подтверждения база данных будет удалена и повторно посеяна.

  1. Можно ли запросить ввод в тестах phpunit?
  2. Не повредит ли кто-нибудь «Принцип построения интеграционных испытаний »?

Спасибо.

2

Решение

Чтобы предотвратить непреднамеренное удаление локальной базы данных разработки, я хочу, чтобы тестовый скрипт запросил подтверждение перед сбросом базы данных. Только в случае подтверждения база данных будет удалена и повторно посеяна.

Основная подсказка может выглядеть так:

<?php

echo "Are you sure you want to drop the database?\n";
echo "Type 'yes' or 'y' to continue: ";

$handle = fopen("php://stdin","r"); // read from STDIN
$line = trim(fgets($handle));

if($line !== 'yes' && $line !== 'y'){
echo "Execution stop.\n";
exit;
}

echo "\n Continuing execution: dropping database.\n";

Можно ли запросить ввод в тестах phpunit?

Да, это возможно, но остерегайтесь возможного тайм-аута.

Повреждает ли подсказка какой-либо «принцип разработки интеграционных тестов»?

Запрос на ввод пользовательских данных («запрос на ввод данных») во время ваших тестов будет указывать на очень плохое состояние автоматизации. Это показатель того, что ваши тесты не готовы к полной автоматизации.

Это приглашение «защита от несчастного случая» во время настройки теста или на этапе начальной загрузки, и в этом нет необходимости в штучной или изолированной среде тестирования.

Лучше стремиться к полной автоматизации тестирования и использовать сервер Continuous Integration для выполнения ваших функциональных и интеграционных тестов. (Точно так же, как @halfer указал ранее.)

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

Ну, есть определенные «шаблоны тестирования» или «лучшие практики».

  • Как (под) группировать ваши TestSuites, чтобы ускорить его с parallel выполнение.
  • Избегайте выполнения тестов «будут выполняться только людьми»! Лучше: «выполняется полностью автоматизировано» и / или «выполняется автоматически в 1 из 10 тестовых прогонов».
  • Запрос данных в тесте — это «Блокировка запуска теста».
  • Подсказка, основанная на env или константе и запущенная во время тестовой начальной загрузки, в порядке.
3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]