Можно создать модельные тесты, которые совместимы с системами непрерывного интегрирования (CI), такими как Jenkins™. Чтобы создать результаты, совместимые с CI, запустите Simulink® Test™ файлы с помощью MATLAB® Модульный тест.
Чтобы запустить CI-совместимые тесты, выполните эту общую процедуру:
Создайте тестовый набор из тестового файла MLDATX.
Создайте исполнителя тестов.
Создайте плагины для выхода теста или результатов покрытия.
Для покрытия модели используйте ModelCoveragePlugin
и CoberturaFormat
. При сборе покрытия модели в формате Cobertura:
Только покрытие верхней модели отражено в Cobertura XML.
Отражается только Decision Coverage модели, и она сопоставлена с Условием элементами в Cobertura XML.
Создайте плагины для CI-совместимого выхода.
Добавьте плагины в выход теста или результаты покрытия.
Добавьте тестовые выходы плагины или плагины результатов покрытия к исполнителю тестов.
Запустите тест.
В этом примере показано, как протестировать модель, опубликовать результаты Test Manager и вывести результаты в формате TAP с одним выполнением.
Вы используете MATLAB ® Модульный Тест, чтобы создать тестовый пакет и исполнитель тестов, и настроить раннер с помощью следующих плагинов :
matlab.unittest.plugins.TestReportPlugin
формирует отчет о тесте MATLAB.
sltest.plugins.TestManagerResultsPlugin
добавляет результаты диспетчера тестов в отчет о тестах MATLAB.
matlab.unittest.plugins.TAPPlugin
выводит результаты в файл TAP.
Этот тест создает вход квадратной волны в подсистему контроллера и просматривает 25 итераций параметров a
и b
. Тест сравнивает alpha
выход на базовую линию с допуском 0.0046
. Тест завершается неуспешно на тех итерациях, в которых выход превышает этот допуск.
Перед запуском этого примера убедитесь, что рабочая папка доступна для записи.
1. Откройте тестовый файл Test™ Simulink ®.
testfile = fullfile('f14ParameterSweepTest.mldatx');
sltest.testmanager.view;
sltest.testmanager.load(testfile);
2. В Диспетчере тестов настройте тестовый файл для отчетов.
В разделе Опции тестового файла выберите Сгенерировать отчет после выполнения. Раздел расширяется, отображая несколько опции отчета. Для получения дополнительной информации см. Раздел «Сохранение опций отчетов с тестовым файлом».
3. Создайте тестовый пакет из тестового файла Test™ Simulink ®.
import matlab.unittest.TestSuite suite = testsuite('f14ParameterSweepTest.mldatx');
4. Создайте исполнителя тестов.
import matlab.unittest.TestRunner
f14runner = TestRunner.withNoPlugins;
5. Добавьте TestReportPlugin
на исполнителя тестов.
Плагин создает отчет о тесте MATLAB F14Report.pdf
.
import matlab.unittest.plugins.TestReportPlugin pdfFile = 'F14Report.pdf'; trp = TestReportPlugin.producingPDF(pdfFile); addPlugin(f14runner,trp)
6. Добавьте TestManagerResultsPlugin
на исполнителя тестов.
Плагин добавляет результаты Test Manager в отчет о тесте MATLAB.
import sltest.plugins.TestManagerResultsPlugin
tmr = TestManagerResultsPlugin;
addPlugin(f14runner,tmr)
7. Добавьте TAPPlugin
на исполнителя тестов.
Плагин выводит в F14Output.tap
файл.
import matlab.unittest.plugins.TAPPlugin import matlab.unittest.plugins.ToFile tapFile = 'F14Output.tap'; tap = TAPPlugin.producingVersion13(ToFile(tapFile)); addPlugin(f14runner,tap)
8. Запустите тест.
Несколько итераций завершаются неуспешно, в которых различие между сигналом и базовой линией превышает критерий допуска.
result = run(f14runner,suite);
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_1657350_5204/mlx_to_docbook1/tp6ee49f37/simulinktest-ex40056435/F14Report.pdf
Одно выполнение исполнителя тестов создает два отчета:
Отчет о тесте MATLAB, содержащий результаты диспетчера тестов.
Файл формата TAP, который можно использовать в системах CI.
sltest.testmanager.clearResults sltest.testmanager.clear sltest.testmanager.close
В этом примере показано, как сгенерировать результаты покрытия модели для использования с непрерывным интегрированием. Освещение сообщается в формате Cobertura. Вы запускаете тестовый файл Simulink ® Test™ с помощью MATLAB ® Unit Test.
1. Импортируйте классы и создайте тестовый набор из тестового файла AutopilotTestFile.mldatx
.
import matlab.unittest.TestRunner aptest = sltest.testmanager.TestFile('AutopilotTestFile.mldatx'); apsuite = testsuite(aptest.FilePath);
2. Создайте исполнителя тестов.
trun = TestRunner.withNoPlugins;
3. Установите метрики покрытия на collect. Этот пример использует Decision Coverage. В выходных данных Cobertura Decision Coverage указывается как элементы условия.
import sltest.plugins.coverage.CoverageMetrics cmet = CoverageMetrics('Decision',true);
4. Установите свойства отчета о покрытии. Этот пример создает файл R13Coverage.xml
в текущей рабочей папке. Убедитесь, что ваша рабочая папка имеет разрешения на запись.
import sltest.plugins.coverage.ModelCoverageReport import matlab.unittest.plugins.codecoverage.CoberturaFormat rptfile = 'R13Coverage.xml'; rpt = CoberturaFormat(rptfile)
rpt = CoberturaFormat with no properties.
5. Создайте плагин покрытия модели. Плагин собирает метрики покрытия и создает отчет о формате Cobertura.
import sltest.plugins.ModelCoveragePlugin mcp = ModelCoveragePlugin('Collecting',cmet,'Producing',rpt)
mcp = ModelCoveragePlugin with properties: RecordModelReferenceCoverage: '<default>' MetricsSettings: [1x1 sltest.plugins.coverage.CoverageMetrics]
6. Добавьте плагин покрытия к исполнителю тестов.
addPlugin(trun,mcp) % Turn off command line warnings: warning off Stateflow:cdr:VerifyDangerousComparison warning off Stateflow:Runtime:TestVerificationFailed
7. Запустите тест.
APResult = run(trun,apsuite)
APResult = TestResult with properties: Name: 'AutopilotTestFile > Basic Design Test Cases/Requirement 1.3 Test' Passed: 0 Failed: 1 Incomplete: 0 Duration: 4.5620 Details: [1x1 struct] Totals: 0 Passed, 1 Failed, 0 Incomplete. 4.562 seconds testing time.
8. Повторяемые предупреждения.
warning on Stateflow:cdr:VerifyDangerousComparison warning on Stateflow:Runtime:TestVerificationFailed
matlab.unittest.plugins.TAPPlugin
| matlab.unittest.plugins.TestReportPlugin
| sltest.plugins.ModelCoveragePlugin
| sltest.plugins.TestManagerResultsPlugin
| TestRunner
| TestSuite