2011-05-12 230 views
8

不幸的是,我有一个GUI桌面应用程序在Windows上运行,并使用Borland C++编译器进行编译。我知道这是一项非常古老的技术,但那就是生活。我工作的公司拥有许多QTP的免费许可证。但说实话我不喜欢这个工具,我想用一些开源替代方案来改变它。C++ GUI桌面窗口应用测试自动化工具/库/框架

我有一个使用Selenium和一些java swing applets的自动化Web服务的实验。 我创建了基于Java/JUnit的测试。我想知道如果我可以在Java中创建一些测试来测试我的C++应用程序 - 那太棒了。如果我不能使用任何C/C++库创建我自己的测试框架,那么这是不可能的。

这不应该是单元测试。我想创建一套功能测试。 我希望能够本地化像按钮,表格,单元格等对象,执行像点击,改变焦点等动作。

另外我有权访问源代码。但这是一个老式的意大利面代码,我对C++应用程序没有太多的经验。

你有什么建议?

回答

5

开源工具

White是一个基于.NET UI自动化工具,可以自动其他类型之间的Win32应用程序。只要您的应用程序中使用的控件使用Windows的标准UIAutomation挂接公开他们的内容/行为,那么您应该可以使用它来做你所需要的。

UIAutomation Verify是另一个CodePlex项目,它使用相同的API来自动化符合UIA标准的UI。

的Visual Studio内置的高级版/旗舰版

最后,如果你有机会获得它,然后Visual Studio 2010中有脚本的UI测试功能 - Coded UI Tests。这支持.NET,本地和Web应用程序的记录/重放和脚本功能。

+0

我会寻找一个白色/ UIAutomation验证很快。但是,你可以引用任何Java库来测试C++应用程序吗? – Robert 2011-05-12 15:06:33

+0

@Robert对不起,我没有使用/听说过任何基于Java的工具来测试Win32应用程序。 – 2011-05-12 16:52:33

+1

以下是使用白色自动化Windows记事本的示例:https://github.com/slmoloch/Notepad.TestSuite – 2014-03-31 02:52:04

0

罗伯特,如果你的公司已经有QTP许可证,我建议你使用它。它是这个工作的正确工具,如果你的公司已经拥有它,没有任何意义。它有它的瑕疵 - 我的主要反对意见是有限的IDE和VBScript脚本语言 - 但它并没有成为意外的市场领先工具。测试Windows C++ GUI应用程序的开源选项并不多。您应该考虑的主要商业选择是HP QTP,IBM Rational Functional Tester和VS2010编码UI测试。

+0

有人已经开始使用QTP进行自动化,但是在识别这个工具中的对象时存在问题,存在很多黑客攻击,性能和不稳定性问题。我不喜欢QTP的IDE和VBS。我更喜欢Java代码,因为我们有客观的语言,我对它有一些尝试,加入另一个库不是问题。 – Robert 2011-05-13 06:26:42

+0

我不认为我的公司会支付另一种商业工具,所以我宁愿选择开源库。 – Robert 2011-05-13 06:28:23

5

我们使用Sikuli,并一直很满意。它在各种自动化API之外工作,所以它非常好地处理非标准UI。

+0

我会检查一下。 – Robert 2011-05-13 06:28:57

+0

+1:优秀!!!我梦想了很久这样的工具^^麻省理工学院做到了! – neuro 2011-05-13 08:55:10

+1

Sikuli看起来不错,但有两个问题:1)在我试图找到一个对象或创建一个区域IDE最小化,我什么也做不了。难道我做错了什么? 2)第二个问题是我期待更多的东西。我想编程测试而不是点击图形。我试图用java绑定sikuli,但我认为这些文档是纯粹的,我不知道如何在lable旁边找到一个可编辑的文本字段用户名或带有标签等的按钮等等。Sikuli可能吗? – Robert 2011-05-13 16:31:53

1

我同意Robert的观点,即QTP有时不是最好的工具,尤其是当您希望它等待桌面应用程序完成其处理时。 QTP命令不同步,这意味着QTP不会等待前一个命令完成执行,然后才能转到下一个呼叫。我们有很多这方面的问题。我们现在计划编写一个c#dll,可以为QTP做到这一点,并将其包含在我们的QTP程序中,使QTP动态等待,直到桌面应用程序完成其处理。目前,据我所知,QTP不支持这种等待功能。另外,回到对象识别问题,我们确实有很多问题,并采取了通过QTP中的按键调用使用助记符的命令的替代路由。正如Simon已经提到的,这可能是由于GUI元素的非暴露。我们在这方面没有太多的控制,所以我们没有对此进行进一步的调查。