再次 - Jasperreports ......
因此,我们已经获得了与图表类似的图表和表格的报告:
JAN | FEB | MAR | ... | DEC | SUM
----+-----+-----+-----+-----+----
5 | 1 | 9 | 120 | 20 | 155
(Numbers represent amounts of vehicles)
在这些表格下方有多个表格,这些表格包含上表中的数据,详细介绍(以深入的方式)。
我们将这些报告导出为PDF并在Web应用程序中作为可下载文档提供。所需数据在专门的Java工厂中计算。根据报告,有一个工厂提供带有哑数据对象的列表。这些对象包含显示在图表和表格中的聚合数字。
此外,这些数字是超链接。他们转发到一个servlet,它提供XLS导出,其中包含有关每辆车的详细数据。当然,每个超链接都有一堆servlet参数。
我们想要的是什么:
完整的自动化测试,执行以下操作:
所以测试应该与此类似:
Test -> generate PDF report -> check table integrity -> parse links -> check XLS -> assertEverythingLooksFine()
我们尝试了什么:
目前,PDF报告已写入ByteArrayOutputStream
,以将数据转发至PdfReader
,并使用SimpleTextExtractionStrategy
对其进行解析。通过这种方式,可以检查桌子的完整性,尽管它非常麻烦。此外,无法获取超链接。另一个想法是将报告导出为HTML而不是PDF以获取超链接。检查表的完整性更加麻烦,因为JasperReports不会生成HTML表,而是生成一堆DIV。
附加说明:
我的问题:
我们使用的是哪个版本:
我希望这个问题不会太乱,而且你不能口头上打死我;)
答案 0 :(得分:0)
正如@Vash所说,这不是可以回答/讨论此类主题的地方。
然而,如果有人遇到类似问题并找到此网站,我会发布我们的解决方案。
获取所需 - 由JasperReports生成 - 输出
既不生成HTML而不生成PDF,也不使用某种API解析最终的PDF文档,这是一个非常令人满意的解决方案。我们所做的是编写一个我们链接到报告的scriptlet。在报告中,在显示车辆数量的地方调用scriplet。车辆数量和生成的链接作为参数传递给scriplet,方法再次返回数字。
现在,scriplet有一个静态Map<String, Double>
,它收集所有链接和数字。生成报告后,我们可以获取此Map
并分析相应的XLS导出。这样我们就可以比较PDF和XLS中的车辆数量。
此方法的缺点是,PDF报告生成为空OutputStream
。
检查表格数据的完整性
幸运的是,显示的数据是在java工厂中生成的。因此,我们所要做的就是实例化它并检查在特殊数据类和集合中提供的输出。这样我们就可以隐式验证报告中的数据是否正确。
使用包含三个报告和大约240个XLS文档的设置运行完整的单元测试大约需要五分钟。作为副产品,我们有一大堆XLS表(也写成空OutputStreams
),这不是很好,但另一方面,它只是一个不必高效的单元测试。