Учебники

jMeter — регулярные выражения

Регулярные выражения используются для поиска и управления текстом на основе шаблонов. JMeter интерпретирует формы регулярных выражений или шаблонов, используемые в плане тестирования JMeter, включая программное обеспечение для сопоставления шаблонов Apache Jakarta ORO .

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

Стандартный пример использования выражений — получение идентификатора сеанса из ответа сервера. Если сервер возвращает уникальный ключ сеанса, мы можем легко получить его, используя выражения в нашем скрипте загрузки.

Чтобы использовать регулярные выражения в плане тестирования, вам необходимо использовать экстрактор регулярных выражений JMeter. Вы можете поместить регулярные выражения в любой компонент в плане тестирования.

Стоит подчеркнуть разницу между содержимым и соответствием , как это используется в элементе проверки ответа —

  • содержит означает, что регулярное выражение соответствует хотя бы некоторой части цели, поэтому «алфавит» «содержит» «ph.b.» потому что регулярное выражение соответствует подстроке ‘phabe’.

  • совпадения означают, что регулярное выражение соответствует цели цели. Следовательно, «алфавит» «совпадает» с «al. * T».

содержит означает, что регулярное выражение соответствует хотя бы некоторой части цели, поэтому «алфавит» «содержит» «ph.b.» потому что регулярное выражение соответствует подстроке ‘phabe’.

совпадения означают, что регулярное выражение соответствует цели цели. Следовательно, «алфавит» «совпадает» с «al. * T».

Предположим, вы хотите сопоставить следующую часть веб-страницы —

name = "file" value = "readme.txt" 

И вы хотите извлечь readme.txt. Подходящее регулярное выражение будет —

name = "file" value = "(.+?)">

Специальные символы выше —

  • ( и ) — они включают часть строки соответствия, которая будет возвращена

  • , — соответствовать любому персонажу

  • + — один или несколько раз

  • ? — остановить, когда первый матч будет успешным

( и ) — они включают часть строки соответствия, которая будет возвращена

, — соответствовать любому персонажу

+ — один или несколько раз

? — остановить, когда первый матч будет успешным

Создать план тестирования JMeter

Давайте разберемся в использовании регулярных выражений в экстракторе регулярных выражений — элементе постпроцессора, написав план тестирования. Этот элемент извлекает текст с текущей страницы, используя регулярное выражение, чтобы идентифицировать текстовый шаблон, которому соответствует нужный элемент.

Сначала мы пишем HTML-страницу со списком людей и их идентификаторами электронной почты. Мы развернем его на нашем сервере Tomcat. Содержание html (index.html) следующее:

<html>
   <head>
   </head>
	
   <body>
      <table style = "border: 1px solid #000000;">
		
         <th style = "border: 1px solid #000000;">ID</th>
         <th style = "border: 1px solid #000000;">name</th>
         <th style = "border: 1px solid #000000;">Email</th>
			
         <tr>
            <td id = "ID" style = "border: 1px solid #000000;">3</td>
            <td id = "Name" style = "border: 1px solid #000000;">Manisha</td>
            <td id = "Email" style = "border: 1px solid #000000;">manisha@domain.com</td>
         </tr>
			
         <tr>
            <td id = "ID" style = "border: 1px solid #000000;">4</td>
            <td id = "Name" style = "border: 1px solid #000000;">joe</td>
            <td id = "Email" style = "border: 1px solid #000000;">joe@domain.com</td>
         </tr>
			
      </table>
   </body>
</html>

При развертывании на сервере Tomcat эта страница будет выглядеть так, как показано на следующем снимке экрана:

HTML-страница

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

Как видно из следующего снимка, идентификатор второго человека окружен <td id = «ID»> и </ td>, и это вторая строка данных, имеющая этот шаблон. Мы можем использовать это, чтобы соответствовать точному шаблону, из которого мы хотим извлечь информацию. Поскольку мы хотим извлечь две части информации с этой страницы, идентификатор человека и имя человека, поля определяются следующим образом:

HTML-код исходного кода

Запустите JMeter, добавьте группу потоков План тестирования → Добавить → Темы (пользователи) → Группа потоков .

