Комментарии 8
Так и не понял зачем генерировать случайную строку, которая гарантированно проходит проверку по регулярке. Это вы так тестовые данные готовите, чтобы тесты никогда не падали?
RegExr очень прост для описания того, что должно быть в строке и очень удобен для кода. Разработчик и тестировщик получают техническую документацию на функционал, где дано не регулярное выражение, а описание требования к полю. После этого разработчик описывает эти требования регуляркой, а тестировщик описывает возможные кейсы своими RegExr. Реальный пример:
Требования к одному из полей — Только русские буквы и любое число в конце
Разработчик повесил на поле паттерн ^[А-Яа-яёЁ]+\d$
Тестировщик описал положительный кейс: ^[А-Яа-яёЁ]+([1-9]\d*|0)$ (Так как там должно быть именно число в конце. Числа не начинаются с 0, кроме 0)
и отрицательные кейсы:
^[^А-Яа-яёЁ][1-9]\d*$ (проверит можно ли ввести что-то кроме русских букв)
^[А-Яа-яёЁ]+0[1-9]+$ (проверит пропустит ли набор цифр)
^[А-Яа-яёЁ]+[^0-9]$ (проверит можно ли что-то передать кроме числа)
В итоге после тестирования стало понятно, что задача будет отправлена на доработку.
Если у вас даже тестировщик пишет регулярки ввиду того, что ими крайне просто описывать , то зачем их вообще тестировать? Или вы сам движок регекспов тестируете?
Почему не использование библиотеки Hypothesis со стратегией from_regex?
Очень крутая библиотека, влюблены в нее, но она увы про другое и конкретно нам не подходит, так как используем свой фреймворк для запуска тестов. Стратегии генерируют не просто данные, а удобную композицию для тестовой функции, которую можно прогнать через PyTest. Можно конечно использовать стратегию как генератор, но это будет дольше и усложнит код.
(напомню, что символ ^ после открывающей скобки означает «кроме»)
Разве этот символ не означает что "строка начинается с " символа или последовательности после ^
Методология генерации случайных строк посредством регулярных выражений