TGViewer
Геннадий Чурсов | QA++ Геннадий Чурсов | QA++ @chursovqa · 4.14K subscribers
Post #258 1.78K
Как и обещал в прошлом посте выкладываю свое решение задания:
Задание:

🧪 В проекте с автотестами на Rest Assured:

— Прокиньте токен из @BeforeAll во все тесты.
— Сделайте это без статики.
— Сохраните архитектурную чистоту (SOLID, KISS).

🐈 GitHub: https://github.com/topsycreed/rest-assured-token
В решении используется Java, Gradle, JUnit 5, AssertJ, Rest Assured, Jackson, Allure, Lombok и Owner для чтения properties.

Тестировал решил API сценарий добавления товара в корзину для сайта https://www.ae.com/us/en — этот же сайт и его API используем на моем бесплатном курсе по автоматизации на Java в рамках курсового пет проекта.

Что было сделано:
1️⃣ Создан TokenManager - Хранит токены по ролям (GUEST, AUTH) в ThreadLocal<EnumMap<>>
Использует ленивую инициализацию computeIfAbsent Позволяет получить токен через TokenManager.getToken() или .getToken(UserRole)

2️⃣ Создано JUnit-расширение - GuestTokenExtension и заготовка для будущего AuthTokenExtension
В beforeAll() устанавливает роль (TokenManager.setCurrentRole(...)) И иницилизируется токен (TokenManager.getToken())

3️⃣ Контроллер (BagController) не знает о ролях
Просто вызывает TokenManager.getToken() — и получает нужный токен Роль уже была установлена расширением → нет дублирования

4️⃣ Отдельный контроллер для токенов (TokenClient)
Передаем авторизационный хедер из свойств, если нужно можно даже сделать секретными данными, для Guest общедоступная информация.

Почему решение архитектурно чистое:
• KISS - Простой TokenManager, один вызов в контроллере
• Single Responsibility Principle - TokenManager отвечает только за токены, контроллер — за API
• Open/Closed Principle - Добавить новую роль — легко (новое расширение)
• Dependency Inversion Principle - Контроллер не зависит напрямую от способа получения токена
• Без static в тестах - всё управление токеном — через @ExtendWith(...)

Пишите свои идеи как еще можно было бы решить такую задачку.
  • 👍 7
  • ❤ 2
  • 🔥 2
  • 🏆 2
More from @chursovqa
  1. Sep 29, 2026Heisenbug 2026 Autumn: тестирование, практика и живое общение 16–17 октября в Санкт-Петерб…
  2. Sep 23, 2026Собеседование для QA на английском Проведу бесплатную тренировку интервью для тестировщико…
  3. Sep 17, 2026Баг нашли за пару минут. А потом ещё минут десять вспоминаем шаги, открываем Network, соби…
  4. Sep 8, 2026У тестировщиков редко бывает одинаковая работа. 😺 Один меняет IT на стройку и заново соби…
  5. Sep 7, 2026Наконец-то на работе поставили задачу с которой я легко справлюсь! 😁
  6. Sep 1, 2026Как прокачать LinkedIn так, чтобы не только самому искать работу, но и получать хорошие вх…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →