runInParallel

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

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

Описание

пример

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

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

Примечание

The 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();

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

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

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

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

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

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

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

Введенный в R2015a