Как стать автором
Обновить

Методология генерации случайных строк посредством регулярных выражений

Время на прочтение5 мин
Количество просмотров3.1K
Всего голосов 3: ↑3 и ↓0+3
Комментарии8

Комментарии 8

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

RegExr очень прост для описания того, что должно быть в строке и очень удобен для кода. Разработчик и тестировщик получают техническую документацию на функционал, где дано не регулярное выражение, а описание требования к полю.  После этого разработчик описывает эти требования регуляркой, а тестировщик описывает возможные кейсы своими RegExr. Реальный пример:
Требования к одному из полей — Только русские буквы и любое число в конце

Разработчик повесил на поле паттерн ^[А-Яа-яёЁ]+\d$

Тестировщик описал положительный кейс: ^[А-Яа-яёЁ]+([1-9]\d*|0)$  (Так как там должно быть именно число в конце. Числа не начинаются с 0, кроме 0)

и отрицательные кейсы:

^[^А-Яа-яёЁ][1-9]\d*$ (проверит можно ли ввести что-то кроме русских букв)

^[А-Яа-яёЁ]+0[1-9]+$ (проверит пропустит ли набор цифр)

^[А-Яа-яёЁ]+[^0-9]$ (проверит можно ли что-то передать кроме числа)

В итоге после тестирования стало понятно, что задача будет отправлена на доработку. 

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

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

Почему не использование библиотеки Hypothesis со стратегией from_regex?

Очень крутая библиотека, влюблены в нее, но она увы про другое и конкретно нам не подходит, так как используем свой фреймворк для запуска тестов. Стратегии генерируют не просто данные, а удобную композицию для тестовой функции, которую можно прогнать через PyTest. Можно конечно использовать стратегию как генератор, но это будет дольше и усложнит код.

(напомню, что символ ^ после открывающей скобки означает «кроме»)

Разве этот символ не означает что "строка начинается с " символа или последовательности после ^

Верно, но только в начале регулярного выражения, а после "[" любой символ "кроме".

Зарегистрируйтесь на Хабре, чтобы оставить комментарий