Фаза Collect

Область действия фазы

Фаза используется в модифицирующем расширении и является необязательной для его работы (соответствующая секция collect в YAML-файле может как присутствовать, так и отсутствовать).

Фаза неявно присутствует в немодифицирующем расширении и обеспечивает работу условия уникальности для этого типа расширения.

Подробную информацию о типах расширений FAST вы можете получить здесь.

Синтаксис описания элементов запроса

При создании расширения FAST вам необходимо понимать структуру запроса к приложению и ответа от приложения, чтобы корректно описывать элементы запроса, с которыми необходимо работать, с помощью point'ов.

Более подробная информация о синтаксисе описания элементов запроса доступна здесь.

Эта фаза позволяет собрать все базовые запросы, удовлетворяющие заданному условию. При принятии решения о сборе запроса фаза использует информацию об уже собранных запросах в рамках test run.

Процедура сбора базовых запросов происходит в реальном времени. Каждый запрос будет обработан в порядке записи базовых запросов FAST-нодой. Нет необходимости дожидаться окончания записи запросов, чтобы запросы были обработаны и собраны фазой Collect.

Условие уникальности

Условие уникальности не пропускает для обработки в следующих фазах те базовые запросы, которые не являются уникальными согласно заданным критериям. На основе таких «отфильтрованных» запросов не создаются тестовые запросы. Это может быть полезно для снижения нагрузки на целевое приложение в случае, если к нему поступает много однотипных базовых запросов.

Уникальность каждого поступившего запроса определяется на основе данных в ранее поступивших запросах:

Фаза Collect с условием уникальности

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

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

  1. Если такого элемента нет в поступившем базовом запросе, перейти к следующему элементу списка.
  2. Если такой элемент есть в поступившем базовом запросе и данные этого элемента уникальны (иными словами, в ранее поступивших базовых запросах не встречались), считать такой базовый запрос уникальным и передать его на следующие фазы. Запомнить данные элемента запроса.
  3. Если такой элемент есть в поступившем базовом запросе и данные этого элемента не уникальны (встречались в ранее поступивших базовых запросах), то отбросить базовый запрос, как не удовлетворяющий условию уникальности. Для такого базового запроса расширение выполнено не будет.
  4. Если весь список пройден и не найдено ни одного элемента запроса, который можно было бы проверить на уникальность, то отбросить базовый запрос. Для такого базового запроса расширение выполнено не будет.

Вы можете описать условие уникальности в секции collect YAML-файла расширения с помощью списка uniq, описывающего элементы базового запроса, по данным которых необходимо определить уникальность запроса:

collect:
  - uniq:
    - [элемент запроса]
    - [элемент запроса 1, элемент запроса 2, …, элемент запроса N]
    - testrun

Элемент запроса в списке может содержать регулярные выражения в формате регулярных выражений Ruby.

Условие уникальности uniq состоит из массива элементов запроса, по данным в которых проверяется уникальность базового запроса. Также может использоваться параметр testrun.

Параметры условия уникальности:

  • - [элемент запроса]

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

    Пример.

    - [GET_uid_value] — определять уникальность запроса по данным GET-параметра uid (иными словами, запустить расширение для каждого базового запроса с уникальным значением GET-параметра uid):

    • example.com/example/app.php?uid=1 — уникальный запрос.
    • example.com/demo/app.php?uid=1 — не уникальный запрос.
    • example.com/demo/app.php?uid= — уникальный запрос.
    • example.org/billing.php?uid=1 — не уникальный запрос.
    • example.org/billing.php?uid=abc — уникальный запрос.

  • - [элемент запроса 1, элемент запроса 2, …, элемент запроса N]

    В запросе должен присутствовать набор из N элементов, причем данные элементов запроса в каждом таком наборе должны быть уникальны, чтобы запрос считался уникальным.

    Пример 1.

    - [GET_uid_value, HEADER_COOKIE_value] — определять уникальность запроса по набору из данных GET-параметра uid и данных HTTP-заголовка Cookie (иными словами, запустить расширение для каждого базового запроса с уникальным значением GET-параметра uid и заголовка Cookie):

    • example.org/billing.php?uid=1, Cookie: client=john — уникальный запрос;
    • example.org/billing.php?uid=1, Cookie: client=ann — уникальный запрос;
    • example.com/billing.aspx?uid=1, Cookie: client=john — не уникальный запрос;

    Пример 2.

    - [PATH_0_value, PATH_1_value] — определять уникальность запроса по паре первого и второго элемента пути (иными словами, запустить расширение для каждого базового запроса с уникальным значением пары из параметров PATH_0 и PATH_1).

    Валарм осуществляет парсинг элементов запроса на этапе обработки запроса. Для каждого пути в URI вида /en-us/apps/banking/ парсер Path выделяет каждый элемент пути в элемент массива PATH.

    К значениям элементов массива можно обращаться с помощью индекса. Для приведенного выше пути /en-us/apps/banking/ парсер предоставляет следующие данные:

    • "PATH_0_value": "en-us"
    • "PATH_1_value": "apps"
    • "PATH_2_value": "banking"

    Таким образом, условие уникальности [PATH_0_value, PATH_1_value] будет выполнено для любого запроса, в которых значение пары из первого и второго элемента пути не повторяется. Рассмотрим несколько случаев:

    • example.com/en-us/apps/banking/charge.php — уникальный запрос;
    • example.com/en-us/apps/banking/vip/charge.php — не уникальный запрос;
    • example.com/de-de/apps/banking/vip/charge.php — уникальный запрос;

  • - testrun

    Расширение будет выполнено один раз в рамках всего теста безопасности при успешном создании тестового запроса (иными словами, при прохождении прочих фаз).

    Например, если на основе поступившего базового запроса нельзя сконструировать тестовые запросы, поскольку базовый запрос был отброшен на фазе Match, то расширение в фазе Collect продолжит собирать базовые запросы до тех пор, пока один из запросов не пройдет фазу Match и на его основе не будут созданы тестовые запросы к целевому приложению.

    Не допускается использование других элементов запроса в списке uniq, если вы используете testrun. Условие уникальности uniq будет состоять только из одного элемента:

    collect:
      - uniq:
        - testrun
    

    Напомним, что при наличии нескольких элементов в списке uniq, для признания базового запроса уникальным необходимо, чтобы запрос был уникален согласно хотя бы одному параметру в списке uniq.

Параметры фазы Collect

На текущий момент для фазы Collect реализована только проверка условия уникальности поступающих базовых запросов. В будущем функциональность фазы может быть расширена.

results matching ""

    No results matching ""