文档章节

Web自动化测试中针对图片验证码问题的常见解决思路,看看对您有没有帮助

 时光承诺
发布于 2017/08/18 15:46
字数 1288
阅读 2
收藏 0

原文地址

 

 

图片验证码(Captcha)问题在自动化测试中是一个很常见的问题,也是一个很棘手的问题。图片验证码设计的初衷其实就是为了防自动化,防止一些人利用自动工具恶意攻击网站,而很不幸的是,我们所使用的一些自动化测试工具也包含在内。当然了,对付验证码也不是一点办法都没有,方法还是有很多的,只是我们需要跳出技术层面去思考问题。废话少说,先来看下几种常见的解决办法:

  1、识别法(技术)

  识别法就是对验证码的图片进行字符识别,其原理就是通过识别算法解析图片,其解析的精准度取决于图片的复杂程度。

  熟悉QTP的同学应该都知道,在做文本检查点和文本区域检查点的时候会用到一种叫OCR识别的技术,OCR的全称是Optical Character Recognition,中文叫光学字符识别。OCR指电子设备(例如扫描仪或数码相机)检查纸上打印的字符,通过检测暗、亮的模式确定其形状,然后用字符识别方法将形状翻译成计算机文字的过程;即,对文本资料进行扫描,然后对图像文件进行分析处理,获取文字及版面信息的过程。

  根据本人经验,如果图片中的字符方方正正的并且图片背景比较单调的话,那么OCR识别率会非常高。比如类似于以下这种验证码的图片可以被OCR识别出来:

  但是对于一些复杂的图片:字体歪歪扭扭、字体颜色和图片背景很花哨、有故意干扰的曲直线、甚至包括计算等等,如果碰到这种情况,那么OCR识别率将非常低甚至无能为力,比如:

新浪微博注册页面的验证图片

淘宝注册页面的验证图片

神级的验证图片。。。

  我们可以看到,通过OCR这种技术来识别验证码图片中的字符不失为一种好的方法,但是它也有很多局限性,只适用于一些简单的图片。如果你的项目中的验证图片很复杂,果断放弃这种方法吧。

  2、接口法(技术)

  接口法就是让开发人员提供一个测试接口,通过这个接口可以获取到图片验证码。这种方法的具体实现又可以有很多种,比如在服务端提供一个可被客户端使用的接口,只要客户端传递过来自己的SessionID,该接口就返回此时正确的Session,这种方法就可以很容易地让自动测试工具直接获取到正确的应该提交的验证码内容;或者在网页中隐藏一个验证码内容的标签,通过读取这个网页标签内的值就可以轻松获取到验证码内容。

  增加了获取验证码的接口,势必会增加非常大的安全风险,所以这种方法只适合在测试环境使用。

  3、移除法(非技术)

  所谓移除法非常简单,就是把图片验证码的功能去掉,这是最省力的一种方法,但是需要开发人员的配合和领导的同意。但是需要注意的一点是这种方法也只适合在测试环境使用,软件产品上线时需要把图片验证码功能还原,否则会有巨大的安全隐患。

  4、暗号法(非技术)

  顾名思义,暗号法就是通过事先达成的一种秘密协议进行沟通,在这里是指让开发人员提供一个“万能验证码”,不论图片如何变化,只要输入万能验证码就能通过。但是这种方式同样会产生安全隐患,如果验证码被攻击者知道的话,所以这种方法也只适合在测试环境使用。

  以上是Web自动化测试中对付图片验证码问题的一些常用方法,这些方法本身都有一定优缺点和局限性,至于采取何种方式则需要结果具体的项目情况和需求进行考虑,记住,没有最好的方法,只有最适合的方法!

 

 

原文地址

本文转载自:http://click.aliyun.com/m/28772/

粉丝 0
博文 225
码字总数 0
作品 0
私信 提问
迎接人工智能时代,自动化测试的深度变革

AlphaGo的出色表演让人工智能名声鹊起,而在不久前的全国两会期间,人工智能被首次写入政府工作报告,人工智能再次向人们展示出了它的魅力。毫无疑问,人工智能、万物互联是未来趋势。 人工智...

fiawfo
2017/03/15
291
0
selenium2-python22-验证码问题

对于 web 应用来说,大部分的系统在用户登录时都要求用户输入验证码,验证码的类型的很多,有字母数字的,有汉字的,甚至还要用户输入一条算术题的结果的,对于系统来说使用验证码可以有效果的防止...

丰_申
2016/02/11
37
0
【免费精选】从零基础到进阶,免费在线精选课程集合

如果你关注前端开发,本文收集了值得你关注的免费在线中文系列课程。纯干货,由业界前端专家精心设计。这些课程的内容浅显易懂,授课方式有视频,也有小任务实战推进的学习方式。边学边练,摆...

曾经灬静默者
2014/07/09
9.3K
18
deeplearning4j——卷积神经网络对验证码进行识别

一、前言 计算机视觉长久以来没有大的突破,卷积神经网络的出现,给这一领域带来了突破,本篇博客,将通过具体的实例来看看卷积神经网络在图像识别上的应用。 导读 1、问题描述 2、解决问题的...

冷血狂魔
2018/10/09
1K
0
Web自动化测试-实战项目通关版

http://v.youku.com/v_show/id_XMjE1NjU1ODky.html 注意:在优酷上视频,由于在上传时,优酷自动压缩了视频大小,所以会不清楚,我们的视频是高清视频。 课程介绍 本套课程将带您一起学习自动...

华章小编辑
2010/11/18
622
0

没有更多内容

加载失败,请刷新页面

加载更多

《Designing.Data-Intensive.Applications》笔记 四

第九章 一致性与共识 分布式系统最重要的的抽象之一是共识(consensus):让所有的节点对某件事达成一致。 最终一致性(eventual consistency)只提供较弱的保证,需要探索更高的一致性保证(stro...

丰田破产标志
今天
6
0
docker 使用mysql

1, 进入容器 比如 myslq1 里面进行操作 docker exec -it mysql1 /bin/bash 2. 退出 容器 交互: exit 3. mysql 启动在容器里面,并且 可以本地连接mysql docker run --name mysql1 --env MY...

之渊
今天
7
0
python数据结构

1、字符串及其方法(案例来自Python-100-Days) def main(): str1 = 'hello, world!' # 通过len函数计算字符串的长度 print(len(str1)) # 13 # 获得字符串首字母大写的...

huijue
今天
5
0
OSChina 周日乱弹 —— 我,小小编辑,食人族酋长

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @宇辰OSC :分享娃娃的单曲《飘洋过海来看你》: #今日歌曲推荐# 《飘洋过海来看你》- 娃娃 手机党少年们想听歌,请使劲儿戳(这里) @宇辰OSC...

小小编辑
今天
1K
11
MongoDB系列-- SpringBoot 中对 MongoDB 的 基本操作

SpringBoot 中对 MongoDB 的 基本操作 Database 库的创建 首先 在MongoDB 操作客户端 Robo 3T 中 创建数据库: 增加用户User: 创建 Collections 集合(类似mysql 中的 表): 后面我们大部分都...

TcWong
今天
40
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部