自动化测试中几种常见验证码的处理方式及如何实现?

📝 面试求职: 「面试试题小程序」 ,内容涵盖 测试基础、Linux操作系统、MySQL数据库、Web功能测试、接口测试、APPium移动端测试、Python知识、Selenium自动化测试相关、性能测试、性能测试、计算机网络知识、Jmeter、HR面试,命中率杠杠的。(大家刷起来…)

📝 职场经验干货:

软件测试工程师简历上如何编写个人信息(一周8个面试)

软件测试工程师简历上如何编写专业技能(一周8个面试)

软件测试工程师简历上如何编写项目经验(一周8个面试)

软件测试工程师简历上如何编写个人荣誉(一周8个面试)

软件测试行情分享(这些都不了解就别贸然冲了.)

软件测试面试重点,搞清楚这些轻松拿到年薪30W+

软件测试面试刷题小程序免费使用(永久使用)


UI自动化测试时,需要对验证码进行识别处理,有很多方式,每种方式都有自己的特点,以下是一些常用处理方法,仅供参考。

1 去掉验证码

  • 从自动化的本质上来讲,主要是提升测试效率等,但是为了去研究验证码以及提升验证码的识别效率,是需要投入比较大的时间的;

  • 去掉验证码无疑是最简单的方式,而且对于开发而言这样做,工作量也不是很大;

  • 但是建议在测试环境使用,生产环境禁用,因为存在安全问题。

2 设置万能码

  • 这个是笔者刚开始做自动化时首选的一个处理方法;

  • 因为既测试到了验证码的功能,而且也不用投入太大的精力去研究如何进行验证码识别;

  • 另外对于开发来说,内置一个万能验证码也是非常简单的事情;

  • 对于写自动化脚本的人来说也是非常的方便,效率也高;

  • 但这个万能验证码仅限相关人员知道,避免存在安全隐患。

3 保留一个资源

  • 有点验证码实则就是图片资源;

  • 其实就是在制定的文件夹资源库中随机抽取一张,那么只需要将服务器上的所有图片删除,仅保留一张即可;

  • 说白了就相当于固定验证码。

4 光学字符识别

  • 其实就是通过Python-tesseract模块来只能识别图片中的验证码;

  • Python-tesseract是光学字符识别Tesseract OCR的python封装类;

  • 其能够读取大部分常规图片文件,比如JPG、GIF、PNG、TIFF等;

  • 这个笔者也尝试过,因为现在的图片验证码越来越复杂,其实有时候识别率并不高;

下边我们尝试着使用一下。

4.1 识别对象

我们收集了几个图片验证码(来源于网络,仅供参考):从左到右依次是image01.jpg-image04.jpg:

自动化测试中几种常见验证码的处理方式及如何实现?_验证码

4.2 pytesseract安装

直接使用命令安装即可:

pip install pytesseract

自动化测试中几种常见验证码的处理方式及如何实现?_验证码_02

4.3 Pillow安装

直接使用命令:
pip install Pillow

自动化测试中几种常见验证码的处理方式及如何实现?_灰度_03

4.4 OCR安装

直接在下载即可: https://ub-mannheim/tesseract/wiki

选择对应的版本下载即可:

自动化测试中几种常见验证码的处理方式及如何实现?_Image_04

按照提示安装完成:

自动化测试中几种常见验证码的处理方式及如何实现?_灰度_05

配置环境变量,将其根目录添加到path环境变量中:

自动化测试中几种常见验证码的处理方式及如何实现?_python_06

4.5 识别原理

基本思路是通过图片降噪、图片切割等,输出图像文本;

图片降噪就是将图片中一些不需要的信息去除,比如背景、干扰像素、干扰线等。

如果验证码是彩色的背景,其实就是把每个像素放在五维空间,即X、Y、R、G、B;

X、Y是像素的二维平面坐标,RGB代表像素所对应的颜色。

4.6 处理过程

4.6.1 转灰度处理

导入需要的包:

from PIL import Image

打开需要分析的图像:

image = Image.open("./image01.jpg")

将彩色图像转化为灰度图像(RGB转为HSI色彩空间),采用L分量:

# 彩色转灰度
img_01 = image.convert("L")
img_01.show()

以上完整代码为(使用image01.jpg):

# -*- coding:utf-8 -*-
# 作者:虫无涯
# 日期:2023/11/14 
# 文件名称:test_tesseract.py
# 作用:OCR验证码识别
# 联系:VX

