exponenta event banner

Создание артефактов с помощью подключаемых модулей модульного тестирования MATLAB

Платформа модульного тестирования MATLAB ® позволяет настраивать тестовый питатель с помощью классов плагинов в matlab.unittest.plugins пакет. Некоторые из этих классов плагинов можно использовать для создания отчетов о тестировании и артефактов, совместимых с платформами непрерывной интеграции (CI):

  • matlab.unittest.plugins.TestReportPlugin создает подключаемый модуль, который управляет тестовым питателем для создания отчета о результатах теста. С помощью этого плагина можно создавать читаемые и архивируемые отчеты о тестах.

  • matlab.unittest.plugins.TAPPlugin создает плагин, который создает поток протокола TAP (Test Anything Protocol).

  • matlab.unittest.plugins.XMLPlugin создает подключаемый модуль, который создает вывод XML в стиле JUnit.

  • matlab.unittest.plugins.CodeCoveragePlugin создает подключаемый модуль, который создает отчет о покрытии линии для исходного кода MATLAB.

Можно также создавать CI-совместимые артефакты при запуске тестов Simulink ® Test™. Дополнительные сведения см. в разделе Выходные результаты для систем непрерывной интеграции (Simulink Test).

Запуск тестов с помощью настраиваемого тестового питателя

В этом примере показано, как создать тестовый набор и настроить тестовый питатель для создания отчета о ходе тестового запуска и создания CI-совместимых артефактов.

В файле в текущей папке создайте функцию quadraticSolver, который возвращает корни квадратичных многочленов.

function roots = quadraticSolver(a,b,c)
% quadraticSolver returns solutions to the
% quadratic equation a*x^2 + b*x + c = 0.

if ~isa(a,'numeric') || ~isa(b,'numeric') || ~isa(c,'numeric')
    error('quadraticSolver:InputMustBeNumeric', ...
        'Coefficients must be numeric.');
end

roots(1) = (-b + sqrt(b^2 - 4*a*c)) / (2*a);
roots(2) = (-b - sqrt(b^2 - 4*a*c)) / (2*a);

end

Проверить quadraticSolver, создайте класс теста SolverTest в текущей папке.

classdef SolverTest < matlab.unittest.TestCase
    methods(Test)
        function realSolution(testCase)
            actSolution = quadraticSolver(1,-3,2);
            expSolution = [2,1];
            testCase.verifyEqual(actSolution,expSolution)
        end
        function imaginarySolution(testCase)
            actSolution = quadraticSolver(1,2,10);
            expSolution = [-1+3i, -1-3i];
            testCase.verifyEqual(actSolution,expSolution)
        end
        function nonnumericInput(testCase)
            testCase.verifyError(@()quadraticSolver(1,'-3',2), ...
                'quadraticSolver:InputMustBeNumeric')
        end
    end
end

В командной строке создайте набор тестов из SolverTest класс.

suite = testsuite('SolverTest');

Создать TestRunner экземпляр, который создает выходные данные с помощью matlab.unittest.TestRunner.withTextOutput способ. Этот метод позволяет установить максимальный уровень детализации для регистрируемой диагностики и уровень отображения для подробной информации о тестовом событии. В этом примере тестовый питатель отображает ход выполнения теста в matlab.unittest.Verbosity.Detailed уровень (уровень 3).

import matlab.unittest.TestRunner
runner = TestRunner.withTextOutput('OutputDetail',3);

Создать TestReportPlugin экземпляр, который отправляет выходные данные в файл testreport.pdf и добавьте подключаемый модуль в тестовый питатель.

import matlab.unittest.plugins.TestReportPlugin
pdfFile = 'testreport.pdf';
p1 = TestReportPlugin.producingPDF(pdfFile);
runner.addPlugin(p1)

Создание XMLPlugin экземпляр, записывающий вывод XML в формате JUnit в файл junittestresults.xml. Затем добавьте подключаемый модуль в тестовый питатель.

import matlab.unittest.plugins.XMLPlugin
xmlFile = 'junittestresults.xml';
p2 = XMLPlugin.producingJUnitFormat(xmlFile);
runner.addPlugin(p2)

Создание подключаемого модуля, который выводит отчет о покрытии кода Cobertura для исходного кода в файле quadraticSolver.m. Поручить плагину записать его выходные данные в файл cobertura.xml и добавьте подключаемый модуль в тестовый питатель.

import matlab.unittest.plugins.CodeCoveragePlugin
import matlab.unittest.plugins.codecoverage.CoberturaFormat
sourceCodeFile = 'quadraticSolver.m';
reportFile = 'cobertura.xml';
reportFormat = CoberturaFormat(reportFile);
p3 = CodeCoveragePlugin.forFile(sourceCodeFile,'Producing',reportFormat);
runner.addPlugin(p3)

Запустите тесты.

results = runner.run(suite)
 Running SolverTest
  Setting up SolverTest
  Done setting up SolverTest in 0 seconds
   Running SolverTest/realSolution
   Done SolverTest/realSolution in 0.36683 seconds
   Running SolverTest/imaginarySolution
   Done SolverTest/imaginarySolution in 0.016272 seconds
   Running SolverTest/nonnumericInput
   Done SolverTest/nonnumericInput in 0.17842 seconds
  Tearing down SolverTest
  Done tearing down SolverTest in 0 seconds
 Done SolverTest in 0.56153 seconds
__________

Generating test report. Please wait.
    Preparing content for the test report.
    Adding content to the test report.
    Writing test report to file.
Test report has been saved to:
 /tmp/BR2021ad_1630854_168990/mlx_to_docbook54/tpd01fe35a/matlab-ex57066699/testreport.pdf
results = 
  1x3 TestResult array with properties:

    Name
    Passed
    Failed
    Incomplete
    Duration
    Details

Totals:
   3 Passed, 0 Failed, 0 Incomplete.
   0.56153 seconds testing time.

Перечислите файлы в текущей папке. Три указанных артефакта хранятся в текущей папке.

dir 
.                                                       
..                                                      
GenerateArtifactsUsingMATLABUnitTestPluginsExample.mlx  
SolverTest.m                                            
cobertura.xml                                           
junittestresults.xml                                    
quadraticSolver.m                                       
testreport.pdf                                          

Созданные артефакты можно обработать на платформах CI. Также можно просмотреть содержимое созданных артефактов. Например, откройте отчет о тестировании PDF.

open('testreport.pdf')

См. также

| | | | |

Связанные темы