Pianola是一个Haskell库,它允许您通过网络连接监视和控制JavaSwing应用程序。这对于执行自动化GUI测试非常有用。
要使用库,测试中的应用程序(AUT)必须使用Java端Pianola代理进行检测。有关如何编译设置代理的说明,请查看后端/java-swing文件夹。
Java Swing示例应用程序包含在后端/java-swing-testapp文件夹。
有关如何使用该库的说明,请参阅的Haddock文档皮亚诺拉。辅导的包裹。
这个测试文件夹包含库的自动测试。要使测试工作,Java示例应用程序必须启动并运行。
这个示例文件夹包含用于与流行Java Swing应用程序交互的脚本(仅数据库可视化工具目前)。查看相应的自述文件,了解如何为这些应用程序设置Pianola代理的说明。
Pianola提供了一些工具的功能,如马拉松赛跑,尽管它没有任何录制功能。脚本必须手写。此外,与马拉松不同,皮亚诺拉并不关心启动AUT,而AUT必须通过其他方式启动。
理论基础
-
我不喜欢许多GUI测试自动化框架在开发测试脚本时采用的“记录”方法。在任何最低复杂度的测试用例中,您都必须以聚合方式重构脚本,以消除重复并增加模块性。我更喜欢以增量方式编写脚本,理想情况下是借助于良好的REPL。
-
有时,如果测试框架需要控制AUT的启动,而不是通过其他方式启动,这可能会变得不方便。
-
Pianola不要求客户端和AUT驻留在同一台机器上。
-
我偏爱静态类型语言。当用动态类型语言开发的长时间运行的脚本由于诸如变量名称拼写错误之类的愚蠢错误而中途失败时,我感到非常恼人。我意识到这种不便是通过单元测试解决的,但当你开发的东西他们自己测试脚本,进行测试不是有点过分吗?
-
与前一点相关:静态类型语言为您提供了更多的保证,即在重构时不会破坏任何东西。
-
Haskell(至少在理论上)擅长处理树状结构,比如GUI中组件的包含层次结构。
-
Haskell的高阶函数应该(至少在理论上)在定位单个组件时提供更大的灵活性。例如,根据应用于文本的任意谓词识别组件。
-
马拉松赛跑是一个多功能的工具,可以在测试Swing GUI时处理许多拐角情况。尽管如此,还是有一些烦恼。(据我所知)除了通过完全相等之外,没有一种简单的方法可以通过文本以其他方式识别组件。
-
马拉松式的烦恼#2:(据我所知)没有一种简单的方法来处理在测试执行期间可能出现或不出现的组件。例如,仅偶尔出现的警告对话框。似乎没有“查找组件,如果它存在”操作。
-
马拉松的烦恼#3:(据我所知)没有一种方法可以让马拉松脚本在GUI中找不到组件时快速失败。有时他们会阻塞很长一段时间才失败!