自动化测试解决验证码问题

公号:软测小生 ruancexiaosheng

image.png

现在的很多网站在登陆时都需要验证码,倘若遇到自动化测试时,怎么解决呢?

验证码大概有以下几种:
有的是图片验证码:图片上显示数字,汉字,英文数字以及算术题等;
有短信/邮箱发送验证码:一般为四位/六位/八位数字验证码;
有语音验证码:电话接听语音播报此次验证码;

首先来说说我所遇到的项目经验:
项目有短信和邮箱两种方式发送8位的数字验证码。
短信验证码只做了手工测试,当时想的是短信验证码需要一台手机,并且能够发送验证码,由于当时没有做移动端的任何测试,考虑到成本问题只能在自动化测试是放弃这种登录验证方式,只保证功能在手工测试时正常通过;
然后在登陆时选择邮件发送验证码,如何取得验证码呢?
首先申请了一个公用邮箱,专门用来接收验证码,然后写一个自动登录脚本登陆邮箱(好在邮箱登陆时不用验证码),解析邮件内容,获取验证码。

后来我不在这个项目了,听同事说是不再使用邮件和短信这种方式来验证了(是在确保了发送验证码这一功能上线正常之后才使用的),直接通过托管的日志文件管理工具Splunk去获取验证码,相当于绕过发送到短信/邮箱。

为了更好地解决问题,首先来了解一下验证码的机制:

为什么登陆时需要验证码?
没有验证码登陆,黑客会更加容易破解你的账号,通过组合码刷机等黑客技术来破取你的密码,有了验证码相当于加了一层很厚的屏障,安全系数很高。
验证码是一种区分用户是计算机和人的公共全自动程序。
验证码作用:可以防止恶意破解密码、刷票、论坛灌水,有效防止某个黑客对某一个特定注册用户用特定程序暴力破解方式进行不断的登陆尝试,实际上是用验证码是现在很多网站通行的方式(比如招商银行的网上个人银行,百度社区),利用比较简易的方式实现了这个功能,同时验证码的样子也会尽量千奇百怪,让机器不能够识别。

验证码一般存储在哪里?(如何测试验证码)

验证码服务端存储设计:服务器生成验证码后,存储起来(缓存或者持久化),以方便用户提交验证码时进行验证。
1、存储在本进程内存中:服务器生成验证码后,即将验证码存储在服务器中,一般以session方式进行存储。
优点:性能好
缺点:扩展性查、占用服务器内存
**如何测试:其他进程是访问不到服务进程的,只能在开发时服务进程内增加验证码查询接口,以方便验证,上线时,将此接口移除或禁用。 **
2、存储在文件中
3、存储在数据库中
优点:可供多个服务进程查询
缺点:性能稍差,占用数据库服务器性能
如何测试:(1)进程内提供接口,方便查询(2)直接进行数据库查询
4、存储在redis等nosql数据库中
优点:性能高、一般nosql数据库提供集群功能,可靠性高
如何测试:调用nosql的客户端驱动,进行查询

验证码的机制
前端:前端网页通过一个URL来对后端进行请求,通常会给这个请求带上一个时间戳或者是随机数。
后端:接收到前端的request,后端会先生成一个随机数(通常4位),然后把该随机数存到与该客户端的session里面。随后把该随机数图像处理一下,变得让机器难以识别。随后把图片(jpg或者png)直接发送到前端(response)。

然后后端验证用户输入图片上的验证码/或短信邮箱中的验证码与后台生成的验证码是否一致,一致即可登录。

PS:前端想获得随机数的值,如果是模板型网页(如jsp、php、asp等)可以在服务器端访问session来获取值。而如果是RESTfulAPI型的,就只能通过ajax对服务器进行请求来获得值了。

自动化测试遇到验证码的启发:自动化测试时如何应对验证码

从上述的验证码测试方案中可以得出:在做自动化登陆的同时,可以采取同样四种的方式来取得验证码,绕过短信邮件图片验证码的识别读取过程(当然的确保验证码的功能模块实现已经正常)。

当然在自动化测试登陆过程中,还有几种应对方案:

其一:去掉验证码(测试环境)
这是最简单的方法,对于开发人员来说,只是把验证码的相关代码注释掉即可,线上环境取消注释验证码模块。如果是在测试环境,这样做可省去了测试人员不少麻烦,线上环境若是去掉验证码的话一般是不可取的,线上环境可选择下面的方案二。

其二:设置万能验证码(应该是最佳选择,但是需要开发人员的支持)
去掉验证码的主要是安全问题,为了应对在线系统的安全性威胁,可以在修改程序时不取消验证码,而是程序中留一个“后门”——设置一个“万能验证码” ,只要用户输入这个“万能验证码” ,程序就认为验证通过,否则按照原先的验证方式进行验证。

其三:验证码识别技术
例如可以通过 Python-tesseract等技术来识别图片验证码,Python-tesseract 是光学字符识别 Tesseract OCR 引擎的 Python 封装类。能够读取任何常规的图片文件(JPG, GIF ,PNG , TIFF 等)。不过,目前市面上的验证码形式繁多,目前任何一种验证码识别技术,识别率都不是 100% 。
目前有很多专门做验证码识别技术的,毕竟术业有专攻,也是不错之选,毕竟自己造轮子不大可取。

其四:记录 cookie
通过向浏览器中添加 cookie 可以绕过登录的验证码,这是比较有意思的一种解决方案。我们可以在用户登录之前,手动登陆,获取cookie,通过 add_cookie()方法将用户名密码写入浏览器 cookie ,再次访问系统登录链接将自动登录。
但是有的Cookie有一个过期时间,一旦再次运行代码时就需要重新获取cookie,也造成一些麻烦。
栗子:Selenium+python 绕过验证码登陆百度

image.png

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,492评论 6 513
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,048评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,927评论 0 358
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,293评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,309评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,024评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,638评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,546评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,073评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,188评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,321评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,998评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,678评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,186评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,303评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,663评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,330评论 2 358