Затем добавьте сэмплер HTTP-запроса, выберите план тестирования, щелкните правой кнопкой мыши Добавить → Сэмплер → HTTP-запрос и введите данные, как показано ниже —

  • Имя — Управление

  • Имя сервера или IP — localhost

  • Номер порта — 8080

  • Протокол — мы оставим это поле пустым, что означает, что мы хотим использовать HTTP в качестве протокола.

  • Путь — jmeter / index.html

Имя — Управление

Имя сервера или IP — localhost

Номер порта — 8080

Протокол — мы оставим это поле пустым, что означает, что мы хотим использовать HTTP в качестве протокола.

Путь — jmeter / index.html

HTTP Request Sampler

Затем добавьте экстрактор регулярных выражений. Выберите сэмплер HTTP-запросов (Управление), щелкните правой кнопкой мыши Добавить → Постпроцессор → Извлечение регулярных выражений .

Экстрактор регулярных выражений

В следующей таблице приведено описание полей, используемых на снимке экрана выше.

Sr.No Поле и описание
1

Имя ссылки

Имя переменной, в которой будет храниться извлеченный тест (refname).

2

Регулярное выражение

Шаблон, с которым будет сопоставляться извлекаемый текст. Текстовые группы, которые будут извлечены, заключены в символы «(» и «)». Мы используем ‘. +?’ для обозначения одного экземпляра текста, заключенного в теги <td ..> .. </ td>. В нашем примере это выражение — <td id = «ID»> (+?) </ Td> \ s * <td id = «Name»> (+?) </ Td> \ s *

3

шаблон

Каждая группа извлеченного текста размещается как член переменной Person, следуя порядку каждой группы шаблонов, заключенному в ‘(‘ и ‘)’. Каждая группа сохраняется как refname_g #, где refname — это строка, введенная вами в качестве ссылочного имени, а # — номер группы. $ 1 $ относится к группе 1, $ 2 $ относится к группе 2 и т. Д. $ 0 $ относится к тому, что соответствует всему выражению. В этом примере извлекаемый нами идентификатор сохраняется в Person_g1, а значение Name хранится в Person_g2.

4

Матч №

Так как мы планируем извлечь только второе вхождение этого паттерна, сопоставляя второго добровольца, мы используем значение 2. Значение 0 приведет к случайному совпадению, в то время как отрицательное значение необходимо использовать с контроллером ForEach.

5

По умолчанию

Если элемент не найден, это будет значение по умолчанию. Это необязательное поле. Вы можете оставить это поле пустым.

Имя ссылки

Имя переменной, в которой будет храниться извлеченный тест (refname).

Регулярное выражение

Шаблон, с которым будет сопоставляться извлекаемый текст. Текстовые группы, которые будут извлечены, заключены в символы «(» и «)». Мы используем ‘. +?’ для обозначения одного экземпляра текста, заключенного в теги <td ..> .. </ td>. В нашем примере это выражение — <td id = «ID»> (+?) </ Td> \ s * <td id = «Name»> (+?) </ Td> \ s *

шаблон

Каждая группа извлеченного текста размещается как член переменной Person, следуя порядку каждой группы шаблонов, заключенному в ‘(‘ и ‘)’. Каждая группа сохраняется как refname_g #, где refname — это строка, введенная вами в качестве ссылочного имени, а # — номер группы. $ 1 $ относится к группе 1, $ 2 $ относится к группе 2 и т. Д. $ 0 $ относится к тому, что соответствует всему выражению. В этом примере извлекаемый нами идентификатор сохраняется в Person_g1, а значение Name хранится в Person_g2.

Матч №

Так как мы планируем извлечь только второе вхождение этого паттерна, сопоставляя второго добровольца, мы используем значение 2. Значение 0 приведет к случайному совпадению, в то время как отрицательное значение необходимо использовать с контроллером ForEach.

По умолчанию

Если элемент не найден, это будет значение по умолчанию. Это необязательное поле. Вы можете оставить это поле пустым.

Добавьте слушателя, чтобы зафиксировать результат этого плана тестирования. Щелкните правой кнопкой мыши группу потоков и выберите «Добавить» → «Прослушиватель» → «Просмотреть дерево результатов», чтобы добавить прослушиватель.

Сохраните план тестирования как reg_express_test.jmx и запустите тест. Результат будет успешным, как показано на следующем скриншоте —