2014-11-10 1 views
0

Я использую Drone в качестве сервера непрерывной интеграции (CI).Состояние сборки из Matlab с помощью Drone

Тесты начали использовать этот скрипт:

image: drone/matlab:R2014a 
script: 
    - cd test 
    - matlab -nodesktop -nosplash -r ci_run_tests 

notify: 
    email: 
     on_failure: blame 

Функция ci_run_tests основывается на этот ответ: https://stackoverflow.com/a/23347768

Что касается Дженкинс, автор предлагает, чтобы записать результаты испытаний в * .tap-файл, в моем случае выглядит следующим образом:

1..4 
ok 1 - test_annotation_to_pitch/test_with_systematic_scale 
ok 2 - test_audio_to_pitch/test_120_vs_360 
not ok 3 - test_pitch_to_CENS/test_12_vs_36 
ok 4 - test_pitch_to_chroma/test_12_vs_36 

Тест 3 был неудачным. Drone не знает об этой информации, так как он не интерпретирует эти файлы * .tap, он только зарегистрировал, что Matlab вышел из строя, и, следовательно, сказал, что сама сборка работает.

Мой вопрос: ли Drone поддержку какой-то функциональности вроде .TAP файла * в Дженкинс

Спасибо!

+0

Это может показаться вам интересным. Если система CI не обрабатывает файлы TAP, нет необходимости включать TAPPlugin вообще. http://blogs.mathworks.com/developer/2015/01/20/the-other-kind-of-continuous-integration/ –

ответ

0

Большинство систем непрерывной интеграции не анализируют результаты или не знают о тестируемых тестах, но проверяют статус выхода программ.

Чтобы сообщить об ошибке, программе необходимо выйти с чего-то другого, кроме 0.

В то время как упомянутый тестовый сценарий имеет exit(1), кажется, что testrunner не будет создавать исключение, если произошел сбой теста. Поэтому для проверки неудачных тестов необходимо подсчитать их количество:

function runAllMyTests 

import matlab.unittest.TestSuite; 
import matlab.unittest.TestRunner; 
import matlab.unittest.plugins.TAPPlugin; 
import matlab.unittest.plugins.ToFile; 

try 
    % Create the suite and runner 
    suite = TestSuite.fromPackage('packageThatContainsTests', 'IncludingSubpackages', true); 
    runner = TestRunner.withTextOutput; 

    % Add the TAPPlugin directed to a file in the Jenkins workspace 
    tapFile = fullfile(getenv('WORKSPACE'), 'testResults.tap'); 
    runner.addPlugin(TAPPlugin.producingOriginalFormat(ToFile(tapFile))); 

    results = runner.run(suite); 

    % Count number of failed tests. Exit(1) if greater than 0 
    if nnz([results.Failed]) 
     exit(1); 
    end 
catch e; 
    disp(e.getReport); 
    exit(1); 
end; 
exit force; 

Когда вы об этом думаете, что это поведение, которое вы на самом деле хотите: исключение всегда останавливает выполнение любой бросает его. Таким образом, ваш testuite остановится при первой обнаруженной ошибке, не показывая ни одного из других.

+0

Это работает отлично! –

0

Поддерживает ли гуру артефакт XML в стиле JUnit? Если это так, то другим решением будет использовать XMLPlugin для MATLAB Unit TestRunner вместо TAPPlugin.

 Смежные вопросы

  • Нет связанных вопросов^_^