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

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

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

1 去掉验证码

  • 从自动化的本质上来讲,主要是提升测试效率等,但是为了去研究验证码以及提升验证码的识别效率,是需要投入比较大的时间的;
  • 去掉验证码无疑是最简单的方式,而且对于开发而言这样做,工作量也不是很大;
  • 但是建议在测试环境使用,生产环境禁用,因为存在安全问题。

2 设置万能码

  • 这个是笔者刚开始做自动化时首选的一个处理方法;
  • 因为既测试到了验证码的功能,而且也不用投入太大的精力去研究如何进行验证码识别;
  • 另外对于开发来说,内置一个万能验证码也是非常简单的事情;
  • 对于写自动化脚本的人来说也是非常的方便,效率也高;
  • 但这个万能验证码仅限相关人员知道,避免存在安全隐患。

3 保留一个资源

  • 有点验证码实则就是图片资源;
  • 其实就是在制定的文件夹资源库中随机抽取一张,那么只需要将服务器上的所有图片删除,仅保留一张即可;
  • 说白了就相当于固定验证码。

4 光学字符识别

  • 其实就是通过Python-tesseract模块来只能识别图片中的验证码;
  • Python-tesseract是光学字符识别Tesseract OCRpython封装类;
  • 其能够读取大部分常规图片文件,比如JPG、GIF、PNG、TIFF等;
  • 这个笔者也尝试过,因为现在的图片验证码越来越复杂,其实有时候识别率并不高;
  • 下边我们尝试着使用一下。

    4.1 识别对象

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

    4.2 pytesseract安装

  • 直接使用命令安装即可:
pip install pytesseract

在这里插入图片描述

4.3 Pillow安装

  • 直接使用命令:
pip install Pillow

在这里插入图片描述

4.4 OCR安装

  • 直接在下载即可:OCR官网
  • 选择对应的版本下载即可:
    在这里插入图片描述
  • 按照提示安装完成:
    在这里插入图片描述
  • 配置环境变量,将其根目录添加到path环境变量中:
    在这里插入图片描述

    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(NoamaNelson)
# 博客:https://blog.csdn.net/NoamaNelson

# 导入Image包
from PIL import Image

# 打开图像
image = Image.open("./image01.jpg")
# 彩色转灰度
img_01 = image.convert("L")
img_01.show()
  • 转灰度后图像如下:
    在这里插入图片描述

    4.6.2 二值化处理

  • 图像分割常用的方法就是二值化处理;
  • 二值化处理就是二值化图像时,将大于某个临界灰度值的像素灰度设置为灰度的极大值,把小于这个值的像素灰度设为灰度的极小值,取值范围一般为0-1
  • 二值化算法不同,可分固定阈值和自适应阈值,比如这个固定阈值如下(使用image02.jpg):
# -*- coding:utf-8 -*-
# 作者:虫无涯
# 日期:2023/11/14 
# 文件名称:test_tesseract.py
# 作用:OCR验证码识别
# 联系:VX(NoamaNelson)
# 博客:https://blog.csdn.net/NoamaNelson

# 导入Image包
from PIL import Image

# 打开图像
image = Image.open("./image02.jpg")
# 二值化处理
img_02 = image.point(lambda x:0 if x<143 else 255)
img_02.show()
  • 二值化后的效果:

在这里插入图片描述

  • 我们结合前两种方法,把image03.jpg先灰度再二值化处理后输出对应的文字:
# -*- coding:utf-8 -*-
# 作者:虫无涯
# 日期:2023/11/14 
# 文件名称:test_tesseract.py
# 作用:OCR验证码识别
# 联系:VX(NoamaNelson)
# 博客:https://blog.csdn.net/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:0 if x<143 else 255)
img_03.show()
out_img = pytesseract.image_to_string(img_03)
print(out_img)
  • image03.jpg原图和处理后效果:

在这里插入图片描述

  • 结果输出:
    在这里插入图片描述

    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)

在这里插入图片描述

4.6.4 完整代码

  • 我们使用image04.jpg输出完整代码:
