主要内容

runperf

运行一组测试以进行性能度量

描述

结果= runperf运行当前文件夹中用于性能测量的所有测试并返回的数组matlab.perftest.TimeResult对象。中的每个元素结果对应于测试套件中的一个元素。

性能测试框架使用可变数量的测量来运行测试,以达到在0.95置信水平内的0.05相对误差范围内的样本均值。它运行测试4次来预热代码,然后运行4到256次来收集满足统计目标的度量值。如果在256次测试运行后,样本均值在0.95置信水平内未达到0.05的相对误差范围,则性能测试框架将停止运行测试并显示警告。在这种情况下matlab.perftest.TimeResult对象包含4次预热运行和256次测量运行的信息。

这个runperf函数提供了一种简单的方法来运行一组测试作为性能实验。

实例

结果= runperf (测验)运行一组指定的测试。

实例

结果= runperf (测验,名称、值)使用一个或多个指定的附加选项运行一组测试名称、值对参数。

例子

全部崩溃

在当前工作文件夹中,创建基于脚本的测试,onesTest.m,它使用三个不同的方法来初始化a1000——- - - - - -15001的矩阵。

行= 1000;关口= 1500;% %的函数X=一(行、列);没有预分配的%%循环分配对于r=1:行数对于c = 1:cols X(r,c) = 1;终止终止%%带预分配的循环分配X=零(行、列);对于r=1:行数对于c = 1:cols X(r,c) = 1;终止终止

作为性能测试运行脚本。结果可能会有所不同。

结果= runperf (“诚实”);
诚实的运行  .......... .......... .......... .......... .......... .......... .......... .......... .......... ....做诚实的  __________

显示结果。这个结果变量是一个1.——- - - - - -3.TimeResult数组中。中的代码节中定义的一个测试对应于数组中的每个元素onesTest.m

结果
结果=1×3带有属性的TimeResult数组:名称有效样本测试活动总计:3有效,0无效。测试时间为4.4113秒。

显示第二次测试的测量结果,它循环分配而不预先分配。

结果(2)
ans = timerresult with properties: Name: 'onesTest/LoopAssignmentWithoutPreallocation' Valid: 1 Samples: [4×7 table] TestActivity: [8×12 table]总计:1 Valid, 0 Invalid. 3.1462秒测试时间。

显示完整的测试测量表。

结果(2)测试活性
结果(2)测试活性ans = 8×12 table Name Passed Failed Incomplete MeasuredTime Objective Timestamp Host Platform Version TestResult RunIdentifier ___________________________________________ ______ ______ __________ ____________ _________ ____________________ ___________ ________ __________________________________________ ________________________________ ____________________________________ onesTest/LoopAssignmentWithoutPreallocation true false false 0.39586 warmup 24-Jun-2019 16:50:25 MY-HOSTNAME win64 9.7.0.1141441 (R2019b) Prerelease Update 2 [1×1 matlab.unittest.TestResult] ab95d893-a080-4e98-9297-df697882b09d onesTest/LoopAssignmentWithoutPreallocation true false false 0.38351 warmup 24-Jun-2019 16:50:25 MY-HOSTNAME win64 9.7.0.1141441 (R2019b) Prerelease Update 2 [1×1 matlab.unittest.TestResult] ab95d893-a080-4e98-9297-df697882b09d onesTest/LoopAssignmentWithoutPreallocation true false false 0.37995 warmup 24-Jun-2019 16:50:25 MY-HOSTNAME win64 9.7.0.1141441 (R2019b) Prerelease Update 2 [1×1 matlab.unittest.TestResult] ab95d893-a080-4e98-9297-df697882b09d onesTest/LoopAssignmentWithoutPreallocation true false false 0.38603 warmup 24-Jun-2019 16:50:26 MY-HOSTNAME win64 9.7.0.1141441 (R2019b) Prerelease Update 2 [1×1 matlab.unittest.TestResult] ab95d893-a080-4e98-9297-df697882b09d onesTest/LoopAssignmentWithoutPreallocation true false false 0.38388 sample 24-Jun-2019 16:50:26 MY-HOSTNAME win64 9.7.0.1141441 (R2019b) Prerelease Update 2 [1×1 matlab.unittest.TestResult] ab95d893-a080-4e98-9297-df697882b09d onesTest/LoopAssignmentWithoutPreallocation true false false 0.39803 sample 24-Jun-2019 16:50:27 MY-HOSTNAME win64 9.7.0.1141441 (R2019b) Prerelease Update 2 [1×1 matlab.unittest.TestResult] ab95d893-a080-4e98-9297-df697882b09d onesTest/LoopAssignmentWithoutPreallocation true false false 0.39742 sample 24-Jun-2019 16:50:27 MY-HOSTNAME win64 9.7.0.1141441 (R2019b) Prerelease Update 2 [1×1 matlab.unittest.TestResult] ab95d893-a080-4e98-9297-df697882b09d onesTest/LoopAssignmentWithoutPreallocation true false false 0.37702 sample 24-Jun-2019 16:50:28 MY-HOSTNAME win64 9.7.0.1141441 (R2019b) Prerelease Update 2 [1×1 matlab.unittest.TestResult] ab95d893-a080-4e98-9297-df697882b09d

