Я пытался развернуть приложение Grails (версия 2.2.2) в Jenkins (версия 1.638). Он выполняет clean
, test-app -Dgrails.env=XXX
и war
команд.Тесты интеграции Grails на Jenkins
clean
и war
работал отлично. Для test-app -Dgrails.env=XXX
блок проверки работоспособности работал нормально, каждый тест прошел. Однако большинство тестов интеграции не удалось. Кажется, что классы домена в контроллере не могут получить данные. Другими словами, методы get()
или list()
не вернули правильные записи. Я предполагаю, что база данных подключена правильно, потому что вывод на консоль не стал жаловаться на проблему подключения. Интеграционные тесты хорошо работают на моей локальной машине с одним и тем же источником данных.
Ошибки при тестировании выглядят следующим образом: size()
всегда равен 0. Это тест интеграции контроллера. results
get()
, list()
или createCriteria().list{}
методы классов домена в контроллере.
results.size() == 9
| | |
[] 0 false
Ниже приведен код в DataSource.groovy. Я пробовал оба testCI
и testCI2
. Обе настройки не помогают. Честно говоря, я мало что знаю о pool properties
. Я просто скопировал его.
hibernate {
cache.use_second_level_cache = true
cache.use_query_cache = false
cache.region.factory_class = 'net.sf.ehcache.hibernate.EhCacheRegionFactory'
}
environments {
testCI {
dataSource {
dbCreate = "update" // one of 'create', 'create-drop', 'update', 'validate', ''
url = "jdbc:mysql://localhost:3306/build_db" // For non network testing
driverClassName = "com.mysql.jdbc.Driver"
username ="build"
password = "build"
pooled=true
properties {
maxActive = -1
minEvictableIdleTimeMillis=1800000
timeBetweenEvictionRunsMillis=1800000
numTestsPerEvictionRun=3
testOnBorrow=true
testWhileIdle=true
testOnReturn=true
validationQuery="SELECT 1"
}
}
}
testCI2 {
dataSource {
dbCreate = "update" // one of 'create', 'create-drop', 'update', 'validate', ''
url = "jdbc:mysql://localhost:3306/build_db" // For non network testing
driverClassName = "com.mysql.jdbc.Driver"
username ="build"
password = "build"
}
}
}
Самая странная часть является то, что интеграционный тест иногда хорошо работает после того, как я нажимаю новые коммиты в репозиторий. На самом деле это не так часто.
У кого-нибудь есть идеи по этому поводу? Огромное спасибо!!
Вы можете поделиться с нами своим "DataSource.groovy"? Просто чтобы убедиться, что ваша тестовая база данных настроена правильно (обычно запускаются интеграционные тесты в память 'h2' и проверяются на нее) – defectus
Спасибо @defectus. Я просто поделился DataSource.groovy. Я использую базу данных 'mysql' вместо' h2'. Я попробую h2, если придется. – johanzhou
Если на вашем локальном компьютере не установлены jenkins, вы не используете одну и ту же базу данных, поскольку используете localhost как имя хоста. Поэтому проверьте, есть ли у вас требуемые данные в базе данных вашего сервера, и есть ли записи, которые вы запрашиваете, – droggo