自动化测试中的验证码处理方法小总结

发表于:2010-8-26 15:01

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

 作者:未知    来源:51Testing软件测试网采编

  目前,不少网站在用户登录、用户提交信息等登录和输入的页面上使用了验证码技术。验证码技术可以有效防止恶意用户对网站的滥用,使得网站可以有效避免用户信息失窃、广告SPAM等问题。但与此同时,验证码技术的使用却使得WEB自动化测试面临了较大的困难。

  验证码一般应用在WEB系统涉及登录和输入的页面上,其实现的一般方法是在页面上显示一幅图片,要求用户肉眼识别图片中的信息并将该信息作为输入的一部分进行提交。页面上显示的这幅图片一般是一串随机产生的数字或符号,并且被添加了用于防止识别的背景。验证码的主要目的是为了防止恶意用户利用自动工具(机器人)对用户口令进行暴力破解、恶意注册用户,或是向网站发布令人厌烦的广告信息等。

  验证码具有随机性和不易被自动工具识别的特点,当用户访问某个使用验证码的页面时,每次对该相同页面的访问都会得到一个随机产生的不同的验证码,并且,这些验证码具有能够被人工识别,但很难被自动工具识别的特点,这样,自动工具就很难适应使用验证码的页面,从而达到保护网站不被恶意使用的目的。

  1、验证码的主要实现方法

  要解决验证码,需要知道验证码是如何产生的,验证码的生成方式有两种“读取方式”和“生成方式”两种。

  读取方式,就是在服务器目录下保存制作好的图片文件,然后显示在Web页面上让用户识别。这种方式完全可以通过url的来破解图片的地址,通过图片地址可以间接的知道图片表示的验证码是什么。所以现在这种方式很少出现了。

  生成方式,是通过随机生成字符串,然后利用编程语言的图形库生成验证码图片显示在页面上让用户识别。在生成的时候还可以增加背景的一些噪音,改变字符和背景的颜色,甚至变形字符。这种方式本身如果不是用对字符的变形和在背景增加噪音的情况下,可以通过OCR的技术来识别,但是经过这两种处理后,使得识别变的非常困难。

  2、验证码的大致实现原理

  使用生成式的验证码实现原理:首先服务器端生成随机数,并把它保存在session中,然后利用图形库生成验证图片展现给客户端的用户辨认;用户根据验证码图片输入自己识别的验证码发送给服务器端;服务器端根据session保存的随机数和用户输入的验证码进行对比,如果匹配验证通过,如果不匹配验证失败。

  3、自动化测试解决验证码的方式

  自动化测试解决验证码的问题,最主要的有两种方式,通过识别方法和服务端插入法。这两种方式实现方法上侧重点不同,适用的场合也不同。

  3.1  识别的方法

  识别的方法,完全不用考虑服务端,直接通过图像识别的技术(如OCR技术),通过识别图片来破解验证码。这种方法优点就在于不需要服务器端做任何修改,不用提供任何接口,自动化测试便可以完成自己的验证码识别。但是这种方法也有致命的缺点,就是他的识别成功率的问题,在存在变形和背景加入噪音的验证码中,这种识别率相当的低。如果验证码还存在中文的话,那识别成功率就几乎难以忍受了。这种方法我们在以往的实践经验中,曾经使用OCR技术处理过验证码。但是最近遇到一些验证码,使用OCR的识别率都很低。

  简单说明一下为什么OCR的识别率比较低,OCR是光学字符识别的简称,他一般用来识别等大规则字体的图像,比方说他可以扫描印刷的图书,将纸质的书扫描到计算机中形成文本;也可以用来识别证件号码,加快机读证件速度。所以如果在验证不规整或者存在噪点,那么识别率会直线下降。但是市面上有些人做的验证码识别程序为什么识别率那么高而通用的OCR识别程序识别率低呢?由于验证码的生成时的变形和加入噪点是存在规律的,开发者可以通过这些规律,为特定的验证码生成程序编写特定的识别代码,这种情况下的识别率是非常高的。还有为什么中文识别率低?这个就比较好理解了,想想英文只有26个字母,26种形态,我们中文一个字一个形态。还有在OCR识别的时候,他的算法可能会通过识别部分来确认全部,有点盲人摸象的感觉(具体的算法可以参照OCR具体的实现算法),在这种情况下,如果中文有稍微的变形就很难识别的了。如果不能理解这点,想想我们小学学习那些形近字的痛苦,也就知道对于计算机是多难了。

  这里补充一下QTP9.5以后加入了ABBYY公司的OCR解决方案,他对验证码的识别率是比较高的。当然silktest2009也加入了OCR识别库,不过我觉得识别率比较低。具体这两个工具OCR的部分,可以参照相关手册。当然开源中也有OCR的项目,目前比较好的叫tesseract-ocr。可以将开源的OCR库加入到自动化测试工程中使用。

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

关注51Testing

联系我们

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

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

沪ICP备05003035号

沪公网安备 31010102002173号