Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

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

スイートには 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 が必要です)。MATLAB Compiler が、テストの並列実行に必要なすべてのコンポーネントの位置を特定してパッケージ化できるようにするために、命令 %#function parallel.Pool をコードで使用します。詳細については、MATLAB ユニット テストのコンパイルを参照してください。

  • R2021a 以降、スレッド ワーカーの並列プールを起動してから runInParallel メソッドを呼び出して、スレッドベースのプール (Parallel Computing Toolbox が必要) でテストを実行できます。

    スレッドベースのプールで runInParallel を使用して実行するテストには、次の制限が適用されます。

バージョン履歴

R2015a で導入