# 博客:https://blog.youkuaiyun.com/NoamaNelson

# 导入Image包
from PIL import Image

# 打开图像
image = Image.open("./image01.jpg")
# 彩色转灰度
img_01 = image.convert("L")
img_01.show()

转灰度后图像如下:

自动化测试中几种常见验证码的处理方式及如何实现?_灰度_07

4.6.2 二值化处理

图像分割常用的方法就是二值化处理;

二值化处理就是二值化图像时,将大于某个临界灰度值的像素灰度设置为灰度的极大值,把小于这个值的像素灰度设为灰度的极小值,取值范围一般为0-1;

二值化算法不同,可分固定阈值和自适应阈值,比如这个固定阈值如下(使用image02.jpg):

# -*- coding:utf-8 -*-
# 作者:虫无涯
# 日期:2023/11/14 
# 文件名称:test_tesseract.py
# 作用:OCR验证码识别
# 联系:VX
# 博客:https://blog.youkuaiyun.com/NoamaNelson

# 导入Image包
from PIL import Image

# 打开图像
image = Image.open("./image02.jpg")
# 二值化处理
img_02 = image.point(lambda x:0if x<143else255)
img_02.show()

二值化后的效果:

自动化测试中几种常见验证码的处理方式及如何实现?_自动化测试_08

我们结合前两种方法,把image03.jpg先灰度再二值化处理后输出对应的文字:

# -*- coding:utf-8 -*-
# 作者:虫无涯
# 日期:2023/11/14 
# 文件名称:test_tesseract.py
# 作用:OCR验证码识别
# 联系:VX
# 博客:https://blog.youkuaiyun.com/NoamaNelson

# 导入Image包
from PIL import Image
from pytesseract import pytesseract

# 打开图像
image = Image.open("./image03.jpg")

# 灰度处理
img_new = image.convert("L")
# 二值化处理
img_03 = img_new.point(lambda x:0if x<143else255)
img_03.show()
out_img = pytesseract.image_to_string(img_03)
print(out_img)

image03.jpg原图和处理后效果:

自动化测试中几种常见验证码的处理方式及如何实现?_python_09

结果输出:

自动化测试中几种常见验证码的处理方式及如何实现?_python_10

4.6.3 图像增强

为了排除更多的干扰,我们可以使用将图片增强显示,或者将图片转成黑白;

我们在以上代码继续添加:

from PIL import ImageEnhance

img_enh = ImageEnhance.Contrast(img_03)
img_enh01 = img_enh.enhance(4)
img_enh01 .show()

out_img = pytesseract.image_to_string(img_enh01)
 

自动化测试中几种常见验证码的处理方式及如何实现?_python_11

4.6.4 完整代码

我们使用image04.jpg输出完整代码:

# -*- coding:utf-8 -*-
# 作者:虫无涯
# 日期:2023/11/14 
# 文件名称:test_tesseract.py
# 作用:OCR验证码识别
# 联系:VX
# 博客:https://blog.youkuaiyun.com/NoamaNelson

# 导入Image包
from PIL import Image
from pytesseract import pytesseract
from PIL import ImageEnhance

# 打开图像
image = Image.open("./image04.jpg")

# 灰度处理
img_new = image.convert("L")

# 二值化处理
img_04 = img_new.point(lambda x:0if x<143else255)

# 图像增强
img_enh = ImageEnhance.Contrast(img_04)
img_enh01 = img_enh.enhance(4)

# 处理后图片
img_enh01.show()

# 提取图片文字
out_img = pytesseract.image_to_string(img_enh01)
print(out_img)

处理前后的效果:

自动化测试中几种常见验证码的处理方式及如何实现?_python_12

5 打码平台

另外我们可以通过打码平台来实现图片文字提取,比如超人、图鉴、斐斐等等;

比如图鉴平台,可以参考它的 开发文档

自动化测试中几种常见验证码的处理方式及如何实现?_python_13

6 记录cookie

通过添加登录成功时所携带的cookie来跳过登录;

在selenium中使用add_cookie()方法将用户名和密码等登录信息写入浏览器的cookie中,再次登录时直接读取浏览器cookie即可。

最后: 下方这份完整的软件测试视频教程已经整理上传完成,需要的朋友们可以自行领取【保证100%免费】

​​​

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值