Main Content

性能测试框架概述

性能测试接口利用脚本、函数和基于类的单元测试接口。您可以在性能测试中执行鉴定,以确保在度量代码性能时功能行为正确。此外,您还可以将性能测试作为标准回归测试来运行,以确保代码更改不会中断性能测试。

确定已测量代码的范围

此表介绍为不同类型的测试测量的代码。

测试类型测量内容排除项
基于脚本每节脚本中的代码
  • 共享变量节中的代码

  • 测量的框架开销估计值

基于函数每个测试函数中的代码
  • 以下函数中的代码:setupsetupOnceteardownteardownOnce

  • 测量的框架开销估计值

基于类每个带 Test 属性标记的方法中的代码
  • 带有以下属性的方法中的代码:TestMethodSetupTestMethodTeardownTestClassSetupTestClassTeardown

  • 共享脚手架设置和拆解

  • 测量的框架开销估计值

基于类,从 matlab.perftest.TestCase 派生并使用 startMeasuringstopMeasuring 方法每个带有 Test 属性的方法中 startMeasuringstopMeasuring 调用之间的代码
  • startMeasuring/stopMeasuring 边界外的代码

  • 测量的框架开销估计值

基于类,从 matlab.perftest.TestCase 派生并使用 keepMeasuring 方法每个带有 Test 属性标记的方法中的每个 keepMeasuring-while 循环中的代码
  • 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,则可以多次使用 startMeasuringstopMeasuringkeepMeasuring 方法,以定义性能测试测量边界。如果测试方法多次调用 startMeasuringstopMeasuringkeepMeasuring,则性能测试框架会对测量值进行累加并求和。性能测试框架不支持嵌套的测量边界。如果您在 Test 方法中未能正确使用这些方法,且以 TimeExperiment 方式运行测试,则框架会将测量值标记为无效。另外,您仍可将这些性能测试作为单元测试运行。有关详细信息,请参阅使用类测试性能

运行性能测试

运行性能测试的方法有两种:

  • 使用 runperf 函数运行测试。此函数使用不定数目的测量值获得 0.95 置信水平的相对误差界限为 0.05 的样本均值。它会运行这些测试 5 次来预备该代码,并运行 4 到 256 次来采集符合统计目标的测量值。

  • 使用 TestSuite 类中的 testsuite 函数或方法生成显式测试套件,然后创建并运行计时试验。

    • 使用 TimeExperiment 类的 withFixedSampleSize 方法构造采集固定个数的测量值的计时试验。您可以指定固定数量的预备测量值和固定数量的样本。

    • 使用 TimeExperiment 类的 limitingSamplingError 方法构造一个具有指定统计目标(例如误差界限和置信水平)的计时试验。此外,您还可以指定预备测量值的数目以及最小和最大样本数。

您可以将性能测试作为回归测试运行。有关详细信息,请参阅使用类测试性能

理解无效测试结果

在某些情况下,测试结果的 MeasurementResult 标为无效。当性能测试框架将 MeasurementResultValid 属性设置为 false 时,测试结果将标为无效。如果您的测试失败或被过滤掉,则会发生这种失效。另外,如果您的测试未正确使用 matlab.perftest.TestCasestartMeasuringstopMeasuring 方法,则该测试的 MeasurementResult 将标为无效。

当性能测试框架遇到无效测试结果时,它的行为方式会有所不同,具体取决于计时试验的类型:

  • 如果您创建的是不定次计时试验,则该框架会停止对该测试进行测量并移至下一个测试。

  • 如果您创建的是定次计时试验,则该框架会继续采集指定数量的样本。

另请参阅

| | | |

相关主题