Всем привет.
Я абсолютно полный новичок в тестировании веб сервисов, и только-только успел немного изучить и понять что это такое, зачем и с чем, так сказать, едят. Сейчас хочу попробовать на практике непосредственно тестирование этих самых сервисов, но одновременно с этим стал вопрос: как организовать архитектуру тестового фреймворка, в котором будет тестироваться тот или иной сервис?
Как организовать простейший фреймворк для тестирования UI веб приложения - с этим все понятно: здесь будет связка Page Object + тесты + хелперы, а также прочие вспомогательные/служебные слои архитектуры фреймворка в зависимости от конкретного проекта.
По аналогии с вышеописанным все никак не могу понять, как лучше построить архитектуру фреймворка (самописного) для тестирования API какого-нибудь широко известного ресурса, например, Google Maps или Twitter.
Rest assured может быть и неплохая, но есть ряд минусов
проблема с логом - как-то в разумном виде это выводить куда-то - очень сложно
есть ряд багов, которые не позволяют делать полноценное покрытие в некоторых случаях
тяжеловесная(поглядите в исходники - 10000-строковые груви классы и тд)
слишком сильно фреймворк завязывается на rest assured объекты.
результаты встроенных проверок читать иногда ооочень сложно.
Имхо, всё таки не стоит запихивать в одну библиотеку и посылку запросов, и инструмент для проверки.
Я у себя сделал небольшую обвязку над apache httpclient (чем собственно и является монтсруозный rest assured) - получилось менее 10 небольших классиков(включая доменную модель и различные логгеры(консоль в том числе).
Очень советую всё таки перед ее использованием попробовать что-то другое.
Для посылки - http client
для проверки данных - тестовый фреймворк типа junit или testng(какой вы используете на проекте).
Если я правильно понимаю, enablePrettyPrinting это вывод не одной строкой, а с форматированием { param: value }
но вывод все равно в defaultPrintStream т.е на консоль.
Вариант писать в лог только перехватывать вывод на консоль.
У меня была задача - получить логи Rest Assured запросов и ответов при работе с API, и выводить их в лог отчета.
Я использую Allure для формирования отчета и мне хотелось прикреплять файлы с логами по ходу выполнения шагов.
Спасибо @odynplus подсказал где посмотреть. Нашел вот целый архив примеров
Для решения моей задачи можно испоьзовать фильтры filters(new ResponseLoggingFilter(responseVar), new RequestLoggingFilter(requestVar)).
Итого у меня получилось
final StringWriter writerReqest= new StringWriter(); final StringWriter writerResponse = new StringWriter(); final PrintStream requestVar = new PrintStream(new WriterOutputStream(writerReqest), true); final PrintStream responseVar = new PrintStream(new WriterOutputStream(writerResponse), true); given(). filters(new ResponseLoggingFilter(responseVar), new RequestLoggingFilter(requestVar)). body("somebody"). when(). post("https://httpbin.org/post");
Тоже столкнулся с задачей, писать автотесты для REST API, смотрю в сторону rest-assured. Вы случайно еще свою реализацию не выкидывали куданить? Поглядеть, может и не стоит такого монстра использовать
Rest assured - зручно використуватти як НТТР клієнт, за допомогою нього можна формувати реквести-виконувати, діставати респонс а далі із респонса все що нам потрібно і робити перевірки за допомогою наприклад TestNg . 1. Пишем ДТО класи для серіалізації/десеріалізаці реквестів/респонсів 2. Формуємо Мапу з пас/квері параметрами із обєкта відповідного класу або джсон (1респонс 1 реквест для одного сервісу) 3. Створюємо RequestSpecBuilder requestSpecProt = … один раз з переаналізацією перед кожним тестом із загальними параметрами (урл, пас, хедери …)4. В кожному тесті доповнюємо білдер всім необхідним 5. Response resp = given(requestSpecProt.build).log().all().get() 6. В фреймворку є можливість дуже простим способов валідації Джсонів через Джсон схем
. Джйсон схеми дозволяють валідувати назви параметрів, перелік параметрів. формат, загальні патерни по значеннях … ДТО виступають допоміжними обєктами використовую у випадках коли потрібно діставати конкретні значення чи колекції значень із Джсонів .