然后,可以通过使用jsp的页面来吧session中的验证码传出来,具体代码如下:
getCheckCode.jsp代码如下 <% out.print(session.getAttribute("rand")); %> |
最后,在自动化测试脚本中首先CheckCode.jsp来生成图片的验证码,然后打开getCheckCode.jsp来获得验证码,然后讲获得的验证码填入提交的表单中提交。
总结该方法,适合在测试环境中,加入一个获取验证码的页面(或者其他接口),自动化测试通过该页面来获得相应的验证码;当产品上线后,删除获得验证码的页面即可。该方法不适合生产环境,他其实是做了一个后门,从安全角度上讲,是比较危险的。该方法也不适合对验证码加密存储的情况:在实际应用中,可以将随机生成的验证码进行MD5加密存储到session中,用户输入的验证码也需要使用MD5加密后,和session中存在的密文进行对比。大家知道破解md5是非常困难的,如果使用这种方法的话,从session中获得验证码也是不可取的。
3.3 其他一些方法来解决验证码
在实际使用中也可以通过一些小技巧来解决验证码,这些方法就是通过各种手段来逃避或者获得验证,而这些手段主要是要求开发者在开发的时候留有一定的后门。下面简述几种:
●使用万能验证码,这种方法就是在判断验证的时候,如果遇到前台输入的是万能验证码,那就不要做验证码校验直接通过。
●特定用户跳过验证码,这种方法就是如果遇到指定用户登录,那么不管输入什么验证码,验证码校验都通过。
●使用hidden 控件在页面上显示验证码,就是在使用验证码的页面上,加入一个隐藏的控件,该控件的内容就是验证码。虽然用户看不到但是自动化测试工具可以找到该控件,并获得验证码。当然隐藏控件中的验证码也可以使用加密的方法,自动化测试脚本得到加密的验证后,可以通过解密操作解密验证码。
上述的方法都需要开发对代码进行一定的修改,最好不要在生产环境上做,不然会造成安全漏洞。
4、小结
作为自动化测试工程师遇到验证码的问题,无疑是非常头疼的。如果在测试环境中,最好能通过接口方法,或者开发后门的方法获取验证码,这样可能更有效。如果上线程序,安全性要求比较高的情况下,只能使用识别的方法。识别的方法可以多尝试几种OCR程序,由于OCR程序的算法不同,可能对于特定的验证码识别的成功率也不同。如果遇到中文的验证码,且那个中文字还变形了,最好的方法就是告诉开发换成英文的,中文的识别率,那真的很低。