Как мне построить свой проект HUDSON, чтобы провалиться на втором наборе носетровцев?
-
26-09-2019 - |
Вопрос
Я относительно новичок в Гудзон, поэтому, пожалуйста, простите меня, если это вопрос «дух».
У меня есть проект, написанный на 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 разрешено только для одного набора носителей, но это, казалось, не меняет вещи.
Если у кого-то есть идея, что я мог бы сделать неправильно, я бы выразил, что ценю помощь. Если вам нужна дополнительная информация, просто дайте мне знать.
Спасибо!
============================
ОБНОВИТЬ:
Я смог получить второй набор тестов, работающих так:
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
Однако мне не нужно было сделать это изменение на серверные тесты. Только клиентские. Тесты сервера все еще работают, и все же выглядят так:
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
Одна гипотеза, плавающая здесь, состоит в том, что может возникнуть проблема с глотанием трубы $?, Но это не объясняет, почему тесты серверов добиваются успеха (в случае сбоя), но клиентские тесты не имеют (если только $? Отказ
Решение
Просто глядя на вашу команду выхода, заставляет меня удивляться, почему ваша сборка перерывается, когда сервер тестирует неудачу. Это может быть связано с тем, что ваш сервер не запускается, когда ваша сборка не удается. На самом деле вы проверяете Состояние выхода из эха И не выходной статус вашего тестового набора. Захватите свой статус выхода сначала my_exit = $?
а потом всегда используйте $my_exit
вместо $?
.