runInParallel

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

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

Описание

пример

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

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

Примечание

runInParallel метод требует Parallel Computing 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();

Набор содержит 1 200 тестовых элементов.

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

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 Compiler мог расположиться и пакет все компоненты, требуемые для того, чтобы запустить тесты параллельно. Для получения дополнительной информации смотрите Компиляцию Модульные тесты MATLAB.

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

    Тесты, чтобы запуститься с runInParallel на основанном на потоке пуле подвергаются этим ограничениям:

    • Ваш тестовый и исходный код должен использовать только функциональность, поддержанную рабочими потока. Для получения дополнительной информации об ограничениях основанной на потоке среды, смотрите, Выбирают Between Thread-Based и Process-Based Environments (Parallel Computing Toolbox).

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

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

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

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