Как мне построить свой проект HUDSON, чтобы провалиться на втором наборе носетровцев?

StackOverflow https://stackoverflow.com/questions/4616949

Вопрос

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

У меня есть проект, написанный на 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 вместо $?.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top