使用VS2010的CodedUI来做自己的自动化测试框架
代码质量可以通过多种方式来改进,UI自动化测试是较为简单的一种方式。项目组现在由于人手比较少,产品质量并不好,所以这两天考虑在OpenExpressApp加入UI自动化测试提高一下产品质量。我所在公司其实已经有一套较为成熟,自主开发的测试框架,但目前只适用Delphi项目,所以我只能自己考虑一下在.Net下如何进行UI自动化测试了。
自动化测试的三代框架
在架构师成长之路-个人学习经验分享(公司研发峰会演讲ppt)的两页ppt中我介绍了一下自动化测试的三代框架,最基本的就是线性测试,主要基于录制回放,但是不利于重用和模块化。
如果代码是开发人员的主要资产,那么测试脚本就是测试人员的主要资产,它一样是需要模块化和可维护的,例如下面对于同一类测试案例,基于上面三代框架就会出现三种不同使用方式。
如何使用Code UI
之前想使用TestApi之类的开源测试框架来做自动化测试,但是写了一个简单例子,发现有时定位控件有些问题,正好升级到VS2010,而VS2010为测试人员增加一个很好的工具,那就是CodeUITest,通过录制回放可以较为简单的进行UI测试,上手也非常的简单。虽然录制简单,但是这种方式是自动化测试的第一代框架(由于我没有深入学习CodeUI功能,如果理解有误,请多指正),当测试案例较多时,自动化测试脚本的维护一定会成为问题,所以我希望能够使用Code UI的功能来实现自动化脚本的编写。
通过在VS2010中建立一个CodeUI测试工程,录制后查看了一下生成的代码,发现我可以按照类似的方法去封装一些代码。(具体怎么使用VS2010 CodeUI的功能网上已经有很多介绍了,大家可以去google一把)。我当时就冒出一个想法:”我能否建立一个C#项目,使用这些测试类库来构建自己的自动化测试框架,而不需要在VS2010去跑?“
尝试建立独立的测试项目
立马新建了一个工程,引用了同录制项目中引用的两个测试的dll,按照录制生成的代码编写了一个最简单的运行程序,好奇的等待结果,可惜报错了,幸好只是引用问题,说找不到文件Microsoft.VisualStudio.TestTools.UITest.Playback.dll。
经过搜索,发现它存在于【Microsoft Visual Studio 10.0\Common7\IDE\PrivateAssemblies\】下,加入后又跑了几次,发现连续少好几个文件,最终使用到的测试dll文件列表如下图所示:
期间发现了一些空引用的问题,还有编辑WPF DataGrid等有些问题,于是上网查找了一些文章,又经过一些尝试,最终找到了目前问题的解决办法,具体如何编写就不介绍,因为后期我会把这些代码都转为IronRuby脚本,到时再与大家介绍。目前我写的C#测试代码如下:
app.Run();
Module orgModule = app.OpenModule(BusinessObjectTitles.Org, BusinessObjectIds.Org);
orgModule.ExecuteCommand(CommandNames.Add);
orgModule.Input("名称", "test");
PopupWindow win = orgModule.ExecutePopupCommand(CommandNames.LookupSelectAdd, "选择岗位管理");
ListGrid grd = new ListGrid(win);
grd.GetCellEdit(2, 1).Text = "aaa";
grd.Drag(0, 4);
win.OK();
这段代码运行后就会自动打开OpenExpressApp程序,然后打开【部门管理】模块,执行新增,并点击【选择岗位】按钮,编辑某个单元格,然后执行拖动多选后【确定】
如何方便编写测试案例
既然可以基于Code UI提供的几个测试dll来编写自己的测试框架,那么我该如何更好的使用它呢?测试框架出来后,主要应用人群是测试人员,所以我希望能够通过一种方便的方式来进行编写。而能想到的最简单方案就是使用动态语言来做脚本引擎,那我该选择什么动态语言呢?IronPython还是IronRuby?
这两门语言我只是简单了解过,还没有正式使用过,所以对它们以及它们的根源语言(Ruby和Python)我也不怎么太了解,所以从语言好坏角度我也不知道如何选择。但是我们公司的针对Delphi项目的测试框架的客户端使用的是Ruby语言,那我也就选择了Ruby,所以接下拉我就会学习一下IronRuby语言了,到时也会和大家分享一下。
欢迎转载,转载请注明:转载自周金根 [ http://zhoujg.cnblogs.com/ ]