Как сделать так, чтобы моя сборка проекта hudson провалилась на втором наборе тестов на нос? - PullRequest
2 голосов
/ 06 января 2011

Я относительно новичок в Гудзоне, поэтому, пожалуйста, прости меня, если это "духовный" вопрос.

У меня есть проект, написанный на 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 проглатывает $ ?, но это не объясняет, почему тесты сервера успешны (при неудаче), а клиентские тесты - нет (разве что $? в плен).

1 Ответ

2 голосов
/ 06 января 2011

Просто глядя на вашу команду выхода, я задаюсь вопросом, почему ваша сборка прерывается, когда тест сервера не пройден.Это может быть связано с тем, что ваш сервер не запускается при сбое сборки.Фактически вы проверяете состояние выхода echo , а не состояние выхода вашего набора тестов.Сначала запишите ваш статус выхода my_exit = $?, а затем всегда используйте $my_exit вместо $?.

...