Ответы пользователя по тегу PHPUnit
  • Как тестировать запросы к API?

    lxsmkv
    @lxsmkv
    Test automation engineer
    Сначала нужно понять какую информацию мы пытаемся получить от теста, на какой вопрос он должен отвечать. Потом решаем необходимые границы охвата. Будет это приемочный / end-to-end тест, на работающем экземпляре приложения, либо это будет "сухой" юнит или интеграционный тест. Затем думаем как такой тест можно реализовать.

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

    Когда ход действий ясен, приступаем к исследованию доступных подсказок. Тут все как обычно.
    Первое - смотрим как устроены остальные тесты на проекте, может там будет подсказка.
    Второе - смотрим раздел о тестировании той библиотеки или фреймворка который используется.
    Третье - беззастенчиво пользуемся опытом других людей с помощью поисковой машины. Думаю по запросу "Laravel API Testing" много чего можно будет найти. Или по запросу "PHP Mock Server"
    Ответ написан
    Комментировать
  • Как писать тесты?

    lxsmkv
    @lxsmkv
    Test automation engineer
    Тесты нужны для автоматического получения информации о состоянии продукта. Если у вас нет вопросов, т.е. вы во всем уверены, то и тесты как бы не нужны (ирония). Вы ведь каждый день перед тем как сесть за руль смотрите не сдулись ли колеса? Смотрите на уровень бензина. Слушаете как работает мотор на холостом ходу. Проверять работают ли светофоры не нужно, вы на них не можете повлиять. Проверять есть ли пробки на дорогах нет смысла, вы на них не можете повлиять. А вот состояние вашего автомобиля, да. Так же и с ПО. А с чего начать - логично, с самых критичных вещей. Чем виднее и центральнее функция, тем важнее ее покрыть тестами.
    Ответ написан
    4 комментария
  • Как добиться независимости в тестах (phpunit)?

    lxsmkv
    @lxsmkv
    Test automation engineer
    я в основном делаю ui тесты и у меня некоторые тесты связаны друг с другом. конечное состояние первого теста является начальным сосотоянием следующего. Например первый тест "зайти в формуляр" а следующий за ним "ввести данные в первую строку" а затем тест "ввести данные во вторую строку" а потом "нажать на отправку данных" а потом "тест сообщения об отправке". Естественно если первый тест завалится, завалятся и все после него, хотя реальная проблема только одна. Единственный серьезный недостаток такого подхода, это возможное перекрытие ошибок. Т.е. в билде может сломаться заход в формуляр, и отображение сообщения об отправке. Вторая проблема будет перекрыта первой.
    Но меня устраивает такой подход по следующим соображениям.
    - Если что-то сломалось в приложение надо в первую очередь чинить приложение, а не писать тонны дополнительного тестировочного кода.
    - Тестировочный код тоже код, чем его больше тем больше вероятность сделать ошибку в нем.
    - Лучше потратить время на увеличение покрытие пользовательских сценариев, чем на создание красивой и каноничной автоматизации.
    - Зависимые тесты выполняются быстрее, (а у нас время тестирования билда во всех вариациях уже перевалило за 16 часов)
    - Чинить по одной ошибке за раз - хорошо, пытаясь починить сразу несколько можно сломать что-то еще.

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

    Но это все не по вашему вопросу. По вашему вопросу - да, писать тонны моков (не нужно). У меня например есть тесты которые проверяют как данные от железа передаются в api графического клиента. при проверке фунцкионала графического клиента, я опираюсь на корректную работу api графического клиента, поскольку им пользуюсь. Так же я опираюсь на корректную работу виджетов. И если какие-то условия не будут работать многие ui тесты посыплются. Мы найдем причину и устраним ее. Чтобы в таком случае падал только один тест, который специально сделан для нахождения этой ошибки, вам придется отвязать тестируемую компоненту от всех внешних зависимостей. Теоретически написав столько же кода сколько в самом приложении. Вы готовы к этому?

    P.S.: стоит добавить: наш тест-фреймворк выполняет тесты в алфавитном порядке и не поддерживает параллельное выполнение в принципе.
    Ответ написан
    Комментировать