Предлагаю обсудить в этой теме сабж с точки зрения тестировщиков :)
Интересно, где можно их применять.
Пока знаю два варианта:
1. для grep и скриптов в юниксе при работе с логами;
2. в JMeter можно обрабатывать полученные данные и их использовать.
Предлагаю обсудить в этой теме сабж с точки зрения тестировщиков :)
Интересно, где можно их применять.
Пока знаю два варианта:
1. для grep и скриптов в юниксе при работе с логами;
2. в JMeter можно обрабатывать полученные данные и их использовать.
И еще такой вопрос. Универсален ли синтаксис или может варьироваться в зависимости от места использования?
Когда-то находила сайты, на которых можно протестировать написанное выражение, с ходу не вспомню, может, кто-то может сразу поделиться полезными ссылочками? В JMeter можно проверить, но это не очень универсальный способ :)
которые мне задали
Как должно выглядеть рв если '[a-z]', но в тоже время [^(com)].
запрет на ноль, но если ноль и запетая с [1-9], то разрешить
http://myregexp.com/
очень помогли бы regex'ы в локаторах селениума (xpath) если бы они работали...
Awesome, thanks!
Мне доводилось парсить XML при помощи регулярных выражений. Дело было так: когда-то у нас был внутриконторский автотестовый тул, который имел и свой иксемельный лог. Я перекидывал данные из этого тула и ещё из разных мест тоже в нашу систему TCDB при помощи импорта XML в обычный ADO.NET DataSet. Но с некоторых пор программеры нашего тула оборзели и их XML стал слишком сложным и валил DataSet.
Переписывать мой тул на хождение по нодам мне не хотелось, поэтому я просто стал построчно считывать их XML и пропускать эти строки через выражение. И работало идеально (я поначалу боялся, но нет, всё получилось даже без багов). А вот в поиске контролов при тестировании десктопного приложения мы используем wildcard - и достаточно, и оператора (того, кто генерит или пишет тест) не напрягает.
Ну и, конечно, прекрасный поиск по регулярным выражениям в SharpDevelop (там и обычный поиск мне очень нравится). А с приходом в тестирование PowerShell несколько лет назад, использование регекспов стало просто плёвым делом.
круто, еще б пример кода парсанья скинули с реджекспами)
Итак, по порядку :)
1. Где можно их применять?
Имхо, сценарии использования РВ в автоматизации тестирования можно условно разделить на 2 группы:
А также не забываем про поддержку поиска с использованием РВ в Notepad++, Total Commander и др. приложениях.
2. Универсален ли синтаксис?
"Диалектов" регулярных выражений очень много, подробнее можно почитать здесь -- http://www.regular-expressions.info/refflavors.html
3. Онлайн сервисы для проверки РВ
Принимая во внимание разнообразие "диалектов", советую использовать сервисы "заточенные" под определенный язык, дабы избежать сюрпризов. Примеры:
4. Бонус :)
- валидация текстовых значений (т.е. проверить, что сообщение, дата, цена и т.п. соответствует заданному шаблону)
- извлечение нужной информации из текста (например, получение числовых значений из сообщения "Найдено X записей за Y секунд." или отдельных компонентов даты/времени из строки "31 May 2012, 9:00 PM")
А можно немного конкретнее, в каких именно форматах файлов/приложениях/инструментах можно это делать?
Можно, только оно в объектно-ориентированной манере: константы-паттерны сюда, выполняемый код туда. Правда, это будет пример "чисто посмотреть" - там идёт парсинг в зависимости от значений нескольких параметров (тест прошёл - значение, не прошёл - другое значение, некоторые ситуации - значение отсутствует). Поищу сегодня исходник.
Т.е. там две части (насколько я помню код трёх или четырёхлетней давности), одна часть просто читает файл построчно, вторая делает заключение по шаблону. Разумеется, ориентирован на строго определённые значения.
Кстати, никто не спросил, а я отвечу: кому надо освоить регекспы быстро и достаточно неплохо, книжка Бен Форта "Регулярные выражения за 10 минут". Написана супер, тонкая, стоит копейки. Я в своё время прорешал за короткое время восемь или девять глав из десяти, мне этого хватило для моих применений.
ну не работает для xpath, но можно вытащить текст по xpath, а потом средства языка программирования проверить его на регулярное выражение.
конечно, что это не полностью, что нужно, но тем неменее, так используется сейчас.
да, кстати, совсем забыл рассказть о PowerShell - это действительно мощный инструмент и там очень просто использовать регулярные выражения
Вероятно, мы не так поняли друг друга. Я написал о применении РВ в автоматизации тестирования, а в ней, по большому счету, все зависит не от "формата файла/приложения/инструмента", а от языка программирования, на котором вы пишете автотесты. Хотя, бывает и поддержка РВ на уровне тула, например, в QTP можно использовать РВ при описании свойств объекта в object repository.
Делать можно везде :)
примерчик на пауэршелл (просто находит строки в файле, самое простое применение):
Set-StrictMode -Version Latest
cls
# our test file (it doesn't exist now)
[string]$fileName = "c:\1\test.file.txt";
if (-not (Test-Path -Path "c:\1")) {
$null = New-Item -Path c:\ -ItemType directory -Name 1;
}
if (Test-Path -Path $fileName) {
Remove-Item -Path $fileName;
}
# our templates
[string]$template1 = "asdf"; # should return asdf
[string]$template2 = '(?=sadf).*'; # should return asdf from the same line
[string]$template3 = '[Ww][e]+?'; # should return two lines
# it would return four by default
# however, I'll use the -cmatch operator
# to indicate that it's case-sensitive
# let's create a file and feed it with letter sequences
"sadfasdf" >> $fileName
";lroiuykahsdf" >> $fileName
"5349579weqh" >> $fileName
"stgjwelkrtuiu" >> $fileName
"kljtu" >> $fileName
"stgjWelkrtuiu" >> $fileName
"stgjwElkrtuiu" >> $fileName
# read the file and parse the content
Get-Content -Path $fileName | %{
if ($_ -match $template1) {Write-Host "template 1: " + $_;}
if ($_ -match $template2) {Write-Host "template 2: " + $_;}
if ($_ -cmatch $template3) {Write-Host "template 3: " + $_;}
}
как в каких?
что то вроде:
Assert.That(Regex.IsMatch(driver.FindElement(By.Id("result-message")).Text, "You successfully bought \\d+ items"));
то есть когда нужно проверить не частичное наличие текста, а именно текст соотв. определенному формату
спасибо за ссылки и картинка в действительности правдивая, если знаешь, как быстро написать регулярные выражения.
помнию, первые разы я долго писал даже небольшие выражения, а сейчас как на рисунке :) почти супер-мен :)
проще юзать contains с таких случаях для String-ов )
С помощью contains вы проверите строку на наличие подстроки, а не на соответствие шаблону.
Вы бы еще предложили сделать split по пробелам и проверить по отдельности каждое слово из массива :)
На сборище начальников тестовых отделов было сказано: "Мы переходим на Boost. Нашли багу в дотнете - не работают регекспы". Я фшоке. "А как же эти, ну миллионы программистов, которые юзают дотнет? Вы что, чуваки, нашли звёздный баг?"
Я попросил пример. Пример выглядел так:
слово.*слово.*слово.*слово.*слово.*слово.*слово.*слово.*слово.*слово
Там были опорные слова, после которых искалось значение. Эту строчку генерил тестовый тул, а другой тестовый тул парсил.
При запуске проверки регекспа, оно действительно зависало намертво (или на очень долгое время, установить не захотелось).
Объяснение-то простое (хорошо иметь перед глазами картинку из книжки Фридла любого издания, где показано стрелками, как процессор регекспов бегает по строке), каждая .* - это полный перебор по сути.
А тут получился перебор, помноженный на перебор, помноженный на перебор, ...
В бусте или это обошли, или у них баг в чём-то другом, не выяснял.