Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

runInParallel

クラス: matlab.unittest.TestRunner
名前空間: matlab.unittest

配列 TestSuite 内のすべてのテストを並列実行

説明

results = runInParallel(runner,suite) は、指定されたテスト スイートをグループに分け、関数 gcp (Parallel Computing Toolbox) によって返される並列プール上で、指定されたテスト ランナーを使用して各グループを実行します。このメソッドは、結果を TestResult オブジェクトの配列として返します。

テストの並列実行 (Parallel Computing Toolbox™ が必要) では、テスト スイートの個々の部分が MATLAB® ワーカーで個別に実行されます。たとえば、テスト クラスに TestClassSetup メソッドがある場合、このメソッドにより各ワーカーでローカルに実行されます。ワーカーは対応する Test 要素の情報を使用してテストを実行します。各 Test 要素は、テストを実行するために必要なすべての情報をワーカーに提供します。

メモ

テスト フレームワークによって、グループの順序と数、あるいは各グループに含めるテストが異なる場合があります。

入力引数

すべて展開する

並列テスト グループのテスト ランナー。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 個のテスト要素が含まれます。テストを並列実行します。

results = 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
__________



results = 

  1200x1 TestResult array with properties:

    Name
    Passed
    Failed
    Incomplete
    Duration
    Details

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

ヒント

  • 並列実行するテスト スイートを選択するときは、リソース競合の可能性を考慮してください。たとえば、テスト フィクスチャが同じネットワーク上のデータベースや共有ファイルなどのグローバル リソースにアクセスする場合、並列セッション間で競合が発生することがあります。その場合には、プリビルドされた共有テスト フィクスチャの使用を検討してください。

  • リモート並列プール (MATLAB Parallel Server™ および Parallel Computing Toolbox が必要) でテストを実行すると、MATLAB はまずテストが含まれているローカル フォルダーをリモート ワーカーにコピーします。このステップに伴うオーバーヘッドを最小化するために、必ず、これらのフォルダーにはテストに関連したファイルのみが含まれているようにしてください。

バージョン履歴

R2015a で導入

すべて展開する