exponenta event banner

runInParallel

Класс: matlab.unittest.StartRunner
Пакет: matlab.unittest

Запустить все тесты в TestSuite массив параллельно

Описание

пример

result = runInParallel(runner,suite) разделяет указанный тестовый набор на группы и использует указанный тестовый питатель для запуска каждой группы в текущем параллельном пуле. Затем метод возвращает результаты в массиве TestResult объекты.

Когда тесты выполняются параллельно, части набора тестов выполняются независимо от работников MATLAB ®. Например, если класс теста имеет TestClassSetup метод выполняется локально на каждом работнике. Работники используют информацию в своих соответствующих TestSuite элементы для выполнения тестов. Каждый TestSuite предоставляет работнику информацию о Test метод, класс тестирования и общие тестовые приборы для запуска для элемента набора.

Примечание

runInParallel метод требует Toolbox™ параллельных вычислений. Структура тестирования может изменять порядок и количество групп или включать тесты в каждую группу.

Входные аргументы

развернуть все

Испытательный питатель для параллельных тестовых групп, указанный как matlab.unittest.TestRunner экземпляр.

Перед параллельным запуском тестов рассмотрите конфигурацию тестового питателя. С момента runInParallel запускает отдельные группы тестов на разных рабочих, некоторые плагины, такие как StopOnFailuresPlugin, плохо подходят для распараллеливания. Платформа тестирования поддерживает выполнение тестов параллельно с пользовательским плагином при условии, что плагин подкласс Parallelizable интерфейс.

Набор тестов для параллельного выполнения, указанный как matlab.unittest.Test массив.

Примеры

развернуть все

Создайте следующий параметризованный тест в файле в текущей рабочей папке.

classdef TestRand < matlab.unittest.TestCase    
    properties (TestParameter)
        dim1 = createDimensionSizes;
        dim2 = createDimensionSizes;
        dim3 = createDimensionSizes;
        type = {'single','double'};
    end
    
    methods (Test)
        function testRepeatable(testCase,dim1,dim2,dim3)
            state = rng;
            firstRun = rand(dim1,dim2,dim3);
            rng(state)
            secondRun = rand(dim1,dim2,dim3);
            testCase.verifyEqual(firstRun,secondRun);
        end
        function testClass(testCase,dim1,dim2,type)
            testCase.verifyClass(rand(dim1,dim2,type),type)
        end
    end
end
 
function sizes = createDimensionSizes
% Create logarithmically spaced sizes up to 100
sizes = num2cell(round(logspace(0,2,10)));
end

В командной строке создайте набор из TestRand.m и тестовый питатель, отображающий текст в окне команд.

suite = matlab.unittest.TestSuite.fromClass(?TestRand);
runner = matlab.unittest.TestRunner.withTextOutput();

Комплект содержит 1200 тестовых элементов.

Запустите набор тестов параллельно.

result = runInParallel(runner,suite)
Split tests into 12 groups and running them on 4 workers.
----------------
Finished Group 2
----------------
Running TestRand
..........
..........
..........
..........
..........
..........
..........
..........
..........
..........
.........
Done TestRand
__________


----------------
Finished Group 4
----------------
Running TestRand
..........
..........
..........
..........
..........
..........
..........
..........
..........
..........
.....
Done TestRand
__________


----------------
Finished Group 3
----------------
Running TestRand
..........
..........
..........
..........
..........
..........
..........
..........
..........
..........
.......
Done TestRand
__________


----------------
Finished Group 1
----------------
Running TestRand
..........
..........
..........
..........
..........
..........
..........
..........
..........
..........
..........
..
Done TestRand
__________


----------------
Finished Group 7
----------------
Running TestRand
..........
..........
..........
..........
..........
..........
..........
..........
..........
.........
Done TestRand
__________


----------------
Finished Group 5
----------------
Running TestRand
..........
..........
..........
..........
..........
..........
..........
..........
..........
..........
...
Done TestRand
__________


----------------
Finished Group 6
----------------
Running TestRand
..........
..........
..........
..........
..........
..........
..........
..........
..........
..........
.
Done TestRand
__________


----------------
Finished Group 8
----------------
Running TestRand
..........
..........
..........
..........
..........
..........
..........
..........
..........
.......
Done TestRand
__________


-----------------
Finished Group 11
-----------------
Running TestRand
..........
..........
..........
..........
..........
..........
..........
..........
..........
.
Done TestRand
__________


-----------------
Finished Group 12
-----------------
Running TestRand
..........
..........
..........
..........
..........
..........
..........
..........
........
Done TestRand
__________


-----------------
Finished Group 10
-----------------
Running TestRand
..........
..........
..........
..........
..........
..........
..........
..........
..........
...
Done TestRand
__________


----------------
Finished Group 9
----------------
Running TestRand
..........
..........
..........
..........
..........
..........
..........
..........
..........
.....
Done TestRand
__________



result = 

  1200x1 TestResult array with properties:

    Name
    Passed
    Failed
    Incomplete
    Duration
    Details

Totals:
   1200 Passed, 0 Failed, 0 Incomplete.
   11.4023 seconds testing time.

Совет

  • При выборе тестового набора для параллельного запуска учитывайте возможные конфликты ресурсов. Например, если тестовые приборы получают доступ к глобальным ресурсам, таким как база данных или общий файл в одной сети, параллельные сеансы могут конфликтовать друг с другом. В таких случаях рекомендуется использовать предварительно созданный общий испытательный прибор.

  • Начиная с R2020b, можно создавать автономные приложения, поддерживающие параллельное выполнение тестов (требуется MATLAB Compiler™ и Parallel Computing Toolbox). Использовать директиву %#function parallel.Pool в коде, чтобы компилятор MATLAB мог находить и упаковывать все компоненты, необходимые для параллельного выполнения тестов. Дополнительные сведения см. в разделе Компиляция модульных тестов MATLAB.

  • Начиная с R2021a, можно запустить тесты пула на основе потоков (требуется панель инструментов параллельных вычислений), запустив параллельный пул рабочих потоков и вызвав runInParallel способ.

    Тесты для запуска с runInParallel в пуле на основе потоков действуют следующие ограничения:

    • В тесте и исходном коде должны использоваться только функциональные возможности, поддерживаемые работниками потоков. Дополнительные сведения об ограничениях среды на основе потоков см. в разделе Выбор среды на основе потоков и среды на основе процессов (панель инструментов параллельных вычислений).

    • Тестовые наборы, созданные с помощью matlab.unittest.TestSuite.fromFile, matlab.unittest.TestSuite.fromFolder, или matlab.unittest.TestSuite.fromProject не поддерживаются в пуле на основе потоков.

    • Хранение артефактов теста не поддерживается в пуле на основе потоков.

    • Simulink ® не поддерживается в среде на основе потоков. Поэтому тесты, созданные с помощью Simulink Test™, не могут выполняться в пуле на основе потоков.

Представлен в R2015a