Не секрет, что в большинстве случаев автоматизация через UI – это регрессионное тестирование.
Ведь, очень сложно написать тест, и кликнуть на кнопку или прочитать значение текстового поля, которого еще не существует, которое еще не реализовано.
Мы автоматизируем уже готовый функционал, для того, чтобы в дальнейшем, тесты показывали нам изменения и сигнализировали о дальнейших регрессионных багах.
Но, как убедится в том, что проверки (Assert’ы) были сделаны правильно.
Например, у меня нередко возникают ситуации, когда я читаю значение не из того поля или не того элемента.
Например, в результате того, что в переменной с ожидаемым значением была пустая строка, а в ошибочно взятом элементе на странице – было пустое значение – мой тест прошел.
Когда идет проверка формы, очень велик соблазн накопипастить один и тот же механизм взятия значения, но для разных полей.
Иногда, я забываю заменить айдишник поля. Так что получается, что для одного поля значение считывается 2 раза, а для другого – ни разу.
Я пришел к выводу, что необходимо проверять каждую проверку.
Делаю я это так:
- Вначале пишу проверку: Assert.Same(actualValue, “Expected to fail!”)
Т.е, вместо значения expected вставляю некоторый мусор, который должен спровоцировать падение теста. – И надеюсь, что тест упадет. - Потом, беру actualValue из лога ошибки Assert и вставляю его на место expected значения.
- Прогоняю тест еще раз и ожидаю passed
Для сравнения массивов и хэшей(словарей) – использую похожую технику. Также, временно добавляю, удаляю и модифицирую некоторые элементы, чтобы спровоцировать падение.
Знаю о существовании, но так и не пришлось применить на практике:
- Библиотека ApprovalTests – позволяет валидировать и апрувать (одобрять) результаты тестов руками, при помощи инструмента сравнивания текста и сохранять эти апрувы для дальнейших проходов.
- Мутационное тестирование – суть в том, что байт-код уже скомпилированного приложения, внедряются так называемые мутации: true заменяется в некоторых местах на false, знак больше – на меньше, число 42 на 43. И тому подобное. После, запускаются тесты, которые эти мутации должны выявить, т.е. – упасть.
Мне бы хотелось попробовать мутационное тестирование, но, пока нет времени на эксперимент.
А как вы тестируете ваши тесты?