Main Content

matlab.unittest.diagnostics.ScreenshotDiagnostic 类

命名空间: matlab.unittest.diagnostics

可将屏幕捕获为图像文件的诊断

描述

使用 ScreenshotDiagnostic 类创建一个诊断,该诊断将可用屏幕捕获为图像文件。这些文件在 MATLAB® 完成测试运行后仍然存在,因此可用于测试后检查。

构造

ScreenshotDiagnostic() 会创建一个诊断,该诊断将可用屏幕捕获为图像文件。当测试框架诊断 ScreenshotDiagnostic 实例时,它会将屏幕截图保存为 PNG 文件。这些文件都具有唯一的名称,名称由前缀(默认为 Screenshot_')、自动生成的标识符和文件扩展名组成。例如文件名 Screenshot_cf95fe7f-5a7c-4310-9c49-16c0c18a969f.png。要查看文件的位置,请通过 TestResult 实例访问 FileArtifact 对象。

ScreenshotDiagnostic('Prefix',prefix) 将创建一个诊断,该诊断将屏幕截图保存到名称以指定前缀开头的文件中。

输入参数

全部展开

文件名前缀,指定为文本。如果不指定前缀,则默认前缀为 'Screenshot_'。可将该值指定为字符向量或字符串标量。在对象内,MATLAB 会将它们存储为字符向量。

示例: 'LoggedScreenshot_'

示例: "TestScreenshot-"

属性

全部展开

文件名前缀,以字符向量形式返回。默认前缀为 'Screenshot_'Prefix 属性是只读属性,其值是在构造期间设置的。

复制语义

句柄。要了解句柄类如何影响复制操作,请参阅复制对象

示例

全部折叠

创建供交互使用的 TestCase

import matlab.unittest.TestCase
testCase = TestCase.forInteractiveUse;

使用 ScreenshotDiagnostic 将桌面图像保存为测试诊断。

import matlab.unittest.diagnostics.ScreenshotDiagnostic
testCase.verifyTrue(false,ScreenshotDiagnostic)
Interactive verification failed.

----------------
Test Diagnostic:
----------------
Screenshot captured to:
--> C:\work\Temp\Screenshot_e99834ed-75e9-4ee1-9596-2f95e64b0ff1.png

---------------------
Framework Diagnostic:
---------------------
verifyTrue failed.
--> The value must evaluate to "true".

Actual logical:
       0

创建供交互使用的 TestCase

import matlab.unittest.TestCase
testCase = TestCase.forInteractiveUse;

使用 ScreenshotDiagnostic 将桌面图像记录为具有自定义前缀的测试诊断。

import matlab.unittest.diagnostics.ScreenshotDiagnostic
testCase.log(ScreenshotDiagnostic('Prefix','LoggedScreenshot_'))
Interactive diagnostic logged.
Screenshot captured to:
--> C:\work\Temp\LoggedScreenshot_35bb1ecb-441a-4f79-9f59-8b18ac3f9d12.png

在您当前工作文件夹下的文件中,创建 ScreenShotExampleTest 测试类。如果 failingTest 测试方法失败(在此示例中总是如此),它会使用 ScreenshotDiagnostic 捕获屏幕图像,以便于您以后检查。logScreenshotTest 测试始终捕获屏幕图像,并将其保存在带有 LoggedScreenshot_ 前缀的文件中。

classdef ScreenShotExampleTest < matlab.unittest.TestCase
    methods (Test)
        function passingTest(testCase)
            testCase.verifyEqual(7,4+3);
        end
        function failingTest(testCase)
            import matlab.unittest.diagnostics.ScreenshotDiagnostic
            testCase.verifyFalse(true,ScreenshotDiagnostic);
        end
        function logScreenshotTest(testCase)
            import matlab.unittest.diagnostics.ScreenshotDiagnostic
            testCase.verifySubstring("Some Long Message","sage");
            testCase.log(1,ScreenshotDiagnostic('Prefix','LoggedScreenshot_'));
        end
    end
end

运行测试。

res = runtests('ScreenShotExampleTest');
Running ScreenShotExampleTest
.
================================================================================
Verification failed in ScreenShotExampleTest/failingTest.

    ----------------
    Test Diagnostic:
    ----------------
    Screenshot captured to:
    --> C:\Temp\bf0e26d1-8d47-4462-b1f2-673c7d35c236\Screenshot_b24f2219-61a4-4cf8-b4da-fe7e10da92bd.png

    ---------------------
    Framework Diagnostic:
    ---------------------
    verifyFalse failed.
    --> The value must evaluate to "false".
    
    Actual logical:
           1

    ------------------
    Stack Information:
    ------------------
    In C:\work\ScreenShotExampleTest.m (ScreenShotExampleTest.failingTest) at 8
================================================================================
.   [Terse] Diagnostic logged (2016-12-22T11:21:54): 
Screenshot captured to:
--> C:\Temp\bf0e26d1-8d47-4462-b1f2-673c7d35c236\LoggedScreenshot_26def240-9a9d-4147-9d3e-c399ae157c0f.png

.
Done ScreenShotExampleTest
__________

Failure Summary:

     Name                               Failed  Incomplete  Reason(s)
    ================================================================================
     ScreenShotExampleTest/failingTest    X                 Failed by verification.

命令行窗口中的框架诊断指示捕获的屏幕截图。您也可以通过测试结果的诊断记录以编程方式访问这些位置。

由于第二个测试失败,屏幕截图保存为测试诊断的一部分。可通过 TestDiagnosticResults 上的 Artifacts 对象访问屏幕截图的路径。

res(2).Details.DiagnosticRecord.TestDiagnosticResults.Artifacts.FullPath
ans = 

    "C:\Temp\bf0e26d1-8d47-4462-b1f2-673c7d35c236\Screenshot_b24f2219-61a4-4cf8-b4da-fe7e10da92bd.png"

第三个测试成功,屏幕截图保存为记录的诊断的一部分(记录操作通过 TestCase 上的 log 方法进行)。可通过 LoggedDiagnosticResults 上的 Artifacts 对象访问屏幕截图的路径。

res(3).Details.DiagnosticRecord.LoggedDiagnosticResults.Artifacts.FullPath
ans = 

    "C:\Temp\bf0e26d1-8d47-4462-b1f2-673c7d35c236\LoggedScreenshot_26def240-9a9d-4147-9d3e-c399ae157c0f.png"

提示

  • 保存屏幕截图的位置是一个文件夹,其名称对测试运行具有唯一性,位于 ArtifactsRootFolder 包含的文件夹中。以交互方式运行测试时,根文件夹的位置是 tempdir() 返回的值。

  • 要确定保存屏幕截图的路径,请访问具体测试结果的 FileArtifact 对象。例如,假定您有一个 TestResult 数组 res。按如下所示确定该数组第一个元素的图窗保存位置。

    res(1).Details.DiagnosticRecord.TestDiagnosticResults.Artifacts
    ans = 
    
      FileArtifact with properties:
    
            Name: "Screenshot_f51601ef-86bc-499c-bcec-203969f72a85.png"
        Location: "C:\work\Temp\1f4d3b64-3201-4bde-92ed-ad6859e97051"
        FullPath: "C:\work\Temp\1f4d3b64-3201-4bde-92ed-ad6859e97051\Screenshot_f51601ef-86bc-499c-bcec-203969f72a85.png"
    
  • 如果您使用的是 macOS 系统,请在系统偏好设置中,允许终端 App 录制您的屏幕内容。当 ScreenshotDiagnostic 将屏幕捕获为图像文件时,此权限使其能够包含打开的窗口,如 MATLAB 桌面。

版本历史记录

在 R2017a 中推出