SIKULI似乎具有巨大的潜力。有没有人尝试使用它作为测试工具?还是更适合为用户自动执行操作?
12 回答
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、验收测试等)的绝佳伴侣。
这真是一个了不起的软件,非常令人印象深刻。
我广泛使用 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(用于图像识别)和tesseract-ocr(用于文本识别)之上,因此它具有令人难以置信的强大功能和灵活性。
@jordan,“正确使用 Sikuli”上的 Absolutley 点意味着您没有遵循“记录和播放”模型。相反,您必须将使用 Sikuli 开发测试自动化 - 正如您需要使用所有工具一样 - 作为软件开发任务。
我创建了一个端到端测试自动化解决方案,用于测试由世界上最大的 PC 制造商制造的视频会议应用程序。他们不明白这是一个完整的开发项目,而不是任何猴子都可以执行的点击操作。试图解释使用动态类型语言编码的挑战是不可能的。
根据我的经验,最大的挑战是图像管理。我将文件系统和 configparser 用于测试自动化的第一次迭代。使用 configparser 是可行的,但是很难实现。将来我计划使用 blob。Sikuli 不支持直接从数据库中提取图像(但),尽管我确实有一个解决方法。
使用 IDE 至关重要,因为 Sikuli IDE 没有开发工具。我配置的 2 个 IDE,NetBeans 和 Eclipse/PyDev 有自己的一组问题。它们非常适合编码,但是错误错误、空白注入和代码丢失使两者都不是理想的解决方案。我在 NetBeans 中编码和测试,在 SikuliIDE 中执行并将所有内容保存在记事本中作为备份。
尽管遇到任何困难,我还是 Sikuli 的忠实支持者。Sikuli 具有改变测试自动化的潜力,使整个 QA 社区都可以访问它,而无需成为 OO 编码器。
使用 Flex Web 应用程序录制工作流。花了一段时间才想出一个可靠的策略来创建屏幕截图,但是一旦我做到了,即使我改变了我的桌面配色方案,脚本也能继续工作!虽然当您需要单击一组类似控件(即复选框、输入字段)中的特定控件时,语法会有些尴尬。看起来唯一的方法是find()
结合使用 right(); left(); inside()
. 似乎屏幕截图越小,检测到的就越可靠。在我看来,一个好的做法是在屏幕截图上只包含重要的对象,并使它们尽可能原子,但不影响它们的独特性。
对于 Sikuli 较少以开发人员为中心的测试自动化,还可以查看 RobotFramework.org。有一个关于如何为机器人框架制作(自定义)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 测试工具。
这是我对 Sikuli 在测试自动化方面的出色表现的看法:http: //pculture.org/devblogs/mirotesting/2011/06/24/using-sikuli-to-automate-miro-testing/
我有一个可靠的 Miro 跨平台测试套件。
我实际上正在使用 sikuli 编写一个用于 GUI 测试/错误处理的框架。这很棒。
我使用 sikuli 进行 GUI 测试,我也能够将它与 HUDSON 集成。
我刚刚使用 Skikuli + RobotFramework 发布了我自己的 GUI 应用程序测试框架。
SikuliFramework 在 Sikuli 之上提供了一个面向对象的抽象,以帮助交互 GUI 元素,例如用于 GUI 自动化和测试的按钮、复选框、单选按钮、窗口和对话层次结构集。它还与 RobotFramework 紧密集成。
Sikuli 基于静态图像匹配。所以它只适用于GUI足够稳定的情况。对于动态 GUI,如动画或包含某种随机性的 GUI,它并不适用。
而Sikuli只涵盖了测试的视觉部分。它不知道内部状态是否确实如预期的那样。
我是 Sikuli 的粉丝,我相信它是对其他测试的补充,可以节省大量的手动测试工作。
但是,要做到正确还需要时间。我在两年的时间里给了它第二次,第二次因为我对环境更加熟悉,所以我能够取得很好的成绩。
它带有一个直观的 IDE,python 可以很容易地扩展一些东西。更改点击位置、设置容差和记录内容非常容易。一旦掌握了如何记录和检查文档,就可以轻松使用最少的图像并提高准确性。它可以很容易地捕捉 GUI 中的变化并得出结果。等待某个事件也很容易。错误检查很容易。
它最大的问题是,如果您只是在另一台机器上运行它而不是记录它的机器,那么记录的测试通常会失败。它可能与基于图像比较的模式匹配有关。可以通过给出容差值来提高匹配模式的概率。但有时不断改变容差会很烦人。我的建议是在不同平台上使用不同的映像集,最好在单台机器或 VM 上运行。
一旦您拥有一组通用的工作流程,您就可以创建一个包含这些通用功能的库,例如(打开-关闭-保存项目、更改设置)并在不同的脚本中使用。随着图书馆变得全面,这变得非常容易。这也意味着您只需要在一个位置更改脚本,它将反映在所有脚本中。
我还创建了一个简单的框架(附图片)来使用 C# .Net 运行测试和记录结果。可以利用任何东西来创建一个简单的测试运行应用程序。它只需要在命令行上运行测试并检查结果。
我在一个测试资源有限的小团队中工作。使用 Sikuli,我实际上节省了现有 QA 团队的工作量,还帮助自己在将其推送到 main 之前捕获了错误。
我向我公司其他团队的成员推荐了 Sikuli,他们使用它为 ML 模型生成数据集。他们通过使用参数自动化他们的 Engg 应用程序来做到这一点。
Sikuli 最初需要时间来适应。但是如果做得好,它可以节省很多精力。