Автоматизация тестирования проектов Apache Camel

Привет, сообщество Camel,

У меня есть вопросы по выполнению тестов и автоматизации. Я использую Red Hat Fuse 7.7 (т.е. Camel 2.21.0 и Karaf 4.2.6 в качестве базы OSGi).

Я заинтересован в автоматическом тестировании и поэтому реализовал некоторые модульные тесты на основе CamelBlueprintTestSupport. Но, к сожалению, при большом количестве тестов (примерно 20) производительность выполнения теста очень низкая. Есть ли у кого-нибудь еще проблемы с производительностью? Это из-за сложного процесса загрузки PojoSR в фоновом режиме?

Я также пытался настроить интеграционные тесты с Pax-Exam. Но поскольку мои проекты в целом довольно сложны, установка всех необходимых функций и зависимых компонентов занимает много времени. Это только я борюсь с фреймворком? Производительность снова плохая, и кажется почти невозможным создать тестовую настройку, которая позволяет использовать зависимости, такие как camel-sql или Drools (kie), поскольку они снова зависят от других артефактов, таких как spring и т. Д.

Какой у вас опыт тестирования? Какие инструменты вы используете, чтобы проверить, генерирует ли ваша интеграция правильный вывод для заданного ввода?

Я с нетерпением жду вашего опыта и участия в обсуждении. С уважением

1 ответ

То, что вы описываете, привело к пирамиде тестирования.

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

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

Вы называете тесты Camel Route "юнит-тестами", но поскольку им нужен весь контекст приложения или, по крайней мере, больше, чем просто класс, я бы посчитал их на более высоком уровне в пирамиде (сервисные, компонентные тесты, их много имена вокруг). Поэтому я уже стараюсь свести их к необходимому минимуму.

Мои стратегии по минимизации усилий по тестированию Camel довольно распространены:

  • Я помещаю Java-код в JavaBeans и вызываю их из маршрутов. Таким образом, я могу полностью тестировать Java Beans с помощью простого JUnit, и мне не нужно тестировать все эти варианты с помощью тестов маршрута.
  • Я разбил свои маршруты. Вместо одного огромного маршрута с десятками возможных путей выполнения кода я создаю компактные небольшие маршруты с возможными путями выполнения "от 1 до некоторых". Это тот же принцип, что и для больших и малых методов. Количество возможных путей умножается на огромные методы или маршруты.
  • Я использую Spring, а не OSGi, но тестовый класс Camel для Spring Framework может запускать все методы тестирования с одним и тем же контекстом Spring (без перезапуска контекста между тестами). Это заметно сокращает время выполнения теста. Но это зависит от маршрута и требований к тесту (есть причина, по которой Spring может перезапускать "грязные контексты" между тестами), и я не знаю, как ведут себя тесты Blueprint.
Другие вопросы по тегам