自己动手写一个可重用的登录测试程序

发表于:2011-4-27 10:14

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:文青山    来源:51Testing软件测试网原创

  “我实在受不了,这糟糕的速度,可恶的内存使用量,调试信息乱跑......”。某天我的组员,跑过来跟我诉说QTP脚本编写的缺点。是啊,当初小规模使用QTP时,发现他确实起到了很好的回归测试作用,而当一个模块的脚本代码达到10000多条,所交互的系统有三至四个时,QTP脚本的开发时间和调试时间就呈指数增长,尤其是调用外部函数时,一个小小的错误,也许会花你半天的时间去找。更可恶的是,当你把脚本调试OK运行后,大量的数据测试时,QTP运行的速度之慢,也常常考验人类耐心的极点。这时,我往往就想换掉这个工具,转向其它工具或开源框架上。也许是上天的怜惜,一次很偶然的机会看到WatiN框架的介绍,简单的实施、开源的代码以及c#.net语言的开发环境,让我顿感亲切和惊喜。

  WatiN框架的介绍网上很多,但有关使用的实例大都是转过来转过去的文章,这也给学习上带来了一些困难。一步步的来,在网上浏览了许多信息,当然大部分是E文,自己也尝试做了一个系统的冒烟测试的脚本(大概200多条用例),其中艰辛,就不说了,到此总算知道了一些粗略的使用皮毛。刚好,最近又有一个系统要进行测试,打开一看登录界面,上帝的灵感再一次闪现,我何必不用WatiN做一个万能的登录测试程序呢?顺便实践一下总结后使用WatiN的方法,于是几日之后了这个程序,本着分享好东西的精神,几日之后就有了这篇文章。

  废话就不说了,开始进入正题吧。我们公司所测的系统大部分是Web程序,且所有系统的登录界面均类似于下图(1)和图(2)所示,所有提示信息都是在页面内,所有系统用户名的ID、密码的ID、验证码的ID均相同,且所有系统均要求在IE6、7、8,FireFox3.x上面能够等到正确执行。

图(1)

图(2)

  再来看看登录的常规测试用例有:(1)用户名、密码、验证码为空;(2)用户名、密码、验证码插入空格(空格的形式有全半角/URL和HTML编码的空格);(3)用户名、密码、验证码大小写转换;(4)用户名、验证码转换;用户名、密码、验证码最长登录;(5)用户名、密码、验证码最短登录;(6)用户名、密码、验证码大小写;重置功能;(7)用户名、密码、验证码为JS编码(系统中不存在该用户名);(8)用户名、密码、验证码其它数据(这些数据可能是系统产生的)。

  我们要做的是一个适合大多数系统的测试界面,所以我们需要一个表来表现这些用例,并储存这些测试数据,我们每次需要做的也就是更换这些数据并以此来进行测试。在这里我选择Excel表,因为他简洁所以就选它了。首先由于后面的代码读取Excel表中的数据的方式是通过数据库方式读取的,所以选用Excel2003版本,如果是其它版本请另存为2003版本。如果要用2007的版本或其它版本,也是可以的,只是你不能用数据库方式读取Excel中的数据而已,当然读取方式也可以是其它的,动动手指头网络上有,在此就不说了。

  ……………………

  查看全文请点击下载:http://www.51testing.com/html/39/n-234539.html

  好吧,准备工作我们已经完成了,接下来就让我们开启WatiN自动化之路。一共大概分为四个步骤来实现此程序,首先创建一个类用于管理页面中的控件和基本过程;其次创建一个类用于根据用户设置相应的属性来选择所使用的浏览器并调用管理类中的基本过程;再次创建一个类于用读入Excel中的测试数据和记录测试结果到Excel表中;最后在Form1.cs类中实现测试的方法。其具体过程和代码以及代码的解释见下面的介绍。

  1、首先在Vs2005(WatiN支持net2.0、net3.5、net4.0)新建一个Windows应用程序的工程,完成上面的界面设计,并将WatiN提供的Interop.SHDocVw.dll和WatiN.Core.dll引入到此工程中。

  2、新建一个LoginPage类,该类继承Page类,并在此类中管理页面中控件和登录的基本过程,有关特性的使用和方法代码里已做叙述,在此不再做解释。

//需要引入以下命名空间

    usingWatiN.Core;//for WatiN

 usingSHDocVw;//for WatiN

 usingSystem.Windows.Forms; //MessageBox

    //派生Page类,用于管理页面中控件,和基本方法

   [Page(UrlRegex ="http://10.9.10.22:*")]

   publicclassLoginPage:Page

   {

       //使用特性的方法来构建

       //用户名

       [FindBy(IdRegex ="LoginName")]

       publicTextFieldLoginName;

       //密码

       [FindBy(IdRegex ="LoginPass")]

       publicTextFieldPassWord;

       //验证码

       [FindBy(IdRegex ="LoginVod")]

       publicTextFieldCheckVod;

       //登录按钮

       [FindBy(IdRegex ="login")]

       publicButtonClickLogin;

       //登录按钮

       [FindBy(IdRegex ="cancle")]

       publicButtonClickCancle;

       ///<summary>

       ///登录方法

       ///</summary>

       ///<param name="u">用户名</param>

       ///<param name="p">密码</param>

       ///<param name="v">验证码</param>

21/212>
《2023软件测试行业现状调查报告》独家发布~

精彩评论

  • lvtianhai
    2011-5-20 18:00:25

    做测试要接触代码级别的东西才会有质的飞跃。很赞你的代码功力!

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号