
☸Первый в мире инструмент тестирования GraphQL API с учётом зависимостей!
Единственный инструмент тестирования GraphQL API с учётом зависимостей!
GraphQLer — это передовой инструмент, предназначенный для динамического тестирования GraphQL API с акцентом на адаптивность. Он предлагает ряд сложных функций, которые упрощают процесс тестирования и обеспечивают надёжный анализ GraphQL API. GraphQLer умело управляет созданными объектами и ресурсами, эффективно определяет зависимости объектов, запросов и мутаций, а также динамически исправляет ошибки в запросах на основе ограничений API. GraphQLer использовался для поиска многих ошибок в production-grade GraphQL API!

Чтобы начать использовать GraphQLer, обратитесь к руководству по установке.
❯ python3 main.py --help
usage: main.py [-h] [--compile] [--fuzz] [--run] --path PATH [--auth AUTH] --url URL
options:
-h, --help show this help message and exit
--compile runs on compile mode
--fuzz runs on fuzzing mode
--run run both the compiler and fuzzer (equivalent of running --compile then running --fuzz)
--path PATH directory location for saved files and files to be used from
--auth AUTH authentication token Example: 'Bearer arandompat-abcdefgh'
--url URL remote host URL
Ниже приведены шаги по использованию этой программы для тестирования вашего GraphQL API. Использование разделено на 2 фазы: компиляция и фаззинг.
Также включён третий режим для удобства, называемый run режимом. Этот режим объединяет оба режима компиляции и фаззинга в одну команду.
(.env) python main.py --compile --url <URL> --path <SAVE_PATH>
После компиляции вы можете просмотреть скомпилированные результаты в <SAVE_PATH>/compiled. Кроме того, будет сгенерирован граф с именем dependency_graph.png для просмотра. Любые UNKNOWNS в скомпилированных .yaml файлах можно отметить вручную; однако, если не отметить, фаззер всё равно выполнит их, но без использования цепочки зависимостей.
(.env) python main.py --fuzz --url <URL> --path <SAVE_PATH>
Во время фаззинга статистика, связанная с GraphQL API, и количество текущих запросов выводятся в консоль. Коды возврата запросов записываются в <SAVE_PATH>/stats.txt. Все логи фаззинга сохраняются в <SAVE_PATH>/logs/fuzzer.log. Файл лога покажет вам, какие запросы были отправлены на какие конечные точки и каков был ответ. Это можно использовать для дальнейшего анализа результатов.
Запускает как режим компиляции, так и режим фаззинга
(.env) python main.py --run --url <URL> --path <SAVE_PATH>
Также есть переменные, которые можно изменить в файле constants.py. Они соответствуют определённым функциям, реализованным в GraphQLer, и могут быть настроены по вашему усмотрению.
| Variable Name | Variable Description | Variable Type | Default |
|---|
| MAX_LEVENSHTEIN_THRESHOLD | Расстояние Левенштейна между объектами и идентификаторами объектов | Integer | 20 |
| MAX_OBJECT_CYCLES | Максимальное количество раз, когда один и тот же объект может быть материализован в одном запросе/мутации | Integer | 3 |
| MAX_OUTUPT_SELECTOR_DEPTH | Максимальная глубина расширения вывода запроса/мутации (например, в случае бесконечно рекурсивных селекторов) | Integer | 3 |
| USE_OBJECTS_BUCKET | Сохранять ли идентификаторы объектов для дальнейшего использования | Boolean | True |
| USE_DEPENDENCY_GRAPH | Использовать ли функцию учёта зависимостей | Boolean | True |
| MAX_FUZZING_ITERATIONS | Максимальное количество нагрузочных тестов для одного узла | Integer | 5 |
| MAX_TIME | Максимальное время выполнения | Integer | 3600 |