Ответы пользователя по тегу Разработка через тестирование
  • Что такое TDD и для чего применяется?

    lxsmkv
    @lxsmkv
    Test automation engineer
    Я формулирую так "В TDD ты сначала спрашиваешь себя как я буду это проверять, а потом приступаешь к работе". Должен сказать, этот вопрос настолько очевидный и простой, что странно что разработчики часто не задаются им. Я как тестировщик знаю, что ничего не знаю и мне легко думать из этой перспективы. Я не уверен ни в чем, поэтому проверять гипотезу для меня - норма. Я не знаю как работает мой код, я только могу предполагать. Написав тест, ты явно формулируешь свои ожидания. Это мыслительный процесс. Это часть инженерной работы.

    Вы когда холодильник покупаете тоже сперва мерки берете, заранее, приходите с ними в магазин, смотрите ширину двери, в какую сторону она открывается, чтобы она открывалась полностью. Чтобы шнура хватало до розетки. Считаете поворотные углы, чтобы вы могли его пронести по лестнице и через дверные проемы, и развернуть при установке.
    Многие так не делают - просто покупают и с помощью "лома и какой-то матери" впяливают это себе в кухню.
    Кажется дебильно? Так порой делается разработка. Фигачим, а там посмотрим. Мы же мастера на все руки, для нас нет непосильных задач. Зачем думать - мы же опытные, не первый холодильник авось устанавливаем.

    Сначала думай потом делай. Семь раз отмерь - один раз отрежь. Это все об этом.
    Ответ написан
    Комментировать
  • Можно ли описывать негативные тесты при помощи Gherkin?

    lxsmkv
    @lxsmkv
    Test automation engineer
    Негативные тесты это проверка на то, что приложение справляется с непредусмотренными ситуациями ожидаемым образом.

    Позитивный тест
    Дано: первое слагаемое равно 1
    и дано: второе слагаемое равно 3
    если мы производим операцию сложения данных чисел
    тогдарезультат будет равен 4

    Вот несколько примеров негативных тестов

    Дано: первое слагаемое равно 1.0
    и дано: второе слагаемое равно 3
    если: мы производим операцию сложения данных чисел
    тогда: будет выведена ошибка несоответствия числовых типов

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

    В общей форме это выглядит так:
    Дано: какая-то фигня
    если: я делаю какую-то дичь
    и если: я делаю какую-то ерунду
    тогда: приложение делает так
    и тогда: приложение делает эдак.

    Автоматизировать сложнее может быть да, как в примере с записью в журнал ошибок, но не невозможно.
    Ответ написан
    1 комментарий
  • Как написать тест на выявление ошибки в асинхронной функции?

    lxsmkv
    @lxsmkv
    Test automation engineer
    В чем именно вы хотите убедиться? Какой тип ошибки вы хотите поймать? По определению асинхронная функция совершенно законно может вернуть ошибку если промис не был выполнен в заданный промежуток времени. Тут тест по моему опыту бесполезен.
    T.e. нужно спросить себя "какую полезную информацию я получу если этот тест упадет?". Никакой - ваш "невод" может законно вернуться с "тиной морскою". Это природа промиса.
    Другое дело если вы хотите убедиться в том что не изменился path. Для этого нужен тест на путь. Вроде test_path_available

    Чтобы тест давал полезную информацию должно произойти что-то чего тест не ожидал. Например поменялся интефейс Application и функция load стала называться load_path. Тогда ваш тест отвалится и вы заметите изменение. Проверять что вы получите отказ если вы можете получить отказ - бессмысленно.
    Простите что три раза об одном и том же разными словами, но это важный момент при дизайне тестов.
    Опять же если вы хотите проверить за какое время вы получаете ответ - это имеет смысл, но это область нагрузочного тестирования.
    Ответ написан
    6 комментариев
  • Какой оптимальный (время написания тестов/эффективность) вариант тестирования веб-апи?

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

    Давайте разберем на примере: представьте вы тестируете инсталляцию системы пожарной безопасности в секретной лаборатории. Доступ в помещение только по электронной карте. Внутри помещения есть кнопка включения сигнализации, при срабатывании которой должны закрыться все окна в помещении и должен быть разблокирован замок двери.
    Вы тестируете замок двери отдельно. А для теста сигнализации и срабатывания оконной механики вы отключаете систему входа по карточке, и делаете его свободным. потому что идентификация при входе в помещение не является предметом теста для системы сигнализации (закрывание окон). В этой точке достигается независимость тестов.
    Но отключив замок двери для теста, вы не сможете убедиться в том что замок открывается при срабатывании сигнализации (второе условие) . Вам придется непосредственно перед проверкой снова включить дверной замок.

    Однако в случае если при тестировании входа выяснится что дверной замок не работает, то включить дверной замок для теста не получится, и второй тест скажет что мол замок двери открылся, все хорошо, однако на самом деле замок был все время открыт, потому что неработал. (т.н. false positive)
    Ответ написан
    6 комментариев
  • Как называется такой подход к разработке, тестировани и баг-фиксу?

    lxsmkv
    @lxsmkv
    Test automation engineer
    Спонтанное, не систематизированное "протыкивание" программы с целью нахождения дефектов называется ad-hoc testing
    Ответ написан
    Комментировать
  • С чего начать изучение на должность QA автоматизатора?

    lxsmkv
    @lxsmkv
    Test automation engineer
    В автоматизации тестирования два главных вопроса: что? и как?
    Как - это связано с инструментами и возможностями тестировочной среды.
    Что - это что именно мы хотим протестировать?
    Часто на вопрос "что" - порой ответить сложнее чем на "как".
    Вопрос "что" абсолютно важен чтобы писать действительно полезные тесты.
    Ответ написан
    Комментировать