WEB自动化测试中针对验证码的解决方案

4 验证码实现的大致原理图
 验证码给自动测试带来了很大的问题,但也并不是完全不能解决。结合我们在上文讨论的验证码实现的方法,图 4 给出了验证码实现的大致原理图。
        从图 4中可以看到,从技术的角度来看,至少设计两种不同的方法来实现自动测试工具对验证码的处理:
 完全从客户端角度考虑,靠模式识别的方法识别出验证码图片对应的字符串;
 从服务端角度考虑,如果自动测试工具可以获取 Session中存储的随机数,也就能正确处理验证码了。
qqqqqq
        这两种方法是解决自动化测试中验证码问题的主要方法,我们分别称其为 识别法服务端插入法。这两种方法在实现方法上侧重点不同,适用的场合也不同。
         识别法完全不用考虑服务端应用的实现,通过各种技术方法对显示的验证码图片进行“破译”,这样,即使完全不能接触到服务端代码,也能让自动化测试在有验证码的情况下进行下去;但这种方法当然也有其致命的缺点:只能对简单的验证码进行识别,对复杂的验证码,根本就无法识别。
        而 服务端插入法则从服务端入手,通过提供一个额外的客户端接口,向客户端只需要知道该接口的调用方法,就能通过该接口来获取该页面的验证码图片对应的实际数据,并使用该数据继续测试。
        另一方面,除了技术角度解决问题的方法以外,还可以通过一些非技术的方法来解决验证码问题。

 识别法的实现

        识别法适用于不能获得和改变服务器端代码的情况下,在这种情况下,由于服务端代码本身不可获得,或是不能对其进行修改,测试者只能完全从客户端的角度想办法解决验证码的问题。
        识别法的核心是对验证码图片的模式识别算法,该算法的可实现性基本取决于图片本身的复杂程度。以本文前面列举的验证码示例来说,类似 GmailHotmail的验证码基本上是无法通过程序来识别的。而最简单的验证码实现,例如 ASP下用 xbm技术生成的图片,就可以很容易地通过算法来识别;在 PHPdotNET等平台上完全使用图形库函数生成的图片,同样可以通过对某个区域内的图片分析,识别出图片对应的实际数字或是字母。

服务端插入法

        如果可以控制和修改服务端代码,就可以使用服务端插入法。该方法在服务端提供一个可被客户端使用的接口,只要客户端传递过来自己的 SessionID,该接口就返回此时正确的 Session,这种方法就可以很容易地让自动测试工具直接获取到正确的应该提交的验证码内容。从测试的角度来说,这种方法就等于是在系统上增加了一个测试接口,从而提高了系统的可测试性。
        服务端插入法的实现并不复杂,在任何一个平台上都能很容易实现,在此就不再赘述了。服务端插入法可以针对任何类型的应用使用,但这种方法也有明显的不足:
 如果是已经上线的应用,网站不太可能会允许保留一个这样的接口,因此,该方法一般用于还未上线的 WEB系统,如果要在已上线的 WEB系统上使用该方法,则必须通过管理上的方法提高该方面的安全性;
 采用这种方法,在性能测试时,由于该方法需要额外请求一次才能获得实际的验证码,相对于实际的用户操作来说,访问带有验证码页面的请求会多一次,因此在获得的测试结果上会有些许的差异。

 解决自动测试中验证码问题的非技术方法

        其实,测试并不只是单单的技术问题,除了上面给出的识别法和服务端插入法,其实,通过非技术的方式也能让自动化测试在具有验证码的系统上成功应用。当然,这些非技术方法应用的前提是,测试团队必须具有足够的能力和机会影响系统的实现。如果完全没有方法接触到服务端代码或是完全不能修改服务端代码,以下的方法就都不能应用了。
        下面,让我们跳出技术的范围,换个角度来看看如何解决验证码的问题:
 1、  屏蔽法
        屏蔽法是最容易想到的一种方法,方法的核心就是:在被测系统中暂时屏蔽验证功能。这种方法最容易实现,对测试结果也不会有太大的影响(当然,这种方式去掉了“验证验证码”这个环节,如果该环节本身存在功能上的问题,或是本身就是性能的瓶颈,那就一定会对测试结果造成影响了)。但这种方法也有一个问题:如果被测系统是一个实际已上线的系统,屏蔽验证功能会对已经在运行的业务造成非常大的安全性的风险,因此,对于已上线的系统来说,用这种方式就不合适了。
 2、  后门法
        后门法不屏蔽验证码,但在其中留一个后门,在代码中设定一个所谓的“万能验证码”,只要用户输入这个“万能验证码”,就能通过验证,否则,还是按照正常的验证方式进行验证。这种方式仍然存在安全性的问题,但由于我们可以通过管理手段将“万能验证码”控制在一个小的范围内,而且只在测试期间保留这个小小的后门,相对第一种方法来说,在安全性方面有了较大的提高。

 1.4  各种方法的比较

        本文提供了多种用于解决具有验证码的 WEB系统在自动测试时遇到问题的方法,这些方法既包含技术性的方法,也包含非技术性的方法。但由于每种方法的出发点不同,因此这些方法也就具有各自不同的优缺点和适用场合。本节我们对本文提到的各种方法进行比较,分别给出其优缺点和适用的场合。

 2  小结

        针对 WEB系统的验证码对自动化测试带来的挑战,本文详细分析了 WEB验证码常见的实现方法,并根据分析提出了几种不同的解决方案:识别法、服务端插入法、屏蔽法和后门法。这几种方法各有其优缺点和适用场合,因此本文也给出了这几种方法之间的对比,并给出了各种方法的应用建议。
转载自:http://www.51testing.com/html/94/n-20694-3.html

你可能感兴趣的:(验证码,自动化测试)