Сгенерируйте артефакты Используя плагины модульного теста MATLAB

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

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

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

  • 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.3788 seconds
   Running SolverTest/imaginarySolution
   Done SolverTest/imaginarySolution in 0.017528 seconds
   Running SolverTest/nonnumericInput
   Done SolverTest/nonnumericInput in 0.18399 seconds
  Tearing down SolverTest
  Done tearing down SolverTest in 0 seconds
 Done SolverTest in 0.58032 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/BR2021bd_1751886_255755/mlx_to_docbook55/tp01f928d5/matlab-ex57066699/testreport.pdf
results = 
  1x3 TestResult array with properties:

    Name
    Passed
    Failed
    Incomplete
    Duration
    Details

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

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

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

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

open('testreport.pdf')

Смотрите также

| | | | |

Похожие темы

Для просмотра документации необходимо авторизоваться на сайте