这是一张网易邮箱的验证码图片,验证码经常出现在我们登录的时候,下面是一段截取百度百科对验证码的介绍:
验证码(CAPTCHA)是“Completely Automated Public Turing test to tell Computers and Humans Apart”(全自动区分计算机和人类的图灵测试)的缩写,是一种区分用户是计算机还是人的公共全自动程序。可以防止:恶意破解密码、刷票、论坛灌水,有效防止某个黑客对某一个特定注册用户用特定程序暴力破解方式进行不断的登陆尝试,实际上用验证码是现在很多网站通行的方式,我们利用比较简易的方式实现了这个功能。这个问题可以由计算机生成并评判,但是必须只有人类才能解答。由于计算机无法解答CAPTCHA的问题,所以回答出问题的用户就可以被认为是人类。
随着现在验证码的技术不断更新,除了基本的识别图片文字,还加入了更多的更具有识别准确性的人机验证方式。比如拼图、按顺序点击图片中的汉字、数学表达式、常识性问题回答、甚至还引入了很多人工智能的方式。
验证码越来越复杂,人辨认起来都非常复杂,何况机器。而验证码会对我们的自动化测试造成误伤。过不了验证码,也就无法登录,无法登录也就无法测试后面的内容。
而我们的自动化测试遇到验证码的时候,是无法自动识别的。在自动化测试的过程中,如果出现验证码要如何解决?
1) 去掉验证码
去掉验证码不是说系统不用验证码,这肯定是不符合安全要求的,这里说的去掉,是指与开发团队商量,在测试环境中去掉验证码。比如加一个配置,测试环境就关闭验证码,正式环境开启验证码。
2) 设置万能验证码
依然需要和开发团队商量,设置一个万能的验证码,比如类似“999999”这种,相当于一个后门。每次登录只要用这个验证码就能绕过判断。
3) 添加 IP 白名单
把测试机器的 IP 加入白名单,白名单中的 IP 访问时不会出现验证码。
上述三种方式,都需要获取开发团队配合。但是很多刚起步做自动化测试的测试团队,无法获得这种配合。毕竟增加了开发的工作量,自动化测试没有达到想要的效果,是很难获取团队的支持的。
测试人员需要正确面对这种情况,不要动不动就自动化测试无用论或者与开发团队大打出手。
4) 验证码识别技术
利用文字识别技术识别验证码,可以通过 Python 中的 PIL
、 ocr
相关库,或者百度、网易等开发平台中的 OCR API 来实现。但是这种方式只能针对较为简单的验证码,复杂的验证码(如本文开头的网易邮箱验证码)无法实现。也有部分团队通过引入机器学习来增加识别成功率。
5) 操作cookie
最后一种方式就是基于会保存 cookie 的测试系统,通过登录后获取 cookie 信息,使用 WebDriver 中提供的 add_cookie() 方法添加 cookie 到当前操作的浏览器,绕过登录过程。登录绕过了,自然避开了验证码。
这种方式前提是必须要有长时间保存 cookie 的功能,比如登录时会有勾选项"保存本次登录信息","下次自动登录","记住我"等。
当你勾选类似的选项后,登录成功后服务器会要求浏览器将登录信息存储你到 cookie。我们就可以从浏览器 cookie 中获取储存的信息,添加到测试过程中的浏览器中,以达到绕过登录的目的。
网友评论