soapUI有高度的定制可能性; soapUI Pro中可打印的报告基于非常灵活的JasperReports报告引擎。 这些报告是从JasperReports生成的特定的基于XML的模板,可以在项目和全局层面进行定制,从而使您在创建的所有报告中都能轻松获得通用的外观和感觉。
在soapUI中创建可打印报告很容易; 只需从Report对话框中的 Report Type 下拉列表中选择相应的报告,则所选报告将自动编译并按配置生成。
Quick tip: 要充分了解soapUI Pro中的报告基础架构,您应该很好地掌握JasperReports及其模板语言的工作原理,否则下面的一些解释可能很难放在内容中
1. 报告管理
soapUI项目窗口包含一个报告选项卡,其中所有全局和项目级报告都可用:
不同的子选项卡可让您访问主报表,子报表和模板以及项目级报表参数的底层XML。 可以根据需要创建,删除和编辑项目级别项目,但不能在soapUI中修改全局项目。 它们必须在文件系统中进行修改,并重新加载顶部工具栏中的“重新加载”按钮以进行更新(稍后再进行更改)。
2. 报告结构
soapUI结构报告如下:
- Main Reports是reporting对话框中显示的顶层模板,可在上面的 Available Reports选项卡中显示。 主报表模板是一个标准的jasperReport模板,它接收报表范围特定的模型项作为其DataSource,例如生成LoadTest报表时,传递给报表的数据对象是WsdlLoadTest,其属性可以定义为 报告和已使用。
- 主报表可以通过标准的JasperReports子报表机制结合soapUI特定的URL前缀(“subreport:”),包括任何数量的子报表(在“子报表”选项卡中显示)。 子报表从生成报表时可用的指定DataSource获取其数据。 看看Subreports选项卡,我们可以看到所有可用的子报表及其相应的DataSource:
例如,MetricsReport子报表从ReportMetrics获取其数据,并包含在所有主要报告中,并具有以下语法:
y="98" width="535" height="30" isRemoveLineWhenBlank="true"> $P{IncludeResults} ... $P{TestSuiteMetrics} "subreport:MetricsReport"
您可以看到subreportExpression使用soapUI特定的“subreport:”URL语法,soapUI用于查找指定的SubReport模板。 TestSuiteMetrics暴露的字段在MetricsReport模板中相对定义:
... ...
- Templates 允许管理模板XML的公共块。 选项卡如下所示:
然后可以使用熟悉的属性扩展语法将上述示例模板插入到任何报表中:
- 最后,参数允许对报告内容进行参数化,而无需重新编译底层模板。 参数选项卡允许您根据需要添加参数值:
Quick tip: 标准soapUI属性扩展可用于上述任何模板或参数值。 例如,如果要在报表中显示当前用户名,您可以在模板中的相应位置添加$ {#System#user.name}。 这提供了非常灵活的报告,但可能降低报告性能,因为soapUI缓存编译报告模板以供重用。 每当报表模板中的属性扩展中的值更改时,soapUI将需要重新编译包含的模板。
3. 报告存储
所有全局报告模板都存储在soapUI-Pro \ bin \ reports文件夹下的文件系统中:
The base folders are:
- logos : 包含使用 logo: protocol图像标识引用的任何图像
- reports : 包含所有全局主要报告模板,每个子文件夹对应于“ Available Reports”选项卡中的“Report Type”列
- subreports : 包含所有全局子报表模板,每个子文件夹对应于“子报表”选项卡中的报表类型列
- templates :
Opening one of these folders reveals the following:
在这里可以看到,每个模板都保存为两个文件:
- 一个* .jrxml文件,它是一个jasper模板,可以在任何JasperReports编辑器或任何文本编辑器中进行编辑
- 一个* -config.xml文件(以jrxml命名),其中包含soapUI使用的模板的元数据。
如果要更改任何全局项目的模板内容,请直接在文件系统(通过修改jrxml文件)中执行此操作,然后在保存更改后按“报告”选项卡工具栏中的“Reload”按钮:
样式和图像
默认报告使用名为styles.jrtx的通用样式模板(见上面的截图)。 报告中包含以下内容:
该文件包含许多标题的样式定义等:
修改此文件将更改所有报告的一般外观。
相应地,图标和图像可以在存储图标文件夹中替换:
自定义全局报告
如果要自定义全局报告的外观而不修改默认的报表,则可以使用“自定义全局报告”功能;
- Create a copy of the global reports folder locally
- Apply desired customizations to the templates in this folder
- Specify the path to the folder in the global soapUI Pro Preferences:
- Reports and templates created here will be shown as global reports in the different Reporting Tabs and used as such.
项目级别报告存储
当您在项目级别创建自定义报告时,这些报告将与项目数据的其余部分一起存储在项目文件中,以便轻松重新分配。 如果将项目保存为soapUI Pro中的复合项目,则报告将保存在类似于Composite Project文件夹中的全局文件结构的文件结构中,从而允许您使用外部工具编辑这些报告,就像全局报告一样。
Customizing Templates
soapUI Pro允许高度的报告定制。 您可以根据需要创建任意数量的报表和子报表模板。 这些可以包含内部DataSet和任何外部源(数据库等)公开的数据 - 就像任何JasperReport一样。 我们来看看如何在项目级别创建一个简单的自定义报告,以及如何使用不同的自定义机制。
1. 创建自定义模板
- 我们首先在项目层面增加一个全新的报告; 按可用报告工具栏中的添加报告模板按钮:
- 将名称设置为“属性”,将类型设置为COMMON(意味着它将在所有级别都可用)。 按OK可以给我们:
- 这里我们可以选择我们想要自动包含在报表中的子报表。 选择PropertiesReport子报表,然后按OK。 生成的模板可以在编辑器中看到:
- 如果我们现在转到“项目概述”选项卡并添加一个属性:
- Press the Create Report button in the toolbar:
- Selecting our newly created Properties and clicking OK gives us the following report:
- 字符串null不完全符合。 我们来看看属性SubReport,在模板中我们可以看到以下内容:
- 看来,Type作为参数传递给报表。 我们为此添加一个硬编码的值:
- If we now recreate the report we get:
2. 添加参数
generating the report now gives us:
- 我们添加一个参数来设置报告标题(而不是Sample Project)。 返回模板并添加:
- 现在使用默认值将参数添加到Parameters选项卡:
- 这个参数可以在soapUI Pro中的任何级别覆盖,因为这是一个Common报告,我们可以生成它,无论我们想要什么,例如; 对于TestCase,我们可以设置ReportTitle:
1. 报表定制对象
参数对象
params对象是一个标准的StringToObjectMap,用于保存所有定义的报告参数的值,包括要填充在报告模板中定义的和“Report Parameters”选项卡中定义的那些参数。 设置参数值为:
params.<parametername> = <value>
例如在我们的定制文档中,我们定义了一个“ReportTitle”参数,在我们的脚本中,我们可以通过编程方式将当前日期添加到标题中:
报告对象
报告对象有两个主要用途:
- 添加要显示在报表的指标部分的指标
- 添加/修改子报表数据
2. 向report添加指标
soapUI附带的每个默认报告都包含一个指标部分,显示MetricsReport模板呈现的相关执行指标:
指标被分组并可以在左边可选的显示。 添加指标非常简单:
report.addMetric( "user.name", System.getProperty( "user.name" ))
将“用户名”指标添加到Base Metrics category类别,然后在主报表中显示为:
如果我们想把它们放在我们自己的类别之下; 让我们做:
report.addMetric( "System Properties", "user.name", System.getProperty( "user.name" ), null )
which gives us:
嗯...为什么不添加所有的? 脚本是:
for( name in System.properties.propertyNames() ) { report.addMetric( "System Properties", name, System.getProperty( name ), null ) }
and the result:
(and on it went for another 5 pages...)