【问题标题】:Has anybody used SIKULI for testing their GUI-based apps?有没有人使用 SIKULI 来测试他们基于 GUI 的应用程序?
【发布时间】:2011-01-08 17:03:07
【问题描述】:

SIKULI 似乎具有巨大的潜力。有没有人尝试使用它作为测试工具?还是更适合为用户自动执行操作?

【问题讨论】:

    标签: java user-interface testing sikuli


    【解决方案1】:

    引用Unit Testing for GUI(在项目Documentation):

    Sikuli 旨在通过与 junit 集成来支持 GUI 的单元测试。单元测试面板可以通过单击 View/Unit Test 或 Mac 上的快捷键 Cmd-U(或 Windows/Linux 上的 Ctrl-U)打开。

    所以,虽然我的理解是 SIKULI 最初是针对 GUI 自动化的,但它绝对可以用于 GUI 测试(如果你认为 GUI 测试 = GUI 自动化 + 验证框架,这是密切相关的)。查看Unit testing for GUI (JEdit) 以获得完整示例(并查看图像上的assertXXX)。

    事实上,我看到了 SIKULI 在测试方面的巨大潜力,因为它似乎使编写测试变得非常容易,即使没有编写任何实际应用程序的一行(例如,仅使用一些初始模型)。 SIKULI 可以成为各种类型测试(BDD、验收测试等)的绝佳伴侣。

    这真是一款了不起的软件,令人印象深刻。

    【讨论】:

      【解决方案2】:

      我将 Sikuli 广泛用于 UI 测试自动化。我在 2011 年 1 月发现了 Sikuli 派对“迟到”了。我真的很高兴我发现它晚了,因为虽然它早些时候很有希望,但我认为直到 Sikuli x1.0-rc1(发生在 12 月) 被释放,它已准备好迎接黄金时段。

      以前,我使用 TestQuest 和 EggPlant 进行 UI 测试自动化。在我看来,Sikuli 击败了他们两个。我真的相信它有可能极大地改变人们更好地执行 UI 测试自动化的方式,并将其传播给我周围的人。

      正确使用 Sikuli 意味着您遵循“记录和播放”模式。相反,您必须将使用 Sikuli 开发测试自动化 - 正如您需要使用所有工具一样 - 作为软件开发任务。

      我们目前正在将我们为 EggPlant 构建的 UI 自动化 DSL(领域特定语言)移植到 Sikuli。我们将在 DSL 中利用的关键特性之一是 Sikuli 的文本识别功能。这将允许我们在产品的各种本地化版本中运行相同的脚本。

      由于 Sikuli 建立在 OpenCV (for image recognition)tesseract-ocr (for text recognition) 之上,因此它具有令人难以置信的强大功能和灵活性。

      【讨论】:

        【解决方案3】:

        【讨论】:

          【解决方案4】:

          @乔丹, Absolutley 在“正确使用 Sikuli”上的观点意味着您没有遵循“记录和回放”模式。相反,您必须将使用 Sikuli 开发测试自动化 - 正如您需要使用所有工具一样 - 作为软件开发任务。

          我创建了一个端到端测试自动化解决方案,用于测试由全球最大的 PC 制造商生产的视频会议应用程序。他们不明白这是一个完整的开发项目,而不是任何猴子都可以执行的点击操作。试图解释使用动态类型语言编码的挑战是不可能的。

          根据我的经验,最大的挑战是图像管理。我在测试自动化的第一次迭代中使用了文件系统和 configparser。使用 configparser 有效,但是很难实现。将来我计划使用 blob。 Sikuli 不支持从数据库中直接提取图像(目前),尽管我确实有一个解决方法。

          使用 IDE 至关重要,因为 Sikuli IDE 没有开发工具。我配置的 2 个 IDE,NetBeans 和 Eclipse/PyDev 有自己的一组问题。它们非常适合编码,但是错误错误、空白注入和代码丢失使两者都不是理想的解决方案。我在 NetBeans 中编码和测试,在 SikuliIDE 中执行,并将所有内容保存在记事本中作为备份。

          尽管遇到任何困难,我还是 Sikuli 的忠实支持者。 Sikuli 有可能改变测试自动化,让整个 QA 社区都可以访问它,而无需成为 OO 编码器。

          【讨论】:

            【解决方案5】:

            使用 Flex Web 应用程序录制工作流。花了一段时间想出一个可靠的策略来创建屏幕截图,但是一旦我做到了,即使我改变了我的桌面配色方案,脚本仍然可以工作!当您需要单击一组类似控件(即复选框、输入字段)中的特定控件时,语法会有些尴尬。看起来唯一的方法是将find()right(); left(); inside()结合使用。似乎屏幕截图越小,检测到的就越可靠。在我看来,一个好的做法是在屏幕截图中只包含重要的对象,并使它们尽可能原子,但不影响它们的独特性。

            【讨论】:

              【解决方案6】:

              对于 Sikuli 较少以开发人员为中心的测试自动化,还可以查看 RobotFramework.org。有一个关于如何为 Robot Framework 制作(自定义)Sikuli 测试库的教程

              http://blog.mykhailo.com/2011/02/how-to-sikuli-and-robot-framework.html

              我也创建了一个简单的通用版本

              http://code.google.com/p/simplesikuli

              如果 Sikuli 在窗口处理、GUI 控件、鼠标和键盘交互方面存在限制,您可以随时使用另一个出色的免费测试工具对其进行补充:AutoIt。 AutoIt本身也有局限性,当你将它与Sikuli结合使用时,它们可以弥补每个工具的不足,以取代商业级的GUI测试工具。

              【讨论】:

                【解决方案7】:

                这是我对 Sikuli 在测试自动化方面的出色表现的看法:http://pculture.org/devblogs/mirotesting/2011/06/24/using-sikuli-to-automate-miro-testing/

                我有一个可靠的 Miro 跨平台测试套件。

                【讨论】:

                  【解决方案8】:

                  我实际上正在编写一个使用 sikuli 进行 GUI 测试/错误处理的框架。太好了。

                  【讨论】:

                    【解决方案9】:

                    我使用 sikuli 进行 GUI 测试,我也能够将它与 HUDSON 集成。

                    【讨论】:

                      【解决方案10】:

                      我刚刚使用 Skikuli + RobotFramework 发布了我自己的 GUI 应用程序测试框架。

                      SikuliFramework 在 Sikuli 之上提供了面向对象的抽象,以协助交互 GUI 元素,例如用于 GUI 自动化和测试的按钮集、复选框、单选按钮、窗口和对话层次结构。它还与 RobotFramework 紧密集成。

                      https://github.com/smysnk/sikuli-framework

                      【讨论】:

                        【解决方案11】:

                        Sikuli 基于静态图像匹配。所以它只适用于GUI足够稳定的情况。对于动态 GUI,如动画或包含某种随机性的 GUI,它并不适用。

                        而Sikuli 只涵盖了测试的视觉部分。它不知道内部状态是否确实如预期的那样。

                        【讨论】:

                          【解决方案12】:

                          我是 Sikuli 的粉丝,我相信它是对其他测试的补充,可以节省大量的手动测试工作。

                          但是,要做到这一点需要时间。 我在两年的时间里给了它第二次,第二次因为我对环境更熟悉了,所以我能够取得很好的成绩。

                          它带有一个直观的 IDE,python 可以很容易地扩展一些东西。 更改点击位置、设置容差和记录内容非常容易。一旦掌握了如何记录和检查文档,就可以轻松使用最少的图像并提高准确性。它可以很容易地捕捉 GUI 中的变化并得出结果。等待某个事件也很容易。错误检查很容易。

                          最大的问题是,如果您只是在另一台机器上运行它而不是记录它的机器,那么记录的测试通常会失败。它可能与基于图像比较的模式匹配有关。可以通过给出容差值来提高匹配模式的概率。但有时不断改变容差会很烦人。我的建议是在不同平台上使用不同的映像集,最好在单个机器或 VM 上运行。

                          一旦您拥有一套通用的工作流程,您就可以创建一个包含这些通用功能的库,例如(打开-关闭-保存项目、更改设置)并在不同的脚本中使用。随着图书馆变得全面,这变得非常容易。这也意味着您只需要在一个位置更改脚本,它将反映在所有脚本中。

                          我还创建了一个简单的框架(附加图片)来使用 C# .Net 运行测试并记录结果。可以利用任何东西来创建一个简单的测试运行应用程序。它只需要在命令行上运行测试并检查结果。

                          我在一个测试资源有限的小团队中工作。通过 Sikuli,我实际上节省了现有 QA 团队的工作量,还帮助自己在将其推送到 main 之前捕获了错误。

                          我向我公司的其他团队成员推荐了 Sikuli,他们使用它来为 ML 模型生成数据集。他们通过使用参数自动化他们的 Engg 应用程序来做到这一点。

                          Sikuli 最初需要时间来适应。但是如果做得好,它可以节省很多精力。

                          【讨论】:

                            猜你喜欢
                            • 2011-01-18
                            • 1970-01-01
                            • 1970-01-01
                            • 1970-01-01
                            • 1970-01-01
                            • 2015-05-23
                            • 1970-01-01
                            • 1970-01-01
                            • 2014-09-20
                            相关资源
                            最近更新 更多