QTP处理验证码的一种方法

QTP在测试WEB站点应用程序时,通常会碰到验证码的问题(尤其是论坛类的站点),对于这类问题,通常的做法是利用OCROptical Character Recognization,光学字符识别)技术,通过识别图片中的文字来获取验证码,但是这种方法可靠性不高,受到验证码图片混淆程度的影响。另外一种做法是在开发阶段由程序员屏蔽验证码功能,或者提供所谓的“万能验证码”。

 

本文介绍在测试Discuz !NT 2.5论坛系统时的关于验证码获取和设置的一种解决办法。通过分析Discuz的源代码,发现验证码保存在数据库的dnt_online表中:

 

        /// <summary>

        /// 检查在线用户验证码是否有效

        /// </summary>

        /// <param name="olid">在组用户ID</param>

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

        /// <returns>在组用户ID</returns>

        public bool CheckUserVerifyCode(int olid, string verifycode, string newverifycode)

        {

            DbParameter[] parms = {

                                        DbHelper.MakeInParam("@olid", (DbType)SqlDbType.Int, 4, olid),

                                        DbHelper.MakeInParam("@verifycode", (DbType)SqlDbType.VarChar, 10, verifycode)

                                    };

            DataTable dt = DbHelper.ExecuteDataset(CommandType.Text, string.Format("SELECT TOP 1 [olid] FROM [{0}online] WHERE [olid]=@olid and [verifycode]=@verifycode", BaseConfigs.GetTablePrefix), parms).Tables[0];

            parms[1].Value = newverifycode;

            DbHelper.ExecuteNonQuery(CommandType.Text, string.Format("UPDATE [{0}online] SET [verifycode]=@verifycode WHERE [olid]=@olid", BaseConfigs.GetTablePrefix), parms);

            return dt.Rows.Count > 0;

        }

 

   

dnt_online表中的最后一个字段verifycode存储的就是验证码。验证码是在用户登录论坛后随机产生并存入表中的,在管理员选择“系统设置”功能进入“管理员控制台”模块之前需要输入验证码,输入的验证码与dnt_online表中所存储的验证码进行对比,如果一致则接受用户登录请求。

 

 

因此可以在在QTP脚本中编写数据库查询语句,在登录管理员控制台之前从数据库dnt_online表获取到管理员的验证码,具体的QTP脚本如下所示:

' 登录论坛

Browser("Discuz!NT ASP.net|论坛 -").Page("Discuz!NT ASP.net|论坛 -").WebEdit("username").Click

Browser("Discuz!NT ASP.net|论坛 -").Page("Discuz!NT ASP.net|论坛 -").WebEdit("username").Set "admin"

Browser("Discuz!NT ASP.net|论坛 -").Page("Discuz!NT ASP.net|论坛 -").WebEdit("password").Set "123456"

Browser("Discuz!NT ASP.net|论坛 -").Page("Discuz!NT ASP.net|论坛 -").WebButton("登录").Click

 

' 从数据库读取到验证码

verifycode = GetVerifyCode ("admin")

 

'  登录管理员控制台

Browser("Discuz!NT ASP.net|论坛 -").Page("Discuz!NT ASP.net|论坛 -").Link("系统设置").Click

Browser("管理员控制台登录").Page("管理员控制台登录").WebEdit("PassWord").Set "123456"

Browser("管理员控制台登录").Page("管理员控制台登录").WebEdit("vcode").Set verifycode       ' 设置验证码

Browser("管理员控制台登录").Page("管理员控制台登录").WebButton("WebButton").Click

 

' 退出

Browser("管理员控制台登录").Page("系统设置 - Powered by Discuz!NT").Frame("mainFrame").Link("退出").Click

 

 

 

Function GetVerifyCode( username )

       Dim Conn ' 数据库连接对象

       Dim Rst ' 数据记录集对象

       Dim str_Link_DBSource ' 数据库连接串

       Dim SqlStr ' SQL查询语句

       str_Link_DBSource="Provider=SQLOLEDB.1;Password=sa;Persist Security Info=True;User ID=sa;Initial Catalog=dnt25;Data Source=CHENNENGJI"

       SqlStr = "select verifycode from dnt_online where username = '" & username & "'"

      

       Set Conn=CreateObject("ADODB.Connection")

       Conn.Open str_Link_DBSource

      

       Set Rst=CreateObject("ADODB.Recordset")

       Rst.Open SqlStr,Conn,2,2

      

       Rst.MoveFirst

       GetVerifyCode = Rst.Fields(0)      ' 取得验证码

      

       Rst.Close

       Conn.Close

       Set Rst=Nothing

       Set Conn=Nothing

End Function

 

 

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值