Тестовое приложение Grails не выполняется на сервере CI, но не на компьютере разработчика - PullRequest
3 голосов
/ 20 мая 2011

У меня есть две машины, один сервер интеграции Continuus и одна машина разработчика.

Обе машины работают с одинаковыми версиями java, maven и grails, и обе они работают под управлением Ubuntu. Единственное отличие, о котором я могу думать, это то, что CI находится в виртуализированной среде.

Некоторые доказательства:

CI Java-версия

java version "1.6.0_24"
Java(TM) SE Runtime Environment (build 1.6.0_24-b07)
Java HotSpot(TM) 64-Bit Server VM (build 19.1-b02, mixed mode) 

DEV Java-версия

java version "1.6.0_24"
Java(TM) SE Runtime Environment (build 1.6.0_24-b07)
Java HotSpot(TM) 64-Bit Server VM (build 19.1-b02, mixed mode) 

CI mvn -version

Apache Maven 2.2.1 (rdebian-1)
Java version: 1.6.0_24
Java home: /usr/lib/jvm/java-6-sun-1.6.0.24/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux" version: "2.6.32-31-server" arch: "amd64" Family: "unix" 

DEV mvn -version

Apache Maven 2.2.1 (rdebian-1)
Java version: 1.6.0_24
Java home: /usr/lib/jvm/java-6-sun-1.6.0.24/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux" version: "2.6.32-31-generic" arch: "amd64" Family: "unix" 

CI Grails

Welcome to Grails 1.3.7 - http://grails.org/
Licensed under Apache Standard License 2.0
Grails home is set to: /usr/local/lib/grails-1.3.7 

DEV grails

Welcome to Grails 1.3.7 - http://grails.org/
Licensed under Apache Standard License 2.0
Grails home is set to: /home/netbrain/dev/apps/grails-1.3.7 

Я сделал чистую проверку из системы управления версиями на обеих машинах и удалил папки ~/.m2 и ~/.ivy2, чтобы избежать каких-либо несоответствий.

Когда я запускаю grails test-app на моем CI-сервере, 6 тестов кажутся неудачными. Когда они в моей системе DEV все проходят в одном и том же случае.

CI Grails Test-App

Tests Completed in 28213ms ...
-------------------------------------------------------
Tests passed: 14
Tests failed: 6
------------------------------------------------------- 

DEV Grails test-app

Tests Completed in 25889ms ...
-------------------------------------------------------
Tests passed: 20
Tests failed: 0
------------------------------------------------------- 

Когда я смотрю на сообщения об ошибках, которые я получаю из результатов теста, я вижу такие вещи:

junit.framework.AssertionFailedError: expected:<1> but was:<0>
not-null property references a null or transient value

Насколько я вижу, тесты логически верны, и они не должны получать эти ошибки, особенно когда несколько тестов, которые получают ошибку "переходного значения", ничего не сохраняют в базе данных!

Для меня кажется, что проблема заключается где-то в комбинации фазы гибернации / памяти-базы данных / теста.

Должна быть некоторая разница между средами, которые вызывают эту проблему. У кого-нибудь есть какие-либо советы о том, как я могу продолжить, чтобы решить проблему дальше?

Еще раз спасибо!

EDIT

Хорошо, вот что я попробовал:

  1. удалить папки ~/.m2, ~/.ivy2, ~/.grails
  2. чистить грааль
  3. run grails test-app

Но я все еще вижу неудачные тесты в моей среде CI, но не на компьютере разработчика.

РЕДАКТИРОВАТЬ

Некоторые новые разработки ..

Я попытался запустить только те тесты, которые не были выполнены на CI, и кажется, что при запуске grails test-app :integration path.to.failing.tests они все PASS ! во время работы grails test-app вызывает эти тесты на FAIL! : (

Я совершенно сбит с толку и не понимаю, что здесь происходит ...

1 Ответ

7 голосов
/ 20 мая 2011

Я бы почти гарантировал, что это проблема загрязнения теста, и на разных серверах тесты выполняются в разном порядке.

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

Я неоднократно сталкивался с метаклассом класса или внедренным пружинным синглтоном (например, служебным компонентом) в одном тесте.забыл почистить его, и на него повлияли другие тесты.Посмотрите результаты запуска тестов и сравните их, чтобы убедиться, что они выполняются в одинаковом порядке на обоих блоках.Если это не так, это проблема с порядком тестирования.

Самый простой способ выяснить, какие тесты плохо взаимодействуют, - запустить grails test-app и передать каждое имя теста в том же порядке, в котором они выполняются.на поле с ошибкой (обычно я использую текстовый редактор, чтобы вырезать имена тестов из предыдущего запуска и объединить их вместе, чтобы я знал, что они находятся в том же порядке).

Другая потенциальная проблема - если один компьютериспользует mysql, и вы неправильно настроили использование myisam в качестве механизма хранения по умолчанию, а не innodb (или другого механизма, поддерживающего транзакции).Вы можете напечатать «показать движки»;на экземпляре MySQL, чтобы увидеть, какой двигатель по умолчанию.Похоже, вы используете hsqldb или другую в памяти db для своих тестов, так что это может не быть вашей проблемой.

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