# -*- coding:utf-8 -*-
# 作者:虫无涯
# 日期:2023/11/14 
# 文件名称:test_tesseract.py
# 作用:OCR验证码识别
# 联系:VX(NoamaNelson)
# 博客:https://blog.csdn.net/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:0 if x<143 else 255)

# 图像增强
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)
  • 处理前后的效果:
    在这里插入图片描述

    5 打码平台

  • 另外我们可以通过打码平台来实现图片文字提取,比如超人、图鉴、斐斐等等;
  • 比如图鉴平台,可以参考它的开发文档
    在这里插入图片描述

    6 记录cookie

  • 通过添加登录成功时所携带的cookie来跳过登录;
  • selenium中使用add_cookie()方法将用户名和密码等登录信息写入浏览器的cookie中,再次登录时直接读取浏览器cookie即可。
  • 此处代码省略后续添加。
目录
相关文章
|
NoSQL Java 测试技术
|
测试技术 数据安全/隐私保护 Python
|
测试技术 数据安全/隐私保护 Python
|
5天前
|
网络协议 安全 测试技术
性能工具之emqtt-bench BenchMark 测试示例
【4月更文挑战第19天】在前面两篇文章中介绍了emqtt-bench工具和MQTT的入门压测,本文示例 emqtt_bench 对 MQTT Broker 做 Beachmark 测试,让大家对 MQTT消息中间 BenchMark 测试有个整体了解,方便平常在压测工作查阅。
136 7
性能工具之emqtt-bench BenchMark 测试示例
|
5天前
|
测试技术 C语言
网站压力测试工具Siege图文详解
网站压力测试工具Siege图文详解
31 0
|
5天前
|
机器学习/深度学习 数据采集 人工智能
【专栏】AI在软件测试中的应用,如自动执行测试用例、识别缺陷和优化测试设计
【4月更文挑战第27天】本文探讨了AI在软件测试中的应用,如自动执行测试用例、识别缺陷和优化测试设计。AI辅助工具利用机器学习、自然语言处理和图像识别提高效率,但面临数据质量、模型解释性、维护更新及安全性挑战。未来,AI将更注重用户体验,提升透明度,并在保护隐私的同时,通过联邦学习等技术共享知识。AI在软件测试领域的前景广阔,但需解决现有挑战。
|
5天前
|
测试技术
如何管理测试用例?测试用例有什么管理工具?YesDev
该文档介绍了测试用例和测试用例库的管理。测试用例是描述软件测试方案的详细步骤,包括测试目标、环境、输入、步骤和预期结果。测试用例库用于组织和管理这些用例,强调简洁性、完整性和可维护性。管理者可以创建、删除、重命名用例库,搜索和管理用例,以及通过层级目录结构来组织用例。此外,还支持通过Excel导入和导出测试用例,以及使用脑图查看用例关系。后台管理允许配置全局别名,如用例状态、优先级和执行结果。
|
5天前
|
机器学习/深度学习 人工智能 运维
深入探索软件测试:策略、工具与未来趋势
【5月更文挑战第14天】在软件开发的生命周期中,测试环节扮演着至关重要的角色。它不仅保证产品能够达到预定的质量标准,还有助于提前发现并修复潜在的缺陷,从而减少维护成本和提高用户满意度。本文将深入探讨当前软件测试领域的最佳实践,包括测试策略的制定、工具的选择以及面对快速变化的技术环境如何保持测试活动的前瞻性和灵活性。通过分析自动化测试、性能测试和安全测试等关键领域,本文旨在为读者提供一个全面的软件测试指南,同时对未来的发展趋势进行预测。
|
5天前
|
SQL 测试技术 网络安全
Python之SQLMap:自动SQL注入和渗透测试工具示例详解
Python之SQLMap:自动SQL注入和渗透测试工具示例详解
29 0
|
5天前
|
测试技术 API
探索软件测试中的自动化工具与挑战
本文探讨了软件测试领域中自动化工具的应用与挑战。通过分析目前主流的自动化测试工具,探讨了其在提高测试效率、减少人工成本、增强测试覆盖率等方面的优势。然而,自动化测试也面临着诸如脆弱性、维护成本高等挑战。最后,提出了一些应对挑战的建议,以期为软件测试领域的自动化工作提供一些启示。
16 1

热门文章

最新文章