WPF UI自动化与.NET 4.5与Prism和MVVM与Click Once App易于使用非开发人员

时间:2014-05-05 16:23:51

标签: c# .net wpf mvvm ui-automation

我已经搜索过并试过了一些东西,即这个帖子:

How to test a WPF user interface?

我尝试过使用Systems.Windows.Automation和TestAutomationFX(第三方工具)。我的观点是,虽然对于简单的事情有好处,TestAutomation类型的炸弹在多个UI级别下降时(用户控制来自加载的程序集)我可能不得不手动调整他们的代码以获得我想要的东西。 System.Windows.Automation看起来很旧,我必须手动完成所有操作,这可能比我想要花费更多时间,因为我不是全职自动化创建。我还从Windows SDK for Windows 7下载了Inspect.exe,它非常适合在我的UI中反映对象。两个测试人员都可以正常使用简单的代码,但是当它得到几层时,似乎有点涉及。我也打算尝试“TestSTack / White”。在GitHub上,从最初的Project White转移。

我很好奇是否有人最近在UI自动化方面有过非开发人员可以在QA职位中使用的经验。我正在考虑获得VS 2013测试专业版,但这看起来有点过分,而且比我看到的VS 2013 Pro花费更多。基本上这不是负载测试或冗长复杂的动态实体结果变化,只是功能测试,希望十个左右运行不同的变量。这只是一个更混乱的布局,因为我们将Prism方法Microsoft.Practices.Prism与MVVM结合起来。

我不介意在VS 2013和.NET 4.5中开发一些东西,但我希望得到的东西是我没有开发其他一组项目,但是为了节省时间。我是单位测试项目的极端菜鸟,但最终的目标是:

  1. 为非开发人员提供exe或某些环境,以便在遵循某些Prism和MVVM架构后自动运行用WPF编写的Click Once UI。

  2. 希望有某种类型的CSV,配置或其他方法,他可以更改变量来运行某些测试。

  3. 能否以配置或可更改的方式输入点击一次应用的exe(点击一次很有趣,根据我打开任务管理器的经验找到它,然后打开位置'点击一次应用程序,不同的方框不同。)

  4. 这可能要求很多,或者对于每天进行单元测试的人来说可能很简单,我不知道。我要尝试第三方产品,非.NET产品来运行.NET,以及在VS中编写C#以创建一个项目来运行我的UI(只要它可以在没有VS的盒子上运行)。

2 个答案:

答案 0 :(得分:5)

理想情况下,您根本不需要进行许多UI测试 - 应该通过单元测试来测试应用程序逻辑的大部分内容。使用MVVM,您可以轻松地测试视图模型,以确保按钮在应用时被禁用/启用,等等。

通过UI测试核心业务逻辑是一种灾难。只是不要这样做。 UI测试非常脆弱,如果您的UI发生任何重大变化,则需要重新记录或更新。如果您的测试因与您尝试测试更改的核心逻辑无关的原因而失败,那么您就不太可能相信测试会验证他们应该验证的内容。如果您不相信测试,您将开始忽略失败。 “哦,那个测试有时会失败,这没什么大不了的。”如果您不能相信您的测试在100%的时间内都是准确的,为什么还要费心进行测试?

因此,您希望通过UI测试工具进行测试的是最顶层的UI,只是为了确保您的viewmodel正确绑定到您的视图。这归结为,实际上,只是一些测试。为此,您可以轻松使用Coded UI。棘手的部分是确保所有控件都是自动化友好的,这涉及给控件提供正确的名称,并确保将正确的自动化属性附加到控件上。

VS Premium及更高版本中提供了编码用户界面,您无需使用Microsoft测试管理器来管理和运行测试,但这肯定更容易。

听起来你真正追求的是MTM。您希望您的手动测试人员能够通过与您的应用程序交互来记录测试,然后再播放它们。这正是MTM的设计目标,也是擅长的目标。

答案 1 :(得分:1)

可悲的是,对于你所处的舞台来说,这个答案听起来已经太晚了,但我很满意MVVM Light Toolkit的基础知识:

基本上,您首先要设置一些IOC容器和依赖注入方案以及PRISM。然后,您的服务可以通过模拟等方式提供设计时间,运行时间和测试时间实现。有一些视频和教程,但是像大多数wpf一样,通过对相关最佳实践的古老过时内容进行排序很难成为新手。

MVVM Light至少专注于让Blend在设计时工作,并且闻起来像某种最佳实践。

现在对于那个遗憾地没有回答你的问题的部分:想法是能够在Blend中进行布局,这样你就可以看到没有无限的tweak-compile-run循环的东西会是什么样子。测试完全基于底层的ViewModel和Model。然后,您可以设置应用程序的波形,因为UI绑定不太可能错误/手动运行并验证相对简单。最后一部分适用于我的项目,但可能对您的项目非常不满意。