短信验证码、图形验证码、邮件验证的自动化测试

短信验证码、图形验证码、邮件验证问题在自动化测试中是一个很常见的问题,也是一个很棘手的问题。设计的初衷其实就是为了防自动化,防止一些人利用自动工具恶意攻击网站,而很不幸的是,我们所使用的一些自动化测试工具也包含在内。聊一聊最好用的接口方法。

接口法思路:

不管短信验证码、图形验证码还是邮件验证,都需要都auth中去认证。(auth与会员进行分离,auth只负责认证)。那么在auth中提供一些后面借口就可以进行自动化测试了。

如根据手机号插入一个新的短信校验,但安全问题就比较突出了,我想到的解决方式有: ip地址限定+用户名/密码认证+证书。

附录是一篇验证码方面的文章:(http://blog.csdn.net/snakeshiy/article/details/7460255)可以参考一下

Web自动化测试中针对图片验证码问题的常见解决思路

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

1. 识别法(技术)

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

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

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

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

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

淘宝注册页面的验证图片

神级的验证图片。。。

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

2. 接口法(技术)

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

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

3.移除法(非技术)

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

4.暗号法(非技术)

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

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

时间: 2024-10-27 17:19:55

短信验证码、图形验证码、邮件验证的自动化测试的相关文章

Android之发送短信和接收验证码

最近项目需求需要发送短信和接收验证码并将验证码显示在输入框中 以下是我的记录 前提---权限 <uses-permission android:name="android.permission.SEND_SMS"></uses-permission> <uses-permission android:name="android.permission.RECEIVE_SMS"></uses-permission> <

读取短信并复制验证码小工具

获取短信有两种方式,第一种是通过广播接收器,第二种通过读取短信数据库. 第一种: 静态注册了一个广播,通过接收包含android.provider.Telephony.SMS_RECEIVED动作的广播,获取新收到的短信内容. <receiver android:name=".GetSMS" android:enabled="true" android:exported="true"> <intent-filter androi

java:使用正则提取字符串中的数字(例如提取短信中的验证码)

使用java正则可以很方便的从字符串中提取符合条件的内容. 1.提取字符串中所有的手机号: private void getPhoneNum(String smsBody) { Pattern pattern = Pattern.compile("(13|14|15|18)\\d{9}"); Matcher matcher = pattern.matcher(smsBody); while (matcher.find()) { System.out.println(matcher.gr

APP内部调用短信 、电话、邮件

        APP内部调用短信.电话.邮件 在APP开发中,很多时候需要在APP内部实现短信验证.分享,以及切换电话拨打等功能,这也就会调用到系统相对应得功能体系: 在iOS开发中一般会出现两种模式: 1)在APP中实现短信发送 和 电话拨打功能,完成后会停留在短信 和 电话界面 2)在APP中实现短信发送 和 电话拨打,完成后可以跳转到原来的APP界面,进行下一步操作. 一 .发短信 1)直接拨号,拨号完成后会停留在通话记录中 方法: NSURL  *url  =  [NSURL 

iOS中调用短信、电话、邮件、Safari浏览器API

//调用短信 - (void)callMsg:(id)sender { [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"sms://135587"]]; } //调用电话 - (void)callTel:(id)sender { [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"tel://135587"

给zabbix添加短信、微信、邮件报警

5月初部门总监说我们弄过监控系统吧,我是主要的负责人还有一个开发人员帮忙做前端的展示工作.规定在5月底完成,6月上线. 我就直接用zabbix做为底层的监控平台,因为可以监控linux和windows还可以自定义各种模板各种报警项,所有的主机全部使用agent,网络设备使用snmp模式,将公司所有的设备基本上都监控了. 监控做好了就是报警了,这个开始还挺犯愁的,让开发的哥们弄把,他也没有头绪.今天无意间看到了110monitor的报警平台.抱着试试的态度搭建和测试一下.意外发现非常好用,而且延时

iOS使用技能 - 短信,语言验证码的获取与验证小结

最近有学习一个小技能,这里小结一下,分享给大家,互相交流. 首先是大体步骤: 在mob官网注册,然后添加短信验证的应用 使用cocoapods导入框架 Podfile文件: platform :ios, "6.0" target '短信验证'do # Mob产品公共库pod 'MOBFoundation_IDFA'# SMSSDK必须 pod 'SMSSDK' end 3.在AppDelegate注册应用AppKey 4.获取验证码 5.提交验证码 6.注意点:适配要记得开启https

C# WinForm 使用SMS接口发送手机验证码+图形验证码+IP限制

https://blog.csdn.net/IT_xiao_guang_guang/article/details/104299983 前言 ??1.发送手机验证码用的是网建的SMS接口(http://sms.webchinese.cn/) ??2.手机验证码简单的做了以下限制: ????①发送验证码1分钟只能点击发送1次 ????②相同IP手机号码1天最多提交20次(这里我用的是本地局域网IP) ????③加入图形验证码 ??注:SMS官网上的建议还有要对手机号码次数进行限制:单个手机号码30

调用短信、电话、邮件、Safari浏览器的系统API

//调用短信- (void)callMsg:(id)sender { [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"sms://135587"]];} //调用电话- (void)callTel:(id)sender { [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"tel://135587"]]