概览
自动化测试系统的一个常见要求是生成一份完整的报表,其中包含所有结果信息,可解答以下问题:“什么是序列测试?”和“每个待测设备(UUT)的测试结果是什么?”。
本文档提供有关TestStand报表的信息,包括配置不同的报表格式,在报表中添加其他数据,以及自定义报表。
内容
· TestStand如何生成报表
· 自定义TestStand报表
· 结论
· 查阅TestStand高级架构系列的其他章节
1 TestStand如何生成报表
在了解TestStand报表自定义提供的选项之前,请务必先了解TestStand报表的生成方式。
TestStand使用两步方法来生成测试报表:
1. 结果收集:在执行测试的同时,TestStand会收集测试执行期间的结果数据。这些整合结果可用于所有结果处理操作,包括报表生成和数据库记录。
2. 报表生成:TestStand报表生成器使用结果收集过程中所收集的数据来生成报表文件。
下图为此过程的示意图:
TestStand在ResultList变量中收集测试结果,报表生成器使用该变量创建可读的测试报表
结果收集
TestStand执行序列时,会收集步骤结果和其他信息,以在报表中体现。结果收集直接由TestStand引擎实现,并且独立于结果处理(如报表生成或数据库记录)进行。
Locals.ResultList属性
序列使用所有新序列中自动创建的Locals.ResultList来存储结果数据。TestStand在序列执行期间填充ResultList,并将其存储在内存(RAM)中。
ResultList局部变量最初是一个空的容器数组。执行完每个步骤后,TestStand会在数组末尾附加一个新的容器元素,用来存储已执行步骤的结果,并使用以下两个数据源来填充数据:
· 自定义结果属性:从已执行步骤的Step.Result容器中获取。
· 标准结果属性:从TestStand引擎中获取。
自定义结果属性
ResultList中的某些数据是从步骤属性中获取的。 默认状态下,结果收集中仅包含步骤属性“结果(Result)”容器中的属性。例如,步骤结果容器中的两个重要元素是:
· Result.Status:一个字符串元素,表示该步骤的测试结果。
· Result.Error:一种容器,用于存储该步骤的错误信息。
步骤属性会因步骤类型而异,并且许多步骤属性仅针对特定步骤类型存在。例如,Step.Result.Numeric属性特定于“数值限度测试(Numeric Limit Test)”步骤类型。
标准结果属性
除了将步骤属性复制到ResultList之外,TestStand还会向每个步骤添加一组标准结果属性。TestStand引擎将这些结果作为Step.Result.TS属性的子属性添加。 这些属性包括该步骤的识别信息,如步骤名称、类型和定时信息。
下图显示了如何使用步骤结果属性和标准结果属性来填充ResultList。
结果数据基于以下两方面生成:取决于步骤类型的自定义结果属性;所有步骤都相同的标准结果属性
配置结果收集
在结果收集中添加其他属性
您可以使用Execution.AddExtraResult方法向ResultList中添加某些步骤属性。利用此方法,您可以指定属性查找字符串(如“Step.myStepData”),并将该属性纳入具有该属性的所有执行步骤的结果列表中。 此外,也可以在ResultList中指定用于该属性的名称。
例如,过程模型调用Execution.AddExtraResult方法,以便在ResultList中添加Step.Limits和Step.Comp值。由于这些属性不在Step.Result容器中,默认状态下不会收集此类属性。由于此调用操作,这些属性将被添加到执行中包含这些属性的所有步骤的ResultList中。
使用AddExtraResult向结果列表中添加其他步骤属性
有关其他报表属性的更多信息,请参阅TestStand帮助中的自定义结果属性主题。
配置结果收集时间
TestStand结果收集与是否生成报表或数据库记录无关。 在某些情况下,如果不需要记录结果,则可能要对某些步骤或序列禁用结果收集。 以下设置可用于控制记录哪些结果:
· 禁用所有序列的结果记录(Disable result recording for all sequences):位于测试站选项的“执行(Execution)”选项卡中,此设置将完全禁用所有结果收集。 如果您未使用TestStand结果处理功能记录任何数据,请使用此设置。
· 禁用所有步骤的结果记录(Disable result recording for all steps):位于“序列属性(Sequence Properties)”中,此设置将禁用特定序列的结果记录。
· 步骤结果记录选项(Step Result Recording Option):位于“步骤(Step)”属性窗格的“运行选项(Run Options)”中,您可以使用此选项来禁用特定步骤的结果记录。 默认状态下,上述“序列(Sequence)”设置将覆盖此设置。但是,您可以选择启用(覆盖序列设置)(Enabled (Override Sequence Setting))来记录已禁用结果记录的序列中某个步骤的结果。
如果顾虑测试系统性能或系统内存使用情况,请考虑对频繁执行的步骤禁用结果记录,以防止不必要的结果存储。
报表生成
与作为TestStand引擎一部分的结果收集过程不同,报表生成器由TestStand过程模型通过报表生成插件来实现。有关实施报表生成器的详细信息,请参阅《报表生成说明》一文。
报表生成器使用结果收集过程生成的ResultList变量中的结果数据(有关更多信息,请参阅本文档的“结果收集”一节)来生成报表。 本节概述了TestStand中的默认报表生成器。
标记要添加到报表中的数据
报表生成器使用ResultList中收集的结果属性的属性标志,来确定这些属性是否应添加到报表中。利用属性标志,可配置PropertyObjects的行为,包括如何将其添加到测试报表中。
可以通过以下两种方式之一来查看和配置PropertyObject的标志:
1. 使用序列编辑器:右键单击一个属性,然后选择高级(Advanced) » 编辑标志(Edit Flags),查看“编辑标志(Edit Flags)”对话框。 “新标志(New Flags)”字段会显示当前所有选定标志的总和。
使用“编辑标志(Edit Flags)”对话框来配置PropertyObject标志
2. 使用TestStand API:PropertyObject.GetFlags和PropertyObject.SetFlags方法可分别用于获取标志状态和设置标志状态。
每个标志都有一个唯一值,并且属性当前的标志状态是所有标志值的总和。 例如,启用PropFlags_IsLimit(值:0x1000)标志和PropFlags_IncludeInReport(值:0x2000)标志的属性,标志值为0x3000。有关每个标志的其他信息,请参阅PropertyFlags常量帮助主题。
报表生成器使用以下标志来确定是否应将收集的结果添加到报表中。 有关更多信息,请参阅影响报表的属性标志。
· PropFlags_IncludeInReport标志表示报表中始终包含该属性。
· PropFlags_IsLimit标志或PropFlags_IsMeasurementValue标志表示应基于当前的报表选项添加数据。
TestStand报表格式
TestStand提供了许多报表格式,每种格式都各有优缺点。 报表生成器调用特定于格式的序列文件来生成报表文本(例如ReportGen_ATML.seq)。下表显示了有关每种报表格式的更多信息。
1您可以使用报表文件进行自动报表分析,尤其是XML和ATML报表文件,但使用数据库进行自动分析通常会更加有效。 请参阅数据库记录帮助主题,详细了解数据库记录的TestStand功能。
从TestStand 2019版本开始,每种报告格式都可以生成PDF报告,但ASCII (.txt)除外。有关更多信息,请参见“ PDF报告生成”部分。
有关为您的应用选择最佳报表生成策略的更多详细信息,请参阅《选择适当的NI TestStand报表生成策略》。
即时生成报表
如果在“报表选项(Report Options)”对话框的“目录(Contents)”选项卡上启用“即时报表生成(On-The-Fly Reporting)”选项,过程模型将在执行的同时逐步生成报表,而不必等到UUT测试完成。使用即时报表生成时,可以单击“执行(Execution)”窗口中的“报表(Report)”窗格,在执行过程中查看报表。由于报表在测试执行时更新,因此报表视图会在执行测试序列时定期更新,显示新结果。
通常,对于历时较久的测试,如果内存使用和数据丢失防护的重要程度高于测试吞吐量,即时报表生成则是更好的选择。
1要防止内存增加,需要采用其他配置。请参阅《解决TestStand中报表生成的内存问题》,详细了解如何在报表生成过程中防止内存增加。
2此问题在TestStand 2012及更高版本中已得到改善,这些版本提供了相关设置功能,可配置即时报表生成器重新生成报表的频率。 有关这些设置的更多信息,请参阅高级结果处理设置对话框帮助主题。 默认状态下,TestStand 2012及更高版本会在收集了500个步骤结果之后或每执行1.5秒之后(以先到者为准)生成并保留即时报表。 在TestStand 2010 SP1和之前的版本中,报表会在每个步骤之后重新生成。
异步报表生成
在TestStand 2012及更高版本中,报表生成器(和其他结果处理插件)可以异步执行,提高测试吞吐量。 要配置此选项,请选择配置(Configure) » 结果处理(Result Processing),然后选中显示更多选项(Show More Options)复选框。 新线程列表示每个插件的当前设置。
使用此功能时,执行程序可以立即开始测试下一个UUT,同时为当前的UUT生成报表,如下图所示。
注意:即时生成报表时,异步报表生成则不可用。
异步结果处理可提高测试吞吐量的速度,因为下个设备的测试可以立即开始
2 自定义TestStand报表
TestStand报表生成过程的自定义程度很高,您可以根据TestStand应用程序的需求定制生成的报表。 自定义报表时,请使用以下方法:
· 配置报表选项,在不更改代码的情况下进行自定义。
· 使用内置的TestStand功能,将其他数据记录到报表中。
· 修改样式表和/或覆盖报表生成回调,对报表外观进行更重要的更改。
使用“报表选项(Report Options)”对话框
借助通过“报表选项(Report Options)”对话框访问的报表生成选项,可以在不更改代码的情况下自定义TestStand报表。要访问TestStand 2012及更高版本中的对话框,请导航到配置(Configure) » 结果处理(Result Processing)以启动“报表选项(Report Options)”对话框,然后选择报表生成插件的设置图标。 在TestStand 2010 SP1及之前的版本中,请选择配置(Configure) » 报表选项(Report Options)。
您可以通过以下方式使用报表选项对话框来配置报表:
· 更改报表的格式
· 筛选报表以添加特定类型的步骤结果
· 配置报表的外观
· 启用即时报表生成
以下各节详细介绍了每种配置类型。
“报表选项(Report Options)”对话框 –“目录(Content)”选项卡
报表格式
利用“报表选项(Report Options)”对话框,可选择报表的格式。 有关可用报表格式的更多信息,请参阅本文档报表生成部分的“报表格式”一节。 某些报表选项仅适用于特定的报表格式。
ASCII和HTML特定报表选项
ASCII和HTML报表可以通过以下两种方式之一生成:
· 使用序列(Using sequences):报表由ReportGen_txt.seq或ReportGen_html.seq序列文件中的序列生成。利用此方法,您可以通过修改或覆盖报表生成序列,更轻松地自定义报表生成器,但执行速度较慢。如果您计划自定义报表生成器,则建议使用此选项。
· 使用DLL (Using a DLL):报表使用modelsupport2.dll生成,性能更快,但自定义更困难。 如果您计划使用需要很少或不需要自定义的默认报表生成器,则建议使用此选项。
XML和ATML特定报表选项
与HTML报表不同,XML和ATML报表不包含任何格式信息。为了在可读报表中呈现XML格式的原始数据,需要使用XSL样式表。 该样式表定义了报表的样式,并从XML文件中提取数据。 使用样式表,您可以更改报表的外观,而无需对XML数据文件进行任何修改。例如,下图显示了使用TestStand提供的两个不同样式表的同一XML报表示例。
TestStand提供了多种样式表,可用于以不同方式显示XML和ATML报表数据,您可以在“报表选项(Report Options)”对话框中具体指定。您还可以创建自定义样式表以配合使用TestStand报表。 有关样式表自定义的更多信息和示例,请参阅《自定义TestStand XML和ATML报表的格式和外观》一文。
使用水平样式表的“ATML报表”部分
筛选结果
您可以选择在“报表选项(Report Options)”对话框中筛选特定步骤结果类型的信息,例如:
· 测试限度值
· 测试测量值
· 代码模块执行次数
此外,您还可以使用结果筛选表达式来创建自定义筛选条件。TestStand会针对每个步骤结果对该表达式进行求值,如果表达式求值为True,会在报表中添加该步骤。使用“结果筛选(Result Filtering)”下拉列表输入控件选择常用表达式,如排除流控制步骤(如下图所示)。
注意:如果使用XML格式,或者结合使用ATML格式与TestStand 2010 SP1或更早版本,则结果筛选表达式不可用。 在这些情况下,您可以通过修改报表样式表来筛选结果。
更改报表外观
报表选项对话框提供相关设置,用于自定义报表外观,包括:
· 报表颜色(Report Colors):您可以更改各种属性相关的颜色(不适用于ASCII报表)。
· 默认数值格式(Default Numeric Format):配置数值数据如何在报表中显示。
· 数组数据格式(Array Data Format):选择是在报表中以表格、图表形式添加数组,还是将其完全省略。
注意:TestStand报表使用ActiveX控件将数组数据生成图表。 如果在查看报表时此控件不可用,数据仍将以表格形式显示。
配置报表文件路径名
在“报表选项(Report Options)”对话框的报表文件路径名(Report File Pathname)选项卡上,您可以配置报表文件的名称及其存储路径。 使用“文件/目录(File/Directory)”选项来选择存储报表的位置,然后根据您选择的选项使用“UUT报表(UUT Report)”字段来预览报表文件名。
通过选择“文件/目录选项(File/Directory Options)”控件中的按表达式指定报表文件路径(Specify Report File Path by expression)选项,进一步控制报表文件的名称和路径。 可以使用此设置来创建一个表达式,TestStand会对表达式进行求值,从而确定报表的存储位置。此表达式可以包括预定义宏,可在“报表文件路径(Report File Path)”控件的“菜单(Menu)”中访问。
注意:在配置报表表达式时,请使用“已评估报表文件路径(evaluated Report File Path)”字段和预览图像来查看当前表达式的行为。
根据UUT结果对报表文件进行排序
您可以使用报表文件路径表达式中的UUTStatus宏,为成功报表和失败报表创建单独的文件位置。 例如,您可以在自己的文件路径中使用此宏,为成功报表和失败报表创建不同的位置。当使用此宏时,TestStand会在测试执行完成后,重新对报表文件路径表达式求值,因为在此之前,UUT状态是未知的。
根据UUT结果配置其他报表文件路径名
对于使用批处理模型的测试,您可以进一步配置批处理和批处理中各个UUT的报表文件路径行为。 要访问这些设置,请在“模型类型(Type of Model)”字段中选择批处理。 例如,您可以使用每个批处理设置的新UUT报表(New UUT Report)为每个批处理创建单独的报表文件。 有关所有可用设置的更多信息,请参阅“报表选项(Report Options)”对话框帮助主题。
有关向报表添加自定义数据的功能
在许多情况下,除TestStand默认记录的结果之外,测试应用程序还需要您在报表中记录其他数据。为了满足此需求,TestStand提供了多种内置功能,可轻松将自定义数据记录到报表中:
· 参数记录
· 其他结果
· ReportText属性
· 配置自定义步骤类型的报表数据
以下各节详细介绍了这些功能。
参数记录
配置代码模块参数时,选择模块(Module)选项卡中的记录(Log)框,可以轻松记录测试步骤的参数数据,如下所示。启用此复选框将配置选定的参数,使其自动显示在“报表(Reports)”或“数据库记录(Database Logs)”中,无需进一步配置。
代码模块 - 启用记录复选框
其他结果
您可以使用“步骤设置(Step Settings)”窗格中“属性(Properties)”选项卡的“其他结果(Additional Results)”面板,添加任意步骤结果的其他自定义数据。
配置其他结果
TestStand提供了一些预配置的其他结果来记录通用属性,如步骤注释和需求信息。 要访问这些预配置的结果,请选择从列表添加结果(Add Result From List)按钮,然后从列表中选择一个项目。您还可以为每个其他结果条目指定条件表达式。 仅当表达式求值为True时,才会记录结果。
有关其他结果设置的更多信息,请参阅TestStand帮助中的“其他结果编辑(Additional Results Edit)”选项卡主题。
使用Result.ReportText
Result.ReportText是“结果(Result)”容器中的附加字符串元素,用于存储步骤的自定义信息。如果字符串不为空,报表生成器会将ReportText字符串作为字段添加到报表中。ReportText字段支持所有报表格式(除ASCII以外)的HTML标签,因此您可以使用此字段添加富文本元素,如相关的图像或超链接。
如需了解如何将图片插入到报告中,请查看“如何在TestStand报告中插入图片”部分。
下图显示了在ReportText属性中使用HTML将图像嵌入步骤结果中的示例。
在Result.ReportText中显示图像的报表
向报表中添加自定义步骤类型属性
使用TestStand,您可以创建自己的自定义步骤类型以实现特定功能。在这种情况下,通常需要将自定义步骤类型数据记录到报表中。
注意:如果您不熟悉TestStand中的自定义步骤类型,请在阅读本节之前参阅《自定义步骤类型开发的最佳实践》一文,以获得更多信息。
若要创建报表中即将显示的自定义步骤属性,请按照下列步骤操作:
1. 在“类型(Types)”窗格中,将自定义属性添加到该步骤的“结果(Result)”容器中。 执行此操作,可确保通过结果收集过程向ResultList中添加该属性。
2. 启用属性的IncludeInReport标志,以便报表生成器将数据添加到报表中:
· 右键单击该属性,然后选择属性(Properties)...
· 单击“高级(Advanced)”按钮,然后选择标志(Flags)...
· 选中IncludeInReport选项,然后单击两个对话框的确定(OK)
覆盖报表回调
此过程模型提供了许多回调,您可以覆盖这些回调以更改特定客户端序列文件的模型功能。 该机制对于自定义报表生成器也很有用。 本节介绍了以下常见的自定义方法:
· 以编程方式设置报表选项
· 向报表中添加其他UUT和测试站数据
· 直接自定义报表生成器
注意:如果您不熟悉过程模型回调,请在继续学习本节之前参阅使用回调序列修改过程模型帮助主题。
以编程方式设置报表选项
除了使用“报表选项(Report Options)”对话框外,您还可以通过覆盖测试序列中的ReportOptions回调,以编程方式设置报表选项。 要覆盖序列文件中的回调,请按照下列步骤操作:
1. 在序列窗格中右键单击,然后选择序列文件回调(Sequence File Callbacks)...
2. 选择ReportOptions回调,然后单击添加(Add)。
3. 单击确定(OK)关闭对话框。 请注意,新的ReportOptions序列已创建,如下所示。
执行序列时,过程模型将在加载报表选项对话框中设置的当前报表选项后立即调用此回调序列。 Parameters.ReportOptions变量中包含了当前报表选项。 您可以修改这些属性的值以更改当前执行的报表选项。 这些选项不会影响“报表选项(Report Options)”对话框中的设置或任何其他执行的设置。例如,要为序列文件启用即时报表生成,您可以使用以下表达式创建一个声明步骤:
Parameters.ReportOptions.UseonTheFlyReporting =True
将其他UUT和测试站数据记录到报表页眉中(TestStand 2013及更高版本)
测试应用程序可能需要您提供有关UUT的其他识别信息,如制造商所在地。 有关UUT和测试站的数据由过程模型存储在Parameters.UUT和Parameters.ModelData.StationInfo变量中。 您创建的大多数模型回调都会将这些属性作为参数包含在内,从而允许您在回调中访问此数据。在TestStand 2013及更高版本中,UUT和StationInfo属性包含非结构化容器AdditionalData子属性。 您可以在运行时向此属性中添加数据,而无需对UUT和StationInfo数据类型进行任何更改。
要使用AdditionalData容器以编程方式向页眉添加自定义UUT数据,请按照下列步骤操作:
1. 覆盖客户端序列文件中的PreUUT回调。 请注意,新的回调序列包含Parameters.UUT属性
2. 添加一个声明步骤,在Parameters.UUT.AdditionalData容器中动态添加属性。例如,此表达式创建两个字符串数据子属性:
Parameters.UUT.AdditionalData.SetValString("Manufacturer.Name",1,"National Instruments"),
Parameters.UUT.AdditionalData.SetValString("Manufacturer.Location",1,"Debrecen, Hungary"),
注意:1使用SetValString方法,因为PropertyOption会创建一个属性(如果该属性不存在)
3. 添加一个声明步骤,为AdditionalData属性设置IncludeInReport标志,以便将所有子属性添加到报表中:
Parameters.UUT.AdditionalData.SetFlags("",0,PropFlags_IncludeInReport)
以下报表在AdditionalData容器中添加了自定义数据。 添加自定义测试站数据的过程类似,但是使用的是Parameters.ModelData.StationInfo属性,而不是Parameters.UUT。
使用UUT.AdditionalData容器向报表页眉添加制造商信息
注意:此外,您可以在编辑时手动向过程模型入口点的Locals.UUT或Locals.ModelData.StationInfo容器添加数据和启用IncludeInReport标志,为所有客户端序列文件添加UUT或测试站数据。
直接自定义报表生成器功能(HTML和ASCII格式)
报表生成器定义了许多可以在客户端序列文件中覆盖的回调。这些回调中的每一个都会在相应的报表文本生成后执行,并且您可以修改报表生成器的默认输出。 仅当上述方法均不可行时,才应使用这些回调来添加自定义数据。
仅当在“报表选项(Report Option)”对话框的“目录(Contents)”选项卡上启用“选择用于生成报表正文的报表生成器(Select a Report Generator for Producing the Report Body)”选项的“序列(Sequence)”选项时,才执行这些回调。 此选项可用于HTML和ASCII报表。
· ModifyReportHeader: 报表生成器结果处理组件从其Post序列中调用此回调,对其进行覆盖,以修改报表页眉。 Parameters.ReportHeader属性包含默认的报表页眉。
· ModifyReportEntry: 报表生成器结果处理组件从其Post序列中为ResultList中的每个结果调用此回调,对其进行覆盖,以修改为每个结果生成的报表部分。Parameters.ReportEntry属性包含为当前ResultList条目生成的报表数据。
· ModifyReportFooter:报表生成器结果处理组件从其Post序列中调用此回调,对其进行覆盖,以修改报表页脚。Parameters.ReportFooter属性包含默认的报表页眉。
配置报表的外观
自定义报表外观的方法与报表格式密切相关。 对于ASCII和HTML报表,外观信息和报表数据紧密结合。 因此,更改报表的外观需要直接修改报表生成器代码,这需要对报表生成器有大概的了解,本文档对这部分内容不做介绍。 有关实施报表生成器的更多信息,请参阅《报表生成说明》一文。
如本文档“报表选项”部分所述,XML和ATML报表使用样式表通过原始报表数据生成可读报表。 您可以通过编辑样式表来自定义这些报表的外观,而无需修改报表生成器本身。 有关样式表自定义的更多信息和示例,请参阅《自定义TestStand XML和ATML报表的格式和外观》一文。
3 结论
在TestStand中自定义报表是一项常见的任务,TestStand提供了许多功能来自定义报表的内容、功能和样式。请参见以下流程图,帮助您确定如何实施自定义报表。
“选择正确的技术以自定义报表”的流程图 “选择正确的技术以自定义报表”的流程图