QTP处理验证码的一种方法
【QTP处理验证码的一种方法】 在自动化测试过程中,特别是针对Web应用程序,验证码是一个常见的障碍,因为它们的存在是为了防止机器人或自动脚本的恶意操作。QTP(QuickTest Professional,现在称为UFT - Unified Functional Testing)作为一款功能强大的自动化测试工具,处理验证码也显得尤为重要。本文将探讨一种使用QTP来处理验证码的方法,主要针对Discuz! NT 2.5论坛系统的测试场景。 通常,处理验证码的方法有两种:OCR识别和与开发者协作。OCR技术虽然能够识别图片中的文字,但其准确性和稳定性易受验证码图像混淆程度影响,因此不是最可靠的解决方案。另一种方式是在开发阶段暂时关闭验证码功能,或者让开发者提供一个可忽略验证码的机制,但这在实际生产环境中并不理想。 针对Discuz! NT 2.5,我们可以利用其内部的工作机制来规避验证码的识别难题。通过分析源代码,我们发现验证码是存储在数据库的`dnt_online`表中的`verifycode`字段。当用户登录论坛后,系统会生成一个随机验证码并存储在该表中。在管理员访问“系统设置”功能前,系统会要求输入此验证码进行验证。 因此,我们可以采用以下步骤在QTP脚本中处理验证码: 1. **模拟用户登录**:使用QTP的WebEdit对象模拟填写用户名和密码,然后点击登录按钮。 ```vbscript 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 ``` 2. **获取验证码**:在用户成功登录后,我们需要从`dnt_online`表中查询当前管理员(例如,用户名为"admin")的验证码。这可以通过执行SQL查询实现,QTP脚本可以这样编写: ```vbscript Function GetVerifyCode(username) Dim conn, rs, sql, verifycode Set conn = CreateObject("ADODB.Connection") conn.Open "your_database_connection_string" sql = "SELECT verifycode FROM " & BaseConfigs.GetTablePrefix & "online WHERE olid=(SELECT id FROM " & BaseConfigs.GetTablePrefix & "members WHERE username='" & username & "')" Set rs = conn.Execute(sql) If Not rs.EOF Then verifycode = rs("verifycode") End If rs.Close conn.Close Set rs = Nothing Set conn = Nothing GetVerifyCode = verifycode End Function ' 调用函数获取验证码 verifycode = GetVerifyCode("admin") ``` 这里需要注意,你需要替换`your_database_connection_string`为你的数据库连接字符串,确保QTP可以正确连接到数据库。 3. **验证并登录管理员控制台**:使用获取到的验证码点击链接进入管理员控制台。 ```vbscript Browser("Discuz!NT ASP.net|论坛 -").Page("Discuz!NT ASP.net|论坛 -").Link("系统设置").Click Browser("Discuz!NT ASP.net|论坛 -").Page("Discuz!NT ASP.net|论坛 -").WebEdit("验证码").Set verifycode Browser("Discuz!NT ASP.net|论坛 -").Page("Discuz!NT ASP.net|论坛 -").WebButton("提交").Click ``` 在这个示例中,假设验证码是通过WebEdit输入的,并且有一个"提交"按钮用于确认验证码。 通过这种方式,我们成功地绕过了OCR识别的复杂性和不确定性,利用了系统的内部逻辑来处理验证码,提高了自动化测试的效率和准确性。这种方法适用于那些能够访问和查询后台数据库的测试环境,对于其他无法直接访问数据库的应用,可能需要寻找其他适应性的解决策略,如OCR识别优化、图像处理库的集成等。
- 飘然婷婷2012-11-28下载后看了一下,说的有点道理
- 粉丝: 2
- 资源: 6
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- C语言-leetcode题解之28-implement-strstr.c
- C语言-leetcode题解之27-remove-element.c
- C语言-leetcode题解之26-remove-duplicates-from-sorted-array.c
- C语言-leetcode题解之24-swap-nodes-in-pairs.c
- C语言-leetcode题解之22-generate-parentheses.c
- C语言-leetcode题解之21-merge-two-sorted-lists.c
- java-leetcode题解之Online Stock Span.java
- java-leetcode题解之Online Majority Element In Subarray.java
- java-leetcode题解之Odd Even Jump.java
- 计算机毕业设计:python+爬虫+cnki网站爬