图文验证码怎么测试及自动化测试怎么解决验证码问题?

news2024/11/28 11:44:21

目录

前言

首先,来简单认识下验证码

1、验证码的由来和作用

2、验证码的存储

3、验证码的原理

如何测试验证码?

1、手动测试

2、自动化测试

总结:


前言

在对安全性有要求的软件(系统)中都存在验证码,那我们应该怎么进行测试呢,在自动化测试中又该怎么通过验证码使自动化顺利进行下去呢?

首先,来简单认识下验证码

测试验证码,首先我们应当了解清楚验证码是什么?其存储位置在哪里?其原理是什么?做到知己知彼。

自动化测试验证码视频教程:WEB自动化测试之验证码处理及cookie机制_哔哩哔哩_bilibiliicon-default.png?t=N4P3https://www.bilibili.com/video/BV18v4y1E7Xs/?spm_id_from=333.999.0.0

     

 

1、验证码的由来和作用

验证码,是一种区分其用户是计算机还是人类的公共全自动程序算法。这个验证码形式的问题是由计算生成并评判,但必须只允许有意识的人才能解答。

现在被广泛用于安全信息领域,以有效防范恶意的程序算法对信息系统进行暴力性的攻击破解,比如:防范密码破解、信息盗窃、钱财转移等恶意行为。

同时也发展为多种形式的验证码。常见的有手机短信验证码、Email验证码、视频验证码、手机语音验证码、拼图验证码、静态图文验证码、GIF动态图文验证码等,其验证码的内容包含数字、字母、汉字、人文数理、人与物识别等。其中图文验证码是网站验证中最常见的一种,也是我们身边人最熟悉的一种,也是本文重点介绍测试对象。

2、验证码的存储

既然在网页中的验证码是图文验证码,以图片文字的形式显示出来,那么在网页源码可能存在于以下几种方式:

  • 存储于文件中;
  • HTML语句中直接放入经过编码的验证码信息;
  • HTML语句中直接放入请求的验证码URL信息;
  • 计算机生成验证码后,一般以session方式将验证码存储在服务器进程;
  • 存储于redis等nosql数据库中,通过调用nosql的客户端驱动查询;
  • 存储于数据库,通过进程内的接口进行查询或者直接进行数据库查询;
  • 计算机服务器生成验证码后,就会缓存起来,原因在于方便用户提交验证码时进行验证。

3、验证码的原理

当用户需要验证时,服务器端将内存中临时生成的验证码发至客户端,为了其安全性,通常在发送后的一个有效时间内(比如:1分钟)就会删除其验证码,用户在有效时间内输入验证答案。其具体过程如下:

首先,前端网页通过一个URL来对后端进行请求;

接着,后端接收到前端的请求后,它将生成一个随机图文,然后把该随机图文存储于与对应客户端的session中;

然后,将该随机图文进行图像处理,使计算机难以识别而人类容易辨别,经过处理的图文(.png、.jpg等多种格式)直接发至前端;

最后,前端验证用户输入图文的验证答案,与后端生成的验证码是否一致,若一致则成功登录获取消息,反之不能通过。

如何测试验证码?

测试验证码,既要测其功能性,又要测其安全性;手动测试和自动化测试均不可缺少,相互互补,尽可能覆盖缺陷。

1、手动测试

手动测试的核心,测试用例的设计。针对验证码测试的测试用例主要参考点如下:

根据完善的测试用例一步一步执行,最大化做到细致精准。

 自动化测试验证码视频教程:WEB自动化测试之验证码处理及cookie机制_哔哩哔哩_bilibiliicon-default.png?t=N4P3https://www.bilibili.com/video/BV18v4y1E7Xs/?spm_id_from=333.999.0.0

              

 

2、自动化测试

自动化测试取决于产品的生命周期,考虑自动化测试工具所带来的效益。自动化测试更多的精力放在测试案例的设计、需求的分析、自动化环境框架的搭建以及自动化测试脚本的编写上。但是针对验证码的性质,随机生成的验证码不能使计算机简单的识别,这一点使自动化测试遇到了一定的困难瓶颈,通俗的说:验证码和自动化测试是对着干的。

因此,自动化工具测试到验证码时,针对不同程度安全性的要求,使用相应效率的解决方案。其解决方案包括:注释验证码、设置验证码开关、设置万能验证码、记录Cookies信息、验证码图文识别等。

1)注释验证码模块(现在很少用这种方案)

这是在安全性要求较低的情况下的解决方案,经过项目组的沟通,在测试阶段,开发人员将验证码模块的相关代码注释掉,等上线时取消注释。当然这样给测试人员在测试阶段减小了麻烦,但是上线正式生产环境中,该验证码模块可能给系统带来一定的障碍风险。

2)设置验证码开关(也不推荐)

经过项目组的沟通,开发人员设置一个验证码开关模块,当手动测试时,按着测试用例进行执行;当自动化测试时,关闭验证码模块。

3)设置万能验证码(当前主流做法)

这是在安全性要求相对较高的情况下的解决方案,经过项目组的沟通,开发人员设置一个万能验证码。在设置万能验证码时,应当区分测试环境与生产环境,比如:判断当前是否是测试环境(通常情况下根据读取服务器配置文件就可判断是否是测试环境)。如果是,则输入万能验证码直接通过;如果不是,则继续按着正常的验证流程去验证。

设置万能验证码的解决方案与注释验证码的解决方案相比,该方案设置的万能验证码模块的代码可以上线,几乎不会给系统带来障碍风险,同时这样,手动测试与自动化测试均很方便。

4)记录Cookies信息(不太推荐,对于复杂的验证方式这种方式可以考虑)

通过向browser添加Cookies,这样就可以绕过介入的验证码,而在用户介入前通过add_cookie( )方法将介入信息添加到Cookies,这样一来,若再一次访问系统时将自动的介入。

但是记录Cookies还是存在不足。一方面体现在有效Cookies是有时间限制,一旦过期无效,再次访问系统时需要重新获取;另一方面体现在如果找不到输入框名,就无法向输入框内输入介入信息。

5)验证码图文识别(作为安全性测试的一部分)

如果测试人员用图文识别技术解决了自动化测试动态随机验证码,那这也相当于产品的一个Bug,使其系统并不是那么具有安全性。但为了系统的完整性,针对高级别程度安全需求的系统,利用验证码图文识别技术进行测试。

6)OCR图像识别(同样作为安全性测试的一部分)

当前OCR图像识别技术已经比较成熟,能够很容易地识别出简单的图文验证码。对此大多数网站都逐步提升了图文验证码的复杂度,比如:加噪、扭曲图文等操作。当然这种对抗也正是系统不断升级的原因,敌对性发展。

针对图文验证码的加噪,测试时应当对图文先降噪,再识别;针对图文验证码的扭曲,测试时应当Machine Learning、Pattern Recognition等技术算法提取图文特征,再匹配正确的图文验证码。

7)Python-tesseract图像识别(同样可作为安全性测试的一部分)

除了OCR图像识别技术,还可以通过Python-tesseract识别图文验证码,需要用到tesseract-ocr图像识别工具,能够读取.png、.jpg、.gif等常规格式的图片文件。

综上所述:针对验证码的测试,最佳的解决方案就是手动测试与自动化测试并行;自动化测试时,最佳的验证码解决方案是设置万能验证码。

 自动化测试验证码视频教程:WEB自动化测试之验证码处理及cookie机制_哔哩哔哩_bilibiliicon-default.png?t=N4P3https://www.bilibili.com/video/BV18v4y1E7Xs/?spm_id_from=333.999.0.0

总结:

感谢每一个认真阅读我文章的人!!!

我个人整理了我这几年软件测试生涯整理的一些技术资料,包含:电子书,简历模块,各种工作模板,面试宝典,自学项目等。欢迎大家点击下方名片加入群聊免费领取,群里还有大佬帮忙解答问题,千万不要错过哦。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/628669.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

高级查询 — 连接查询

关于northwind 示例数据库 查询数据库中的表 show tables;查询表的表属性 desc xxx(表名);连接查询 1.概述 若一个查询同时涉及两个及以上的表,则称之为连接查询。也可以叫做多表查询。使用join关键字进行多表连接。 2.分类(按功能) 内连…

二阶低通滤波器(通用滤波器)

一阶低通滤波器的详细算法介绍请参看下面文章: 一阶RC算法公式和梯形图代码 PLC信号处理系列之一阶低通(RC)滤波器算法_反馈信号低通滤波器_RXXW_Dor的博客-CSDN博客1、先看看RC滤波的优缺点 优点:采用数字滤波算法来实现动态的RC滤波,则能很好的克服模拟滤波器的缺点; 1…

学院课程功能使用说明书

引子 越来越多的讲师入驻csdn,也有很多学员通过学院平台进行课程学习,我们收到越来越多用户的反馈,现在通过本帖子来对课程功能做一个介绍,简称课程功能使用说明书1.0版,有任何问题均可在帖子下留言。 讲师 如何成为…

Centos7部署项目

Centos7部署项目 Centos7部署项目Centos7安装gitCentos7从github拉取代码配置git配置用于提交代码的用户名配置用户邮箱生成公钥效果如下 github添加SSH key打开你的GitHub获取ssh key公钥内容验证 拉取项目新建空白文件夹拉取项目 使用Docker Compose创建项目容器创建docker-c…

DC LAB8SDC约束四种时序路径分析

DC LAB 1.启动DC2.读入设计3. 查看所有违例的约束报告3.1 report_constraint -all_violators (alias rc)3.2 view report_constraint -all_violators -verbose -significant_digits 4 (打印详细报告) 4.查看时序报告 report_timing -significant_digits 45. 约束组合逻辑(adr_i…

1句代码,挽回1000万损失

前言: 在企业中,出于数据安全和应用高可用,很多软件和企业会对工程文件、数据库等做自动备份和应用容灾等。一份数据或者文件会保留到很多地方,虽然满足了安全性的需求,但是会因为保存数据区间太久造成占用大量的存储成…

chatgpt赋能python:Python快速入门神器:入门教程

Python快速入门神器:入门教程 Python作为一种高级的编程语言,在近年来逐渐成为编程语言领域里面的一匹黑马,在数据科学、人工智能、自动化测试和WEB开发等领域都得到了广泛的应用。Python极易入门,使用简单,代码质量较…

UnityVR--组件8--Avatar骨骼映射遮罩

什么是Avatar 模型中的人物都具有结构相似的骨架,如果建立一个模型骨架结构的映射,就能将同一个动画应用于不同的模型中,这就是Avatar,实现了一种动画重定向的功能。一般使用3DMax、Maya制作并导出为.fbx的人物模型,在…

【MySQL】MySQL在Linux中的环境安装与基本使用

目录 一、MySQL环境的安装 1、MySQL环境安装 2、安装MySQL出现的问题 3、登录MySQl 3.1方案一 3.2方案二 4、修改MySQL配置文件 5、可选设置:开机自启动MySQL(云服务器没事一般不会关机) 二、MySQL数据库基础 1、一些概念 2、基本…

Java中进制转换的两种方法你知道吗?

目录 十进制转其他进制 其他进制转十进制 实战: A进制转B进制 关于大数运算可以参考躲不掉的高精度计算,蓝桥杯必考_高精度算法在哪些比赛考_无忧#的博客-CSDN博客 十进制转其他进制 使用 Integer.toString(int n,int radix) 方法,该方法…

【LeetCode】739. 每日温度

739. 每日温度(中等) 思路 我们可以维持一个单调递减的栈,表示每天的温度;为了方便计算天数差,这里存放位置(下标),而非温度本身。因为温度可以通过访问数组下标获取。 从左向右遍历…

书接上文,基于藏文手写数字数据开发构建yolov5n轻量级藏文手写数字检测识别系统

在上一篇文章中:《python基于轻量级CNN模型开发构建手写藏文数字识别系统》 开发实现了轻量级的藏文手写数字识别系统,这里主要是想基于前文的数据,整合目标检测模型来进一步挖掘藏文手写数字数据集的可玩性,基于yolov5n开发构建…

Android kotlin序列化之@Parcelize详解与使用

一、介绍 在Android开发过程中,序列化使用概率一直很高。在页面之间传递的对象,需要要使用序列化,常见的序列化:Parcelable、Serialization。 由于Parcelable在传递压缩比高,效率高,一直被Google官方推荐。…

可调电阻器

1、可调电阻(Trimming Potentiometer,Variable Resistor) 1.1、电气特性(Electrical Characteristics) ItemSpec ExampleDescriptionTotal Resistance(TR),总和阻抗200K端子1和3之间…

独立按键检测短按、长按,松手后响应操作

背景 有项目使用独立按键检测,短按、长按。根据使用效果,发现松手后,也就是按键弹起后响应操作比较好操作。 记得之前,博主写过一篇关于按键的检测的文章,但是过于复杂了。可能很难懂,这里就简单一点&…

Flask学习-环境配置

目录 一.环境部署 二.Flask基本结构 三.完整代码 四.运行效果 一.环境部署 在安装好python,pip环境的基础上在命令行输入如下指令: pip install flask flask框架即安装完毕。 二.Flask基本结构 flask的使用通过创建实例实现。创建方法如下&…

ArgoCD(五)----ArgoCD 各CRD资源配置文件规范

3.4.1 Application资源规范 Application CRD的spec字段主要嵌套如下几个字段: source :配置仓库及相关的配置访问及使用方法;支持如下几种类型: kubernetets的原生配置文件Helm chartkustomize:由kustomize字段进行定义…

软件测试实战,支付二维码测试-测试点汇总,全面覆盖...

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 面试的时候&#…

递归——先递后归——平衡二叉树

目录 1.什么是递归 (1)问问无所不能的chatgpt。 ​(2)我的理解 2.递归的应用之——树 (1)二叉树的录入与打印 (2)举个例子:将有序的数组转化为平衡二叉树 1.什么是递…

ffmpeg中的avs解码器综述

最近拿了一个avs的视频流,用硬件可以解码,但是ffmpeg自带的却无法解码。 所以研究了一下,首先看ffmpeg的avs解码器: 可以看到avs有两个,第一个是avs 第二个是cavs. 我们先用avs来解码,解码的视频是通过【a…