建购物网站怎么建呀,网站建设费进什么科目,东莞营销网站建设哪个平台好,可信网站认证购买前言
在对安全性有要求的软件#xff08;系统#xff09;中都存在验证码#xff0c;那我们应该怎么进行测试呢#xff0c;在自动化测试中又该怎么通过验证码使自动化顺利进行下去呢#xff1f;
首先#xff0c;来简单认识下验证码
测试验证码#xff0c;首先我们应当…
前言
在对安全性有要求的软件系统中都存在验证码那我们应该怎么进行测试呢在自动化测试中又该怎么通过验证码使自动化顺利进行下去呢
首先来简单认识下验证码
测试验证码首先我们应当了解清楚验证码是什么其存储位置在哪里其原理是什么做到知己知彼。
1、验证码的由来和作用
验证码是一种区分其用户是计算机还是人类的公共全自动程序算法。这个验证码形式的问题是由计算生成并评判但必须只允许有意识的人才能解答。
现在被广泛用于安全信息领域以有效防范恶意的程序算法对信息系统进行暴力性的攻击破解比如防范密码破解、信息盗窃、钱财转移等恶意行为。
同时也发展为多种形式的验证码。常见的有手机短信验证码、Email验证码、视频验证码、手机语音验证码、拼图验证码、静态图文验证码、GIF动态图文验证码等其验证码的内容包含数字、字母、汉字、人文数理、人与物识别等。其中图文验证码是网站验证中最常见的一种也是我们身边人最熟悉的一种也是本文重点介绍测试对象。
2、验证码的存储
既然在网页中的验证码是图文验证码以图片文字的形式显示出来那么在网页源码可能存在于以下几种方式
存储于文件中
HTML语句中直接放入经过编码的验证码信息
HTML语句中直接放入请求的验证码URL信息 计算机生成验证码后一般以session方式将验证码存储在服务器进程 存储于redis等nosql数据库中通过调用nosql的客户端驱动查询 存储于数据库通过进程内的接口进行查询或者直接进行数据库查询 计算机服务器生成验证码后就会缓存起来原因在于方便用户提交验证码时进行验证。
3、验证码的原理
当用户需要验证时服务器端将内存中临时生成的验证码发至客户端为了其安全性通常在发送后的一个有效时间内比如1分钟就会删除其验证码用户在有效时间内输入验证答案。其具体过程如下
首先前端网页通过一个URL来对后端进行请求
接着后端接收到前端的请求后它将生成一个随机图文然后把该随机图文存储于与对应客户端的session中
然后将该随机图文进行图像处理使计算机难以识别而人类容易辨别经过处理的图文.png、.jpg等多种格式直接发至前端
最后前端验证用户输入图文的验证答案与后端生成的验证码是否一致若一致则成功登录获取消息反之不能通过。
如何测试验证码
测试验证码既要测其功能性又要测其安全性手动测试和自动化测试均不可缺少相互互补尽可能覆盖缺陷。
1、手动测试
手动测试的核心测试用例的设计。针对验证码测试的测试用例主要参考点如下 根据完善的测试用例一步一步执行最大化做到细致精准。
2、自动化测试
自动化测试取决于产品的生命周期考虑自动化测试工具所带来的效益。自动化测试更多的精力放在测试案例的设计、需求的分析、自动化环境框架的搭建以及自动化测试脚本的编写上。但是针对验证码的性质随机生成的验证码不能使计算机简单的识别这一点使自动化测试遇到了一定的困难瓶颈通俗的说验证码和自动化测试是对着干的。
因此自动化工具测试到验证码时针对不同程度安全性的要求使用相应效率的解决方案。其解决方案包括注释验证码、设置验证码开关、设置万能验证码、记录Cookies信息、验证码图文识别等。
1注释验证码模块现在很少用这种方案
这是在安全性要求较低的情况下的解决方案经过项目组的沟通在测试阶段开发人员将验证码模块的相关代码注释掉等上线时取消注释。当然这样给测试人员在测试阶段减小了麻烦但是上线正式生产环境中该验证码模块可能给系统带来一定的障碍风险。
2设置验证码开关也不推荐
经过项目组的沟通开发人员设置一个验证码开关模块当手动测试时按着测试用例进行执行当自动化测试时关闭验证码模块。
3设置万能验证码当前主流做法
这是在安全性要求相对较高的情况下的解决方案经过项目组的沟通开发人员设置一个万能验证码。在设置万能验证码时应当区分测试环境与生产环境比如判断当前是否是测试环境通常情况下根据读取服务器配置文件就可判断是否是测试环境。如果是则输入万能验证码直接通过如果不是则继续按着正常的验证流程去验证。
设置万能验证码的解决方案与注释验证码的解决方案相比该方案设置的万能验证码模块的代码可以上线几乎不会给系统带来障碍风险同时这样手动测试与自动化测试均很方便。
4记录Cookies信息不太推荐对于复杂的验证方式这种方式可以考虑
通过向browser添加Cookies这样就可以绕过介入的验证码而在用户介入前通过add_cookie( )方法将介入信息添加到Cookies这样一来若再一次访问系统时将自动的介入。
但是记录Cookies还是存在不足。一方面体现在有效Cookies是有时间限制一旦过期无效再次访问系统时需要重新获取另一方面体现在如果找不到输入框名就无法向输入框内输入介入信息。
5验证码图文识别作为安全性测试的一部分
如果测试人员用图文识别技术解决了自动化测试动态随机验证码那这也相当于产品的一个Bug使其系统并不是那么具有安全性。但为了系统的完整性针对高级别程度安全需求的系统利用验证码图文识别技术进行测试。
6OCR图像识别同样作为安全性测试的一部分
当前OCR图像识别技术已经比较成熟能够很容易地识别出简单的图文验证码。对此大多数网站都逐步提升了图文验证码的复杂度比如加噪、扭曲图文等操作。当然这种对抗也正是系统不断升级的原因敌对性发展。
针对图文验证码的加噪测试时应当对图文先降噪再识别针对图文验证码的扭曲测试时应当Machine Learning、Pattern Recognition等技术算法提取图文特征再匹配正确的图文验证码。
7Python-tesseract图像识别同样可作为安全性测试的一部分
除了OCR图像识别技术还可以通过Python-tesseract识别图文验证码需要用到tesseract-ocr图像识别工具能够读取.png、.jpg、.gif等常规格式的图片文件。
综上所述针对验证码的测试最佳的解决方案就是手动测试与自动化测试并行自动化测试时最佳的验证码解决方案是设置万能验证码。
最后感谢每一个认真阅读我文章的人礼尚往来总是要有的虽然不是什么很值钱的东西如果你用得到的话可以直接拿走 这些资料对于【软件测试】的朋友来说应该是最全面最完整的备战仓库这个仓库也陪伴上万个测试工程师们走过最艰难的路程希望也能帮助到你