• 软件测试技术
  • 软件测试博客
  • 软件测试视频
  • 开源软件测试技术
  • 软件测试论坛
  • 软件测试沙龙
  • 软件测试资料下载
  • 软件测试杂志
  • 软件测试人才招聘
    暂时没有公告

字号: | 推荐给好友 上一篇 | 下一篇

软件测试工具QTP处理验证码的一种方法

发布: 2010-3-31 11:04 | 作者: 网络转载 | 来源: 领测软件测试网编辑 | 查看: 110次 | 进入软件测试论坛讨论

领测软件测试网

软件测试工具QTP处理验证码的一种方法 

QTP在测试WEB站点应用程序时,通常会碰到验证码的问题(尤其是论坛类的站点),对于这类问题,通常的做法是利用OCR(Optical 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

延伸阅读

文章来源于领测软件测试网 https://www.ltesting.net/

TAG: qtp QTP 工具 软件测试 验证


关于领测软件测试网 | 领测软件测试网合作伙伴 | 广告服务 | 投稿指南 | 联系我们 | 网站地图 | 友情链接
版权所有(C) 2003-2010 TestAge(领测软件测试网)|领测国际科技(北京)有限公司|软件测试工程师培训网 All Rights Reserved
北京市海淀区中关村南大街9号北京理工科技大厦1402室 京ICP备10010545号-5
技术支持和业务联系:info@testage.com.cn 电话:010-51297073

软件测试 | 领测国际ISTQBISTQB官网TMMiTMMi认证国际软件测试工程师认证领测软件测试网