用户界面测试

用户界面测试

User Interface Testing

我们正在处理一个具有新的或经过修改的GUI功能的大型项目。 过去我们发现,添加新功能时,经常在相关代码中引入新问题。

我们有非技术用户来执行测试,但是他们经常会漏掉零件并让漏洞漏出。

我的问题:
是否有任何最佳实践来组织WinForms项目的UI测试? 有什么办法可以自动化吗?

谢谢!


有一些GUI测试工具可以为您单击按钮和其他东西,但是根据我的经验,它们非常脆弱。

最好的办法是使UI层尽可能薄。最佳情况下,事件处理程序类应仅是一两行,以调出其他可测试的类。这样,您可以在单元测试中测试您的业务逻辑,而无需实际单击按钮。


您可以使用White框架自动进行GUI测试。

还可以考虑使用TDD友好的设计,即使用MVP / MVC模式。

我强烈建议您阅读Microsoft模式和实践团队的文档。

特别是看看Composite UI应用程序块和CompositeWPF。

这些项目专门为您提供GUI应用程序开发的最佳实践,包括测试驱动的UI。


保持GUI层尽可能薄。迈克尔·费瑟斯(Michael Feathers)的文章"谦虚对话框"是经典著作。另请参阅马丁·福勒的被动观点。我还听说"自动按钮单击器"非常脆弱,与维护代码相比,花费更多的时间维护测试是容易的。


如果有人发现此功能有用:

在Wikipedia上找到的GUI测试工具列表。


我发现这种快速而肮脏的方法可以在各种浏览器中测试网页布局。它称为browsershots.org。我们的客户目前需要5种浏览器的支持,而完整的回归测试大约需要一周的时间。此服务将提供70多种浏览器和版本的屏幕截图。我将它们打印出来,然后抬起页面。如果他们不排队,那么肯定存在布局问题。


从开放式解决方案(如White)到昂贵的商业解决方案(如HP QuickTest Pro),可以使用许多工具和库来自动化WinForms测试。如果要滚动自己的自动化框架,.NET中也有UIAutomation命名空间。但是,自动化的真正成本在于实施所需的时间和专业技能。可维护性也是自动化测试设计最重要的方面之一。您不想花费过多的资源来使自动化资产与您的应用程序保持同步。还有许多因素会影响自动化决策,这将取决于您的特定应用程序和组织。

最好的选择是对该主题进行更多研究,并查看一些专门的测试站点,例如http://www.sqaforums.com。


本书是对该主题的介绍。
开发人员的方式有很多。

http://pragprog.com/titles/idgtr/scripted-gui-testing-with-ruby


如何组织UI测试取决于您如何设计测试用例。

在单元测试级别自动执行Windows Forms应用程序可以使用TDD框架,例如NUnit。或使用BDD框架,例如NSpec。

在功能测试级别自动执行Windows Forms应用程序可以使用White,CodedUI,甚至可以直接使用Windows Automation API 3.0(UI Automation和MSAA)。

由于上述所有这些东西都是技术而不是解决方案,因此在开始编写自动化测试之前,最好基于这些技术构建一些基本的测试自动化/脚本框架。


现在可用的新方法是通过称为win32-autogui的Ruby gem使用Ruby。这提供了用于测试Windows GUI应用程序的框架。将它与Ruby工具RSpec和Cucumber结合使用,就可以构成一个功能强大的测试框架。


几年前,我使用了类似于该产品(http://www.tethyssolutions.com/product.htm)和该产品(http://www.mjtnet.com/macro_scheduler.htm)的试用版下载,我对此感到满意结果。这些是非常便宜的解决方案,其中一些宏记录器产品实际上可以用于自动化测试。


我不能真正为组织或最佳实践提供帮助,但是NUnit扩展似乎可用于表单测试NUnitForms。


推荐阅读

    linux命令创建项目组?

    linux命令创建项目组?,管理,密码,项目,命令,系统,位置,文件,用户组,用户,文

    linux命令发现不了?

    linux命令发现不了?,软件,系统,发行,工具,名称,不了,命令,地方,代理,信息,lin

    linux修改为中文命令?

    linux修改为中文命令?,系统,设备,工具,电脑,底部,管理,中文,命令,虚拟机,字

    linux修改路由命令?

    linux修改路由命令?,产品,网络,管理,系统,技术,经理,环境,数据,培训,设备,lin

    linux时间命令修改?

    linux时间命令修改?,时间,系统,信息,命令,大陆,国家,终端,时分,时区,日期,lin

    查看修改linux命令?

    查看修改linux命令?,时间,系统,信息,名称,命令,指令,文件夹,感叹号,文件大

    复制项目的linux命令?

    复制项目的linux命令?,系统,项目,文件,命令,目录,源文件,语法,选项,目标,功

    linux路由表修改命令?

    linux路由表修改命令?,网络,系统,地址,信息,数据,通信,发行,命令,文件,终端,

    linux修改地址命令?

    linux修改地址命令?,地址,系统,代码,网络,服务,信息,密码,命令,管理,基础,lin

    linux命令项目部署?

    linux命令项目部署?,项目,服务,环境,软件,系统,代理,管理,统一,做好,业务,怎

    修改主机名命令linux?

    修改主机名命令linux?,系统,地址,服务,主机名,网络,情况,名称,查询系统,异

    linux修改账户的命令?

    linux修改账户的命令?,密码,系统,状态,名称,信息,用户,命令,位置,软件,管理,L

    linux部署项目的命令?

    linux部署项目的命令?,项目,系统,设备,环境,工作,基础,传播,信息,标准,代码,L

    linux项目常用命令?

    linux项目常用命令?,工作,地址,系统,信息,管理,项目,命令,目录,标准,网络,lin

    linux项目更新命令?

    linux项目更新命令?,系统,信息,网络,地址,网站,通信,管理,时间,项目,命令,lin

    启动项目命令linux?

    启动项目命令linux?,工作,经理,产品,技术,地址,数字,系统,项目,命令,信息,怎

    linux中修改密码命令?

    linux中修改密码命令?,密码,系统,服务,名称,软件,信息,时间,状态,命令,用户,l

    linux修改日期命令?

    linux修改日期命令?,时间,系统,命令,信息,工具,工作,服务,代码,日期,终端,lin

    linux编译项目的命令?

    linux编译项目的命令?,系统,工作,地址,软件,工具,信息,代码,项目,命令,环境,l

    linux命令行修改字体?

    linux命令行修改字体?,系统,终端,字体,实时,适当,等级,工具,颜色,字符,窗口,l