Как запустить интеграционные тесты? - PullRequest
5 голосов
/ 31 марта 2010

В нашем проекте у нас много юнит-тестов. Они помогают сохранить проект достаточно хорошо проверенным.

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

В то время как модульные тесты просты в запуске, интеграционные тесты иногда не могут пройти: например, из-за ошибки тайм-аута. Кроме того, выполнение этих тестов может занять слишком много времени.

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

Для простых модульных тестов мы используем TeamCity для непрерывной интеграции.

Как вы запускаете модульные тесты интеграции и когда вы их запускаете?

Ответы [ 4 ]

3 голосов
/ 31 марта 2010

Мы используем Maven2: maven-surefire-plugin для запуска модульных тестов (на этапе тестирования) и maven-failsafe-plugin для интеграционных тестов (фаза тестирования интеграции).

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

Во многих случаях интеграционные тесты являются частью модуля, а в некоторых случаях существуют также специальные модули, которые выполняют только интеграционные тесты.

Одна из команд также использует Fitnesse для приемочных испытаний. Эти тесты также находятся в специализированных модулях.

Мы используем Гудзона для КИ.

3 голосов
/ 01 апреля 2010

В нашем проекте у нас есть отдельный набор для обычных / простых модульных тестов и отдельный набор для интеграционных тестов.Для этого есть две причины: производительность

  1. : интеграционные тесты намного медленнее,
  2. хрупкость тестов: интеграционные тесты чаще всего не выполняются из-за условий, связанных с окружающей средой (дают ложные срабатывания).

Мы используем TeamCity в качестве основного сервера Continuous Integration и Maven в качестве системы сборки.Для запуска тестов мы используем следующий алгоритм:

  1. Мы запускаем модульные тесты в Eclipse IDE и перед каждым коммитом.
  2. Мы запускаем модульные тесты автоматически после каждого коммита на агентах TeamCity, используяMaven mvn clean install
  3. Мы запускаем интеграционные тесты на агенте TeamCity автоматически после завершения «основной» сборки.

Способ запуска выполнения интеграционных тестов заключается в настройке задачи интеграции TeamCity.чтобы быть зависимым от «основной» задачи continous.build, см. подробности здесь: http://confluence.jetbrains.net/display/TCD4/Dependencies+Triggers

Мы запускаем только интеграционные тесты (исключая модульные тесты):

  • , используя отдельный каталогс именем «src / it / java» для проведения интеграционных тестов,
  • , исключая по умолчанию эту исходную папку из конфигурации maven-surefire-plugin (элемент configuration / exclude),
  • с использованием профиля Maven, который называется "интеграция ", чтобы исключить обычные модульные тесты и включить тесты из" src / it / java "(этот профиль настраивается путем передачи -Pintegration в Integ.ration.tests задание).
1 голос
/ 31 марта 2010

Мы проводим все тесты в одном огромном наборе. Бег занимает 7 минут.

Наши интеграционные тесты создают фиктивные серверы. Они никогда не истекают - кроме случаев, когда тест требует, чтобы сервер истек.

Итак, у нас есть следующие виды вещей. (Пример кода Python)

class SomeIntegrationTest( unittest.TestCase ):
    def setUp( self ):
        testclient.StartVendorMockServer( 18000 ) # port number
        self.connection = applicationLibrary.connect( 'localhost', 18000 )
    def test_should_do_this( self ):
        self.connection.this()
        self.assert...
    def tearDown( self ):
        testClient.KillVendorMockServer( 18000 )

Это имеет некоторые ограничения - он всегда разветвляет клиентский макет сервера для каждого теста. Иногда это нормально, а иногда слишком много начинается и останавливается.

У нас также есть следующие вещи

class SomeIntegrationTest( unittest.TestCase ):
    def setUp( self ):
        self.connection = applicationLibrary.connect( 'localhost', 18000 )
    def test_should_do_this( self ):
        self.connection.this()
        self.assert...

 if __name__ == "__main__":
     testclient.StartVendorMockServer( 18000 ) # port number
     result= unittest.TextTestRunner().run()
     testclient.KillVendorMockServer( 18000 )
     system.exit( result.failures + result.errors )

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

0 голосов
/ 27 апреля 2018

Мы используем Jenkins для автоматического запуска наших тестов.

Будьте внимательны при различиях между модулем и интеграцией - тесты. О «модульных тестах интеграции» сложно говорить

Maven предлагает хорошую поддержку для различения модульных и интеграционных тестов. Плагин Failsafe & Surefire.

Из проекта Apache Maven: Плагин Failsafe предназначен для запуска интеграционных тестов, а плагин Surefire - для модульных тестов. (см .: http://maven.apache.org/surefire/maven-failsafe-plugin/) Вам нужно настроить эти плагины в вашем pom.xml

Затем вы используете только mvn test - для запуска модульных тестов или mvn verify для запуска интеграционных тестов.

Юнит-тестирование должно выполняться периодически, например каждые 15 мин. Интеграционный тест, как правило, занимает много времени и должен выполняться f.i. каждые 24 часа.

Надежда, которая помогает другим.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...