性能测试框架概述
性能测试接口利用脚本、函数和基于类的单元测试接口。您可以在性能测试中执行验证,以确保在度量代码性能时功能行为正确。此外,您还可以将性能测试作为标准回归测试来运行,以确保代码更改不会中断性能测试。
确定已测量代码的范围
此表介绍为不同类型的测试测量的代码。
测试类型 | 测量内容 | 排除项 |
---|---|---|
基于脚本 | 每节脚本中的代码 |
|
基于函数 | 每个测试函数中的代码 |
|
基于类 | 每个带 Test 属性标记的方法中的代码 |
|
基于类,从 matlab.perftest.TestCase 派生并使用 startMeasuring 和 stopMeasuring 方法 | 每个带有 Test 属性的方法中 startMeasuring 和 stopMeasuring 调用之间的代码 |
|
基于类,从 matlab.perftest.TestCase 派生并使用 keepMeasuring 方法 | 每个带有 Test 属性标记的方法中的每个 keepMeasuring-while 循环中的代码 |
|
计时试验的类型
您可以创建两种类型的计时试验。
不定次计时试验会采集不定个数的测量值,以达到指定的误差界限和置信水平。不定次计时试验用于定义测量样本的统计目标。使用
runperf
函数或TimeExperiment
类的limitingSamplingError
静态方法生成此试验。定次计时试验会采集固定个数的测量值。定次计时试验可用于测量代码的首次成本或明确控制样本大小。使用
TimeExperiment
类的withFixedSampleSize
静态方法生成此试验。
此表汇总了不定次计时试验和定次计时试验的差别。
不定次计时试验 | 定次计时试验 | |
---|---|---|
预备测量数 | 默认为 5,但可通过 TimeExperiment.limitingSamplingError 配置 | 默认为 0,但可通过 TimeExperiment.withFixedSampleSize 配置 |
样本数量 | 默认介于 4 和 256 之间,但可通过 TimeExperiment.limitingSamplingError 配置 | 在试验构造期间定义 |
相对误差界限 | 默认为 5%,但可通过 TimeExperiment.limitingSamplingError 配置 | 不适用 |
置信水平 | 默认为 95%,但可通过 TimeExperiment.limitingSamplingError 配置 | 不适用 |
无效测试结果的框架行为 | 停止测量测试并转至下一个 | 采集指定数量的样本 |
编写具有测量范围的性能测试
如果基于类的测试派生自 matlab.perftest.TestCase
而非 matlab.unittest.TestCase
,则可以多次使用 startMeasuring
与 stopMeasuring
或 keepMeasuring
方法,以定义性能测试测量边界。如果测试方法多次调用 startMeasuring
、stopMeasuring
和 keepMeasuring
,则性能测试框架会对测量值进行累加并求和。性能测试框架不支持嵌套的测量边界。如果您在 Test
方法中未能正确使用这些方法,且以 TimeExperiment
方式运行测试,则框架会将测量值标记为无效。另外,您仍可将这些性能测试作为单元测试运行。有关详细信息,请参阅使用类测试性能。
运行性能测试
运行性能测试的方法有两种:
使用
runperf
函数运行测试。此函数使用不定数目的测量值获得 0.95 置信水平的相对误差界限为 0.05 的样本均值。它会运行这些测试 5 次来预备该代码,并运行 4 到 256 次来采集符合统计目标的测量值。使用
TestSuite
类中的testsuite
函数或方法生成显式测试套件,然后创建并运行计时试验。使用
TimeExperiment
类的withFixedSampleSize
方法构造采集固定个数的测量值的计时试验。您可以指定固定数量的预备测量值和固定数量的样本。使用
TimeExperiment
类的limitingSamplingError
方法构造一个具有指定统计目标(例如误差界限和置信水平)的计时试验。此外,您还可以指定预备测量值的数目以及最小和最大样本数。
您可以将性能测试作为回归测试运行。有关详细信息,请参阅使用类测试性能。
理解无效测试结果
在某些情况下,测试结果的 MeasurementResult
标为无效。当性能测试框架将 MeasurementResult
的 Valid
属性设置为 false 时,测试结果将标为无效。如果您的测试失败或被过滤掉,则会发生这种失效。另外,如果您的测试未正确使用 matlab.perftest.TestCase
的 startMeasuring
和 stopMeasuring
方法,则该测试的 MeasurementResult
将标为无效。
当性能测试框架遇到无效测试结果时,它的行为方式会有所不同,具体取决于计时试验的类型:
如果您创建的是不定次计时试验,则该框架会停止对该测试进行测量并移至下一个测试。
如果您创建的是定次计时试验,则该框架会继续采集指定数量的样本。
另请参阅
runperf
| testsuite
| matlab.perftest.TimeExperiment
| matlab.perftest.TimeResult
| matlab.unittest.measurement.MeasurementResult