性能测试框架概述
性能测试接口利用脚本、函数和基于类的单元测试接口。在测量代码性能时,可以在性能测试中执行限定条件,以确保正确的功能行为。此外,您可以将性能测试作为标准回归测试运行,以确保代码更改不会破坏性能测试。
确定测量代码的界限
此表指示针对不同类型的测试度量哪些代码。
测试类型 | 测量什么 | 排除的内容 |
---|---|---|
基于脚本的 | 脚本的每个部分中的代码 |
|
基于函数的 | 每个测试函数中的代码 |
|
基于类的 | 属性标记的每个方法中的代码测试 属性 |
|
派生的基于类的matlab.perftest.TestCase 和使用startMeasuring 和stopMeasuring 方法 |
调用之间的代码startMeasuring 和stopMeasuring 在每个方法中标记测试 属性 |
|
时间实验的类型
你可以创建两种时间实验。
一个频率论时间实验收集可变数量的测量值,以达到指定的误差范围和置信水平。使用频率时间实验来定义测量样本的统计目标。生成这个实验
runperf
函数或limitingSamplingError
静态方法TimeExperiment
类。一个固定时间实验收集固定数量的测量值。使用固定时间实验来测量代码的首次成本或明确控制样本大小。生成这个实验
withFixedSampleSize
静态方法TimeExperiment
类。
这个表总结了频率实验和固定时间实验之间的区别。
频率论时间实验 | 固定时间实验 | |
---|---|---|
热身的测量 | 4默认,但可配置通过TimeExperiment.limitingSamplingError |
默认为0,但可配置通过TimeExperiment.withFixedSampleSize |
样本数量 | 默认在4到32之间,但可通过TimeExperiment.limitingSamplingError |
实验构建时定义 |
相对误差范围 | 默认为5%,但可配置通过TimeExperiment.limitingSamplingError |
不适用 |
置信水平 | 默认为95%,但可配置通过TimeExperiment.limitingSamplingError |
不适用 |
无效测试结果的框架行为 | 停止测量一个测试并移动到下一个测试 | 收集指定数量的样本 |
编写带有度量边界的性能测试
如果基于类的测试派生自matlab.perftest.TestCase
而不是matlab.unittest.TestCase
,然后您可以使用startMeasuring
和stopMeasuring
方法来定义性能测试测量的边界。具有度量边界的测试方法必须调用startMeasuring
在调用之前stopMeasuring
.如果测试方法有多个调用startMeasuring
和stopMeasuring
,然后性能框架对测量结果进行累加和。性能框架不支持嵌套的度量边界。万博1manbetx如果您错误地使用了这些方法测试
方法,并将测试作为TimeExperiment
,则框架将该测量标记为无效。此外,您仍然可以将这些性能测试作为单元测试运行。有关更多信息,请参见使用类测试性能.
运行性能测试
运行性能测试有两种方法:
使用
runperf
函数运行测试。该函数使用可变数量的测量值来达到样本平均值,在0.95置信水平内具有0.05的相对误差边际。它将运行四次测试来预热代码,并运行4到32次测试来收集满足统计目标的度量。方法生成显式测试套件
testsuite
方法中的方法TestSuite
类,然后创建并运行一个时间实验。使用
withFixedSampleSize
方法TimeExperiment
类来构造具有固定测量次数的时间实验。您可以指定固定数量的热身测量和固定数量的样本。使用
limitingSamplingError
方法TimeExperiment
类构造具有指定统计目标(如误差幅度和置信水平)的时间实验。此外,您还可以指定预热测量的次数以及样本的最小和最大数量。
您可以将性能测试作为回归测试运行。有关更多信息,请参见为各种工作流运行测试.
理解无效测试结果
在某些情况下,MeasurementResult
对于标记为无效的测试结果。属性时,测试结果被标记为无效有效的
的属性MeasurementResult
为假。如果测试失败或被过滤,就会发生这种无效。此外,如果您的测试错误地使用startMeasuring
和stopMeasuring
的方法matlab.perftest.TestCase
,则MeasurementResult
因为那个测试被标记为无效。
当性能测试框架遇到无效的测试结果时,它的行为会根据时间实验的类型而有所不同:
如果您创建了一个频率时间实验,那么框架将停止该测试的测量,转而进行下一个测试。
如果您创建了一个固定时间的实验,那么框架将继续收集指定数量的样本。
另请参阅
matlab.perftest.TimeExperiment
|matlab.unittest.measurement.MeasurementResult
|runperf
|testsuite