自动化测试验证码问题
1. 验证码作用
不少网站在用户登录、用户提交信息等登录和输入的页面上使用了验证码技术。验证码技术可以有效防止恶意用户对网站的滥用,使得网站可以有效避免用户信息失窃、保证网站稳定安全性。
但是验证码给自动化测试带来一些不便,使脚本无法正常运行覆盖功能模块。
2. 如何解决
-
1.去掉验证码
这是最简单的方法,对于开发人员来说,只是把验证码的相关代码注释掉即可,如果是在测试环境,这样做可省去了测试人员不少麻烦,如果自动化脚本是要在正式环境跑,这样就给系统带来了一定的风险。 -
2.设置万能码
去掉验证码的主要是安全问题,为了应对在线系统的安全性威胁,可以在修改程序时不取消验证码,而是程序中留一个“后门”---设置一个“万能验证码”,只要用户输入这个“万能验证码”,程序就认为验证通过,否则按照原先的验证方式进行验证。 -
3.验证码识别技术(OCR)
例如可以通过Python-tesseract 来识别图片验证码,Python-tesseract是光学字符识别Tesseract OCR引擎的Python封装类。能够读取任何常规的图片文件(JPG, GIF ,PNG , TIFF等)。不过,目前市面上的验证码形式繁多,目前任何一种验证码识别技术,识别率都不是100% 。 -
4.记录cookie
通过向浏览器中添加cookie 可以绕过登录的验证码。
基于Cookie绕过验证码自动登录
案例一:使用Cookie绕过百度验证码自动登录账户。
from selenium import webdriver
from time import sleep
driver=webdriver.Firefox()
driver.get("http://www.baidu.com/")
#手动添加cookie
driver.add_cookie({'name':'BAIDUID','value':'9E4BF1D44014…(根据实际获取值填写)'})
driver.add_cookie({'name':'BDUSS','value':'根据实际抓包获取值填写'})
sleep(2)
driver.refresh()
sleep(3)
driver.quit()
案例二:设置万能验证码
from selenium import webdriver
from time import sleep
#万能验证码
#方式一:通过向浏览器中添加cookie 绕过验证码自动登录
driver=webdriver.Firefox()
#访问XX网站
driver.get("http://www.51XXX.net/")
#手动添加验证码
driver.add_cookie({"name":"test","value":"87y7394"})#根据实际获取的值填写
driver.add_cookie({"name":"test","value":"87y7394"})#根据实际抓包获取的值填写
#再次访问XX网站会自动登录
driver.get("http://www.51XXX.net/")
sleep(2)
driver.refresh()
sleep(2)
driver.quit()
#方式二:设置万能验证码
#randint()用于生成随机数,设置随机数的范围是1000-9999之间,运行程序分别输入正确的验证码,万能验证码,错误的验证码
from random import randint
verify=randint(1000,9999)#生成一个1000到9999之间的随机数
print(u"生成的随机:%d" %verify)
number=input("请输入随机数")
print(number)
number=int(number)
if number ==verify:
print("登录成功")
elif number == 132722:
print("登录成功")
else:
print("验证码输入错误")