性能测试框架运行了四次预热运行,然后是四次测量运行(如图所示)样品客观的列)。

显示第二次测试的平均测量时间。要排除在预热运行中收集的数据,请使用样品字段。

平均值(结果(2).样本.测量时间)
ans = 0.3891

要比较脚本中不同的初始化方法,请显示所有测试的平均测量时间。的值连接样品字段中的三个元素结果数组中。然后使用varfun按名称对表项进行分组并计算平均值。

fullTable=vertcat(results.Samples);varfun(@mean,fullTable,“输入变量”,“测量时间”,“分组变量”,“姓名”)
ans = 3×3 table Name GroupCount mean_MeasuredTime ___________________________________________ ___________________________ onesTest/OnesFunction 65 0.0063079 onesTest/LoopAssignmentWithPreallocation 4 0.38909 onesTest/LoopAssignmentWithPreallocation 13 0.018792

在示例输出中函数是将矩阵初始化为1的最快方法。性能测试框架65为这个测试运行度量。结果可能会有所不同。

在当前工作文件夹中,创建一个基于类的测试,preallocationTest.m,比较不同的预分配方法。

classdefpreallocationTest < matlab.perftest.TestCase方法(测试)函数teststones (testCase) x = ones(1,1e7);终止函数testIndexingWithVariable(testCase) id = 1:1e7;x (id) = 1;终止函数测试用例x(1:1e7)=1;终止函数testForLoop (testCase)对于x(I) =1;终止终止终止终止

测量边界preallocationTest类是测试方法。每个测试方法的时间度量包括方法中的所有代码。有关指定度量边界的信息,请参见startMeasuringstopMeasuring的方法matlab.perftest.TestCase

对包含的所有元素运行性能测试“索引”在这个名字。您的结果可能会有所不同,如果runperf没有达到统计目标。

结果= runperf (“预分配测试”,“姓名”,“*索引*”)
正在运行预分配测试……………..完成预分配测试结果=1×2 TimeResult数组,属性:名称有效样本测试活动总计:2有效,0无效。测试时间为2.4858秒。

显示每个测试的平均测量时间。将样品字段中的两个元素结果数组中。然后使用varfun按名称对表项进行分组并计算平均值。

fullTable=vertcat(results.Samples);varfun(@mean,fullTable,“输入变量”,“测量时间”,“分组变量”,“姓名”)
ans = 2×3表名GroupCount mean_MeasuredTime  __________________________________________ __________ _________________ preallocationTest / testIndexingWithVariable 6 0.16337 preallocationTest / testIndexingOnLHS 13 0.049936

输入参数

全部崩溃

指定为字符串数组、字符向量或字符向量单元格数组的测试套件。单元格数组中的每个字符向量都可以包含测试文件名、测试类、测试套件元素名、包含测试类的包、包含测试文件的文件夹或包含测试文件的项目文件夹。

例子:runperf('ATestFile.m')

例子:runperf('ATestFile/aTest')

例子:runperf('mypackage.MyTestClass')

例子:运行性能(pwd)

例子:runperf ({pwd‘mypackage.MyTestClass’,‘ATestFile.m’,‘mypackage.subpackage})

名称值参数

指定可选的逗号分隔的字符对名称、值参数。的名字是参数名和价值为对应值。的名字必须出现在引号内。您可以按任意顺序指定多个名称和值对参数,如下所示:Name1, Value1,…,的家

例子:runperf(测试,“名字”,“productA_ *”)运行名称以。开头的测试元素“产品”

包含定义测试类、函数或脚本的文件的基文件夹的名称,该文件指定为字符串数组、字符向量或字符向量的单元格数组。这个论点过滤器测试套件数组元素。要让测试框架在套件中包含一个测试,则测验元素必须包含在由指定的一个基本文件夹中基本文件夹.如果没有测验元素匹配一个基本文件夹,则返回一个空的测试套件。使用通配符*匹配任意数量的字符。请使用问号字符?匹配单个字符。对于包中定义的测试文件,基本文件夹是顶级包文件夹的父文件夹。

在子文件夹中运行测试的指示器,指定为错误的真正的(01.).默认情况下,框架在指定文件夹中运行测试,但不在其子文件夹中运行测试。

数据类型:必然的

在子包中运行测试的指示符,指定为错误的真正的(01.).默认情况下,框架在指定的包中运行测试,而不是在它们的子包中。

数据类型:必然的

suite元素的名称,指定为字符串数组、字符向量或字符向量的单元格数组。这个论点过滤器测试套件数组元素。要让测试框架在套件中包含一个测试,则的名字财产的测验元素必须与指定的名称之一匹配的名字.如果没有测验元素具有匹配的名称,则返回一个空的测试套件。使用通配符*匹配任意数量的字符。请使用问号字符?匹配单个字符。

测试类属性的名称,该属性定义测试套件元素使用的参数,指定为字符串数组、字符向量或字符向量的单元格数组。这个论点过滤器测试套件数组元素。要让测试框架在套件中包含一个测试,则参数化财产的测验元素必须至少包含一个由指定的属性名参数解释性.如果没有测验元素具有匹配的属性名称,则返回空的测试套件。使用通配符*匹配任意数量的字符。请使用问号字符?与单个字符匹配。

测试套件元素使用的参数名称,指定为字符串数组、字符向量或字符向量的单元数组。MATLAB®基于定义参数的测试类属性生成参数名称:

  • 如果属性值是字符向量的单元格数组,MATLAB将从单元格数组中的值生成参数名称。否则,MATLAB指定参数名为value1,value2, …,

  • 如果属性值是一个结构,MATLAB会从结构字段生成参数名。

这个参数名参数过滤器测试套件数组元素。要让测试框架在套件中包含一个测试,则参数化财产的测验元素必须至少包含由参数名.如果没有测验元素具有匹配的参数名称,则返回空测试套件。请使用通配符*匹配任意数量的字符。请使用问号字符?匹配单个字符。

测试过程的名称,指定为字符串数组、字符向量或字符向量的单元格数组。这个论点过滤器测试套件数组元素。要让测试框架在套件中包含一个测试,则ProcedureName财产的测验元素必须与指定的过程名之一匹配ProcedureName.如果没有测验元素具有匹配的过程名称,则返回空测试套件。请使用通配符*匹配任意数量的字符。请使用问号字符?匹配单个字符。

在基于类的测试中ProcedureName是测试方法的名称。在基于函数的测试中,它是包含测试的本地函数的名称。在基于脚本的测试中,它是从测试节标题生成的名称。与的名字,测试过程的名称不包括任何类或包名称或有关参数化的信息。

测试类派生自的类的名称,指定为字符串数组、字符向量或字符向量的单元格数组。此参数筛选测试套件数组元素。要让测试框架在套件中包含一个测试,则测试类财产的测验元素必须指向从指定的类派生的测试类超类.如果没有测验元素匹配类,则返回一个空的测试套件。

测试套件元素使用的测试标记的名称,指定为字符串数组、字符向量或字符向量的单元格数组。此参数用于筛选测试套件数组元素。要让测试框架在套件中包含一个测试,则标签财产的测验元素必须至少包含一个由指定的标记名标签.如果没有测验元素具有匹配的标记名,则返回一个空的测试套件。使用通配符*匹配任意数量的字符。请使用问号字符?匹配单个字符。

提示

  • 要自定义性能测试的统计目标,请使用TimeExperiment类来构造并运行性能测试。

  • 在测试中使用共享测试装置并指定runperf函数作为字符向量的字符串数组或单元数组,测试框架对数组进行排序,以减少共享fixture设置和拆除操作。因此,测试的运行顺序可能与输入数组中元素的顺序不同。有关更多信息,请参见sortByFixtures

  • 编写基于类的测试时,可以将测试作为独立应用程序运行(需要MATLAB编译器™).目前不支持编译性能测试。万博1manbetx有关更多信息,请参见编写MATLAB单元测试

选择

要显式地创建测试套件,您可以使用testsuite函数或matlab.unittest.TestSuite方法来创建一个套件。然后,您可以使用运行指定的方法TimeExperiment

R2016a中引入