Задание (вариант 1)
У wordpress.com есть REST API. Формат ответов на запросы — JSON. Целью будет продемонстрировать умение обрабатывать JSON.
- Используя метод REST API для получения информации о статьях, получить информацию о статьях с категорией «Тестовая страница», чтобы в результате вернулись статьи https://loadtestweb.wordpress.com/category/тестовая-страница/
- Выбрать случайным образом из полученных статей и их атрибутов ссылку (URL) на одну из них.
- Открыть статью по полученной ссылке.
Документация на API, описания методов:
Консоль для отладки:
Пример вызова, без фильтрации по категориям:
Нужно сделать такой же запрос, только с фильтрацией по категории «Тестовая страница».
Об обратном экранировании результатов, с помощью javascript написано в конце текущего задания.
Задание (вариант 2)
На стартовой странице сайта есть кнопка Предыдущие записи, при нажатии на которую отправляет POST-запрос, а в ответ возвращается JSON-документ. В веб-браузере код на JavaScript обрабатывает json-документ и в результате видны предыдущие записи на странице.

Задача: сэмулировать в Apache.JMeter нажатие кнопки Предыдущие записи, обработать ответ (получить список предыдущих записей), и открыть случайную запись из списка предыдущих.
Это будет не тоже самое что делает браузер — браузер подгружает заголовки и миниатюры всех страниц из json-документа, делает несколько последующих запросов. А тестовое задание предполагает загрузку одной полной статьи из списка предыдущих, а не загрузку нескольких миниатюр. Тестовое задание обыгрывает более простую ситуацию.
Как записать запрос
Чтобы записать POST-запрос, выполняемый при нажатии кнопки Предыдущие записи, рекомендую использовать Fiddler 4. Как настроить работу браузера, через прокси-сервер написано в инструкции: Fiddler 4. Настройка HTTPS.
При формировании запроса важны:
- адрес
- тип запроса — POST
- набор и значения параметров

Корреляция параметров
При отправке запроса с ним отправляется также множество параметров, некоторые из которых важны для корректного выполнения запроса.
Name | Value |
action | infinite_scroll |
page | 1 |
currentday | 25.02.2017 |
order | DESC |
query_args[error] | |
query_args[m] | |
query_args[p] | 0 |
query_args[post_parent] | |
query_args[subpost] | |
query_args[subpost_id] | |
query_args[attachment] | |
query_args[attachment_id] | 0 |
query_args[name] | |
query_args[static] | |
query_args[pagename] | |
query_args[page_id] | 0 |
query_args[second] | |
query_args[minute] | |
query_args[hour] | |
query_args[day] | 0 |
query_args[monthnum] | 0 |
query_args[year] | 0 |
query_args[w] | 0 |
query_args[category_name] | |
query_args[tag] | |
query_args[cat] | |
query_args[tag_id] | |
query_args[author] | |
query_args[author_name] | |
query_args[feed] | |
query_args[tb] | |
query_args[paged] | 0 |
query_args[meta_key] | |
query_args[meta_value] | |
query_args[preview] | |
query_args[s] | |
query_args[sentence] | |
query_args[title] | |
query_args[fields] | |
query_args[menu_order] | |
query_args | |
query_args[post__not_in][] | 7 |
query_args[posts_per_page] | 9 |
query_args[ignore_sticky_posts] | false |
query_args[suppress_filters] | false |
query_args[cache_results] | false |
query_args[update_post_term_cache] | true |
query_args[lazy_load_term_meta] | true |
query_args[update_post_meta_cache] | true |
query_args[post_type] | |
query_args[nopaging] | false |
query_args[comments_per_page] | 50 |
query_args[no_found_rows] | false |
query_args[order] | DESC |
last_post_date | 25.02.2017 21:51 |
Их можно коррелировать. Делается однотипно. Можно, но не необязательно. Вполне допустимо использовать и константы.
Выбор случайной ссылки из JSON-ответа
Применение JSON Path-выражений к JSON-документу
С помощью JSON Extractor (Post Processor/ JSON Extractor) нужно продемонстрировать извлечение ссылки на случайную статью.
Для отладки json-выражения можно использовать инструменты:
- http://jsonprettyprint.com для форматирования json-ответа, так проще написать селектор к json;
- http://www.jsonquerytool.com/ для отладки селектора, синтаксис селекторов есть в документации по ссылкам ниже.

Пример json-ответа, на котором можно тренироваться:
{ "type": "success", "html": "none", "lastbatch": false, "currentday": "25.02.17", "postflair": { "https:\/\/loadtestweb.wordpress.com\/2017\/02\/25\/test-6\/": 90, "https:\/\/loadtestweb.wordpress.com\/2017\/02\/25\/test-5\/": 86, "https:\/\/loadtestweb.wordpress.com\/2017\/02\/25\/test-4\/": 77 } }
Полезная статья:
Документация:
- компонент JSON Path Extractor.
Синтаксис для получения значений:
JSON-селектор для поля postflair получит словарь, где ключами будут ссылки на страницы. Попробуйте разные JSON-селекторы, используя http://www.jsonquerytool.com/ и получаемый JSON-ответ. Должно получиться что-то такое:
{ "https:\/\/loadtestweb.wordpress.com\/2017\/02\/25\/test-6\/": 90, "https:\/\/loadtestweb.wordpress.com\/2017\/02\/25\/test-5\/": 86, "https:\/\/loadtestweb.wordpress.com\/2017\/02\/25\/test-4\/": 77, }
Применение регулярных выражений
В данном случае, возможностей JSON Path-выражений недостаточно, для получения нужной ссылки (мне так кажется, если сумеете сделать выборку ссылки только на JSON Path — будет здорово).
Значение ссылки является именем поля, заключенным в двойные кавычки. Для извлечения текста между двумя двойными кавычками можно использовать регулярные выражения:
А возможность компонента Regular Expression Extractor позволяет сразу выбрать случайное значение из результатов выборки:
Регулярное выражение можно применить к значению переменной. Regular Expression Extractor (Post Processor/ Regular Expression Extractor) может работать со значениями указанной переменной (поле Jmeter Variable).
Значит можно в JSON Path Extractor извлечь нужный кусок JSON-документа в переменную, а потом извлечь нужный случайный кусок из переменной с помощью Regular Expression Extractor.
Применение javaScript на примере обратного экранирования
В инструменте http://www.jsonquerytool.com автоматически выполнится обратное экранирование и ссылки будут выглядеть сразу так:
"https://loadtestweb.wordpress.com/2017/02/25/test-5/"
В компоненте JSON Path Extractor автоматического обратного экранирования не происходит и ссылки выглядят так:
"https:\/\/loadtestweb.wordpress.com\/2017\/02\/25\/test-5\/"
Пусть с помощью регулярного выражения мы извлекли случайную ссылку в переменную postflairURL.
Тогда с помощью функции __javaScript можно избавиться от экранирования, получив значение строки:
${__javaScript(${postflairURL},)}
Документация:
- функция __javaScript.
Можно полностью выборку ссылки из json-документа сделать на javaScript и тогда не надо будет использовать JSON Path Extractor и Regular Expression Extractor. Для учебного примера важно задействовать как можно больше стандартных блоков Apache.JMeter, поэтому тут предполагается извлечение ссылки в три этапа:
- JSON Path Extractor для извлечения части json-документа.
- Regular Expression Extractor для извлечения текста между двойными кавычками.
- javaScript для обратного экранирования слешей в тексте.
Переход по извлечённой ссылке
Чтобы открыть страницу по ссылке, снова используется компонент HTTP Request:
Использовано изображение с сайта filmpro.ru.