Задание (вариант 1)

У wordpress.com есть REST API. Формат ответов на запросы — JSON. Целью будет продемонстрировать умение обрабатывать JSON.

  1. Используя метод REST API для получения информации о статьях, получить информацию о статьях с категорией «Тестовая страница», чтобы в результате вернулись статьи https://loadtestweb.wordpress.com/category/тестовая-страница/
  2. Выбрать случайным образом из полученных статей и их атрибутов ссылку (URL) на одну из них.
  3. Открыть статью по полученной ссылке.

Документация на API, описания методов:

Консоль для отладки:

sites.posts

Пример вызова, без фильтрации по категориям:

Нужно сделать такой же запрос, только с фильтрацией по категории «Тестовая страница».

Об обратном экранировании результатов, с помощью javascript написано в конце текущего задания.

Задание (вариант 2)

На стартовой странице сайта есть кнопка Предыдущие записи, при нажатии на которую отправляет POST-запрос, а в ответ возвращается JSON-документ. В веб-браузере код на JavaScript обрабатывает json-документ и в результате видны предыдущие записи на странице.

2017-03-02_00-17-45
Кнопка Предыдущие записи

Задача: сэмулировать в Apache.JMeter нажатие кнопки Предыдущие записи, обработать ответ (получить список предыдущих записей), и открыть случайную запись из списка предыдущих.

Это будет не тоже самое что делает браузер — браузер подгружает заголовки и миниатюры всех страниц из json-документа, делает несколько последующих запросов. А тестовое задание предполагает загрузку одной полной статьи из списка предыдущих, а не загрузку нескольких миниатюр. Тестовое задание обыгрывает более простую ситуацию.

Как записать запрос

Чтобы записать POST-запрос, выполняемый при нажатии кнопки Предыдущие записи, рекомендую использовать Fiddler 4. Как настроить работу браузера, через прокси-сервер написано в инструкции: Fiddler 4. Настройка HTTPS.

При формировании запроса важны:

  • адрес
  • тип запроса — POST
  • набор и значения параметров
Отображение JSON-ответа в Fiddler4
Отображение JSON-ответа в Fiddler 4. С вкладки WebForms удобно копировать параметры запроса. А с вкладки JSON удобно просматривать структуру ответа.

Корреляция параметров

При отправке запроса с ним отправляется также множество параметров, некоторые из которых важны для корректного выполнения запроса.

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/ для отладки селектора, синтаксис селекторов есть в документации по ссылкам ниже.
www.jsonquerytool.com
Подбор JSON Path-выражения в online-инструменте

Пример 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-селектор для поля 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},)}

Документация:

Можно полностью выборку ссылки из json-документа сделать на javaScript и тогда не надо будет использовать JSON Path Extractor и Regular Expression Extractor. Для учебного примера важно задействовать как можно больше стандартных блоков Apache.JMeter, поэтому тут предполагается извлечение ссылки в три этапа:

  1. JSON Path Extractor для извлечения части json-документа.
  2. Regular Expression Extractor для извлечения текста между двойными кавычками.
  3. javaScript для обратного экранирования слешей в тексте.

Переход по извлечённой ссылке

Чтобы открыть страницу по ссылке, снова используется компонент HTTP Request:

Использовано изображение с сайта filmpro.ru.

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход /  Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход /  Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход /  Изменить )

Connecting to %s