🌈赏金任务 - 自动化测试如何处理验证码?

赏金任务每周更新,请持续关注哦 :love_letter:

题目

  • 自动化测试如何处理验证码?

参与方式

  • 本帖下方回复你的答案即可

赏金

  • 100元京东购物卡

活动时间

  • 2023年1月16日 - 2023年1月22日

备注:由于本任务结束时正处于春节假期期间,故评审后获奖学员赏金发放会于本月末之前完成,请耐心等待。


本周赏金任务汇总:🌈 赏金任务发布 2023-01-16

本问题参与赏金活动,详情点击 :rainbow: 赏金活动上线啦 丨做赏金任务挑战千元奖金 查看活动介绍

验证码是图片的话是可以通过图片识别进行处理的,这个是我之前做自动化测试使用过图片识别的方法
链接如下:python 图片验证码识别_python识别图片验证码_SzetoZeZe的博客-CSDN博客

和后端打好关系,让后端大哥弄个通用验证码
让前端把验证码功能消失

验证码分类

  • 音视频验证码

    音视频验证码的使用较少,且受验证时间长的限制。音频验证码起初是作为视觉类验证码的补充品出现,面向具有视觉障碍的用户[2]。它可分为倾听者机制和话语者机制,倾听者机制要求用户听一段内容可能是一个词或几个随机数的音频,正确键入音频内容即可验证成功,话语者机制利用的是人声与合成声之间的差异性,它要求用户读一段给定的文字来判定该用户是否合法。而视频验证码往往给用户提供一个视频文件,要求用户根据视频内容选择最合适视频的选项。

  • 图像验证码

    图像验证码非常受研究者们的喜爱,各种有关图像验证码的研究层出不穷。相比于需要键盘输入的文本验证码,图像验证码往往只需用户用鼠标进行点击、拖拽等简单操作。它要求用户理解图片内容,然后根据提示给出反馈。常见的图像验证码可分为选择类、拖拽类和拼图类。

  • 文本验证码

    文本验证码是一种使用最广泛,历史最悠久的验证码,它展示一张含有多个字符的图片,要求用户正确识别并在输入框中输入对应的字符,输入全部正确即认证成功。这些字符多为大小写英文字母、数字或它们的组合,伴随着噪线、扭曲、多字体、空心、复杂背景等机制来提升安全性。目前也已经有大量中文文本验证码投入了线上使用。

如何使用自动化处理验证码

后端特殊处理

​ 通常来说如果需要做ui自动化遇到验证码的问题,基本上都会和开发去商量让开发修改代码屏蔽验证码信息,或者让开发配置一个万能的验证码,接口传入固定值,可以验证成功。

​ 利:显而易见,开发开了一个后门,在做ui自动化做起来会比较方便,不用去做特殊处理

​ 弊:测试环境可以通过屏蔽之类的解决问题,但是会有很大的安全隐患,在预发生产回归时完全不能通过此方法来解决

了解功能流程获取

​ 和开发沟通了解验证码生成流程一般的情况如下:

1.调用获取验证码接口:生成验证码

2.验证码存入redis中

3.验证码接口验证后,从redis中取出对应验证码进行验证

了解流程后我们就可以通过代码链接redis然后知道redis key后通过connectRedis进行查询,放入自动化环节

​ 利:通过了解后端流程,成功获取到redis的key方便

​ 弊:不可控因素,redis会有自己的一些问题,如果出现redis挂掉,或者不一致场景会造成不稳定,只能对个别场景有用,不是通用场景

selenium处理图像验证码

  1. 通过 selenium 对验证码控件进行截图, 将验证码图片保存下来 ( 如果出现图片不够清晰的情况, 可以使用 SeleniumWire 对页面接口进行抓包, 抓到获取验证码接口后解析接口参数就可以直接获取到 base64 的图片了 )
  2. 通过 ocr 识别验证码
  3. 输入账号密码及验证码 进行登录

​ 利:我觉得没有什么好处,不是很方便

​ 弊:非常不稳定

1、如果是页面上验证码,图像识别获取还不错,可以练习下使用ocr模块
2、如果是通过短信的方式,可以查找验证码对应的库,可以练习下mysql库的操作
3、业务沟通的方式,账号白名单,固定账号不需要验证码,直接绕过输入验证码就可以通过
4、楼上看到的通用的验证码的方式,也很不错。