Я относительно новичок в Гудзоне, поэтому, пожалуйста, прости меня, если это "духовный" вопрос.
У меня есть проект, написанный на python (использующий пилоны и тесты носа), который включает в себя как серверный, так и клиентский компоненты. У меня есть функциональные тесты, настроенные как в иерархии сервера, так и в иерархии клиента, чтобы использовать оба компонента. В моем сценарии сборки (сценарий оболочки, запущенный со страницы конфигурации проекта hudson) я последовательно запускаю два разных теста носа, например:
# Python tests for server
find $WORKSPACE/server/src/project/tests -iname "*test_*.py" | xargs $NOSETESTS --with-coverage --cover-package=project --cover-html --cover-erase --with-pylons="$PYLONS_INI"
echo "SERVER TEST EXIT STATUS: $?"
if [ $? -ne 0 ]; then
test_status=$test_status+$?
export TEST_STATUS=$test_status
exit $?
fi
(затем, после запуска сервера)
# Python tests for client
find $WORKSPACE/server/src/project/tests -iname "*test_*.py" | xargs $NOSETESTS --with-coverage --cover-package=projectclient --cover-html --cover-erase --with-pylons="$PYLONS_INI"
echo "CLIENT TEST EXIT STATUS: $?"
if [ $? -ne 0 ]; then
test_status=$test_status+$?
export TEST_STATUS=$test_status
exit $?
fi
Затем я выключил сервер.
Первый набор тестов (серверные тесты) всегда работает. Если тест не пройден, сборка сообщает об ошибке, и шар становится красным. Второй набор (клиентские тесты), однако, никогда не работает. Если тест не пройден, STDOUT сообщает об ошибке, а сценарий показывает состояние завершения 123, но сборка никогда не завершается.
Я попытался добавить
maven.test.failure.ignore=false
в мою конфигурацию hudson, основываясь на некоторых других вопросах, которые я видел здесь о stackoverflow, но, похоже, это ничего не изменило. Я попытался заставить скрипт завершиться с искусственным значением выхода, чтобы увидеть, обращает ли он внимание на значение выхода, и это ничего не изменило. Я также попытался переместить клиентские тесты выше серверных тестов, чтобы выяснить, была ли какая-то причина, по которой hudson допускал только один набор тестов на нос, но это тоже ничего не изменило.
Если кто-нибудь знает, что я могу делать не так, я бы очень признателен за помощь. Если вам нужна дополнительная информация, просто дайте мне знать.
Спасибо!
============================
UPDATE:
Мне удалось заставить второй набор тестов работать так:
find $WORKSPACE/client/python/src/tests -iname "*test_*.py" | xargs $NOSETESTS --with-coverage --cover-package=projectclient --cover-html --cover-erase --with-pylons="$PYLONS_INI"
client_test_status=$?
if [ $client_test_status -ne 0 ]; then
echo "Client Test Status = $client_test_status"
exit $client_test_status
fi
Однако мне не нужно было вносить это изменение в тесты SERVER. Только клиентские. Тесты сервера по-прежнему работают и выглядят так:
find $WORKSPACE/server/src/project/tests -iname "*test_*.py" | xargs $NOSETESTS --with-coverage --cover-package=project --cover-html --cover-erase --with-pylons="$PYLONS_INI"
if [ $? -ne 0 ]; then
exit $?
fi
Здесь существует одна гипотеза: может быть проблема с тем, что PIPE проглатывает $ ?, но это не объясняет, почему тесты сервера успешны (при неудаче), а клиентские тесты - нет (разве что $? в плен).