Web自动化框架中验证码识别处理全攻略,自动化测试神器,让测试更得心应手。

news2025/1/15 6:38:57

目录

 前言:

 一. Web自动化测试框架搭建

1. 选择一个自动化测试工具

2. 安装环境

3. 初始化一个Selenium驱动

 二. 添加自动化测试用例

1. 编写测试脚本

2. 运行测试脚本

 三. 验证码识别与处理

1. 验证码种类

2. 验证码处理方式

四. 结语

 Web自动化测试:


 前言:

随着Web应用程序的不断发展,自动化测试已成为项目开发中必不可少的一环。然而,验证码的出现却经常会使自动化测试变得更具挑战性。为了解决这个问题,我们需要一种方法来自动识别和处理验证码,从而提高自动化测试的效率和准确性。本文将介绍如何封装一个Web自动化框架,并集成验证码识别处理功能。

 一. Web自动化测试框架搭建

1. 选择一个自动化测试工具

有许多的自动化测试工具可以选择,比如Selenium、Appium等等。我们选择Selenium作为我们的自动化测试工具,因为Selenium拥有强大的浏览器支持和Active Element Detection等很多好用的功能。

2. 安装环境

- Python3.x:Selenium是Python编写的,在使用之前需要安装Python3.x。
- Selenium:在Python环境下使用Selenium需要安装Selenium包。可以使用pip命令进行安装。

pip install selenium

3. 初始化一个Selenium驱动

在安装完成Selenium模块之后,就可以拿到一个WebDriver的对象了。我们使用WebDriver连接到一个浏览器实例,并加载我们要测试的网页。

from selenium import webdriver

driver = webdriver.Chrome()
driver.get('http://tempuri.org')

这时,我们可以看到Chrome浏览器自动打开并打开了“http://tempuri.org”这个网站。

 二. 添加自动化测试用例

1. 编写测试脚本

编写一个简单的Selenium测试脚本,用以添加一个新用户并且验证用户能否成功登录:

def test_add_user():

    # 查找用户登录界面的"用户名"和"密码"输入框  
    username_input = driver.find_element_by_name('username')
    password_input = driver.find_element_by_name('password')

    # 输入用户名和密码
    username_input.send_keys('username')
    password_input.send_keys('password')

    # 记录当前 URL
    login_url = driver.current_url

    # 点击登录按钮
    driver.find_element_by_id('submit').click()

    # 获取当前 URL
    current_url = driver.current_url

    # 验证登录成功与否
    assert current_url != login_url

通过Selenium提供的find_element_by_*系列的方法,我们可以定位页面中的元素并进行操作。

2. 运行测试脚本

添加完测试脚本后,只需要运行测试脚本即可开展自动化测试。

test_add_user()

 三. 验证码识别与处理

验证码一般用于防止机器恶意攻击,而这在自动化测试中是个大问题。通过一些常见的验证码形式和对应的处理方式,我们可以提高自动化测试的识别率和效率。

1. 验证码种类

目前常见的验证码种类有图形验证码、中文验证码、计算验证码、滑动验证码等种类,不过最常见的是图形验证码。

2. 验证码处理方式

我们可以使用PIL库对识别到的验证码进行预处理,从而提高识别率。对于某些情况下无法识别的验证码,则通常需要手动打码了。以下是图形验证码预处理的基本步骤:

- 转灰度:将彩色的验证码转成单一的灰度。
- 二值化:通过Sobel算法,对灰度图像进行边缘检测,并进行二值化。
- 降噪:去除二值化后图像中噪声点等干扰信息。
- 切割:将验证码进行切割成单个字符,然后对单个字符进行识别。

下面我们来看一个实现了验证码识别处理的自动化测试脚本。假设我们要测试的网站包含了一个图形验证码,我们可以先对验证码进行预处理,然后再输入验证码。

import requests
from PIL import Image
import pytesseract

def get_verify_code_img(url):
    """
    获取验证码图片
    """
    response = requests.get(url=url)
    img = Image.open(BytesIO(response.content))
    return img

def preprocessing_verify_code(img):
    """
    预处理验证码图片
    """
    # 转换成灰度图
    img = img.convert('L')
    # 二值化
    threshold = 160
    img = img.point(lambda x: 255 if x > threshold else 0)
    # 去除噪声
    img = img.filter(ImageFilter.MedianFilter(size=3))
    return img

def recognize_verify_code(img):
    """
    识别验证码
    """
    text = pytesseract.image_to_string(img, lang='eng')
    return text

def test_with_verify_code():
    # 验证码图片URL
    img_url = 'http://captcha.com/verify_code'
    # 获取验证码图片
    img = get_verify_code_img(img_url)
    # 预处理验证码图片
    img = preprocessing_verify_code(img)
    # 识别验证码
    verify_code = recognize_verify_code(img)
    # 输入验证码并登录
    driver.find_element_by_id('verify_code_input').send_keys(verify_code)
    driver.find_element_by_id('submit').click()

test_with_verify_code()

在这个例子中,我们使用了requests库获取验证码图片,使用PIL库对验证码图片进行预处理,然后使用pytesseract库进行识别。最后,我们将识别出的验证码输入到网页中,完成自动化测试。

四. 结语

本文介绍了如何封装一个Web自动化框架,并集成了验证码识别处理功能。需要注意的是,对于不同的验证码类型,预处理和识别的方法可能会有所不同,需要根据实际情况进行调整和优化。通过这种方式,我们可以提高自动化测试的效率和准确性,实现更高质量的测试。

 

【自动化测试交流】:574737577icon-default.png?t=N4HBhttp://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=POyiUtn1WmZ1mqQ0-QCVKk4v0ZaRxYel&authKey=oCQ13j212b4nl%2BGxagkWVDUMUwFeM0jV%2BId6X%2BEc6OguEZpRCScAdwLZbIm5pBEe&noverify=0&group_code=574737577

自动化测试:

 Web自动化测试:

自动化测试-福利:

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

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

相关文章

指针不可怕,请爱它呵护它(狗头)

🤩本文作者:大家好,我是paper jie,感谢你阅读本文,欢迎一建三连哦。 🥰内容专栏:这里是《C知识系统分享》专栏,笔者用重金(时间和精力)打造,基础知识一网打尽&#xff0c…

opencv_c++学习(十一)

一、绘制基础图形 绘制直线: line(InputOutputArray img. Point pt1, Point pt2, const Scalar & color, int thickness 1,llineType int LINE_8, int shift 0pt1:直线起始点在图像中的坐标。 pt2:直线终点在图像中的坐标。 color:直线的颜色,…

《2023新一代数字办公白皮书》正式发布!| 爱分析报告

2023年5月12日,受北京市数字办公安全创新联合体委托,由自主可控新鲜事和爱分析联合撰写的《2023新一代数字办公白皮书》(以下简称《白皮书》)在“2023通明湖论坛 信创基础底座创新发展分论坛”上正式发布。 《白皮书》详细阐述了新…

box的符号距离函数

序 能用解析的方法算的,叫符号距离函数。只能数值解的,叫符号距离场。 它就是横平竖直的几个平面,点到平面的距离是很好算的。 初步认识 有个网页,可以玩一玩: About | Physics Simulation in Visual Computing (…

抖音seo源码开发,开源技术保姆式搭建

抖音seo源码优化逻辑 抖音SEO是通过一系列的技术手段和优化策略来提升视频内容在抖音平台内的曝光率和排名。其中主要包括以下几个方面: 1.关键词优化。通过对视频的标题、描述等元素的关键词进行优化,提高相关性和匹配度,让用户更容易搜索到…

文件权限属性八进制表示法,chmod(文件权限属性更改),chown,chgrp指令,默认/实际起始权限与umask权限掩码关系,文件删除与粘滞位问题等

文件权限属性的八进制表示法 这个其实非常简单,因为文件权限属性也就三种,也就是可读,可写或者可执行。然后对于这三种文件权限属性都是2元式的,要么行,要么不行,因此可以用0和1来表示,0表示没…

SAML协议— 理解SAML2 协议和联合身份验证流程

1、SAML协议概念 安全断言标记语言,简称SAML,是一个基于 XML 的开源标准数据格式,它在当事方之间交换身份验证和授权数据,尤其是在身份提供者和服务提供者之间交换。SAML解决的最主要的需求是基于Web的单点登录(SSO&a…

100 个 Go 错误以及如何避免:1~4

协议:CC BY-NC-SA 4.0 译者:飞龙 本文来自【OpenDocCN 饱和式翻译计划】,采用译后编辑(MTPE)流程来尽可能提升效率。 真相一旦入眼,你就再也无法视而不见。——《黑客帝国》 一、GO:学起来简单&…

再次比较以1为参照的6-3分布

( A, B )---1*30*2---( 1, 0 )( 0, 1 ) 让网络的输入只有1个节点,AB各由9张二值化的图片组成,让A中有3个0,6个1.B中全是1,排列组合A的所有可能,统计迭代次数的顺序。 得到数据 迭代次数平均值 A-B 迭代次数 F 9 …

5年经验还只会点点点,别等了,跳槽吧.....

随着工作年限的不断增长,感觉自己的技术水平与自己的工作年限严重不符。想跳槽出去换个新环境吧,又感觉自己的能力达不到心仪公司的标准,即使投了简历自己也没什么面试通知。就这样在原来的公司一天天的混日子,时间久了&#xff0…

「免费版Axure」原型设计工具!

Axure 是一款经典的原型设计工具,但需要下载电脑端软件使用,对新手要求较高,且在线协作效率低,使用成本较高。即时设计是一款免费在线原型设计工具,支持导入 Axure 文件进行二次布局、评审、演示和分享,让用…

GitLAB CI-CD入门

GitLab CI-CD入门 目录 1、GitLabCI/CD简介 GitLabCI/CD简介 GitLabCI/CD是GitLab内置的持续集成与持续部署系统 开源: CI/CD是开源GitLab社区版和专有GitLab企业版的一部分。(极狐)易于学习: 官方具有详细的学习操作文档。无缝集成: CI/CD…

操作系统原理大题

一、地址变换和求FAT表大小 某一页表内容自0~7依次为03; 07; 0B;11;1A;1D;20;22. 请计算页面大小为1K和4K时的逻辑地址134D对应的物理地址。 首先,将134D转换为二进制数为 0001001101001101 1k为2的10次方 从后往前占十位为 000100|1101001101 竖线前面的二进制转…

Promise的用法原理手写实现

Promise的用法、原理、手写实现 1. promise 入门简介 Promise 是用来解决异步编程的问题。 1.1 JS 中分同步Api 和 异步Api。 同步API&#xff1a;只有当前API执行完成后&#xff0c;才能继续执行下一个API for (let i 0; i < 10000; i) {console.log(i); } console.l…

09-DockerFile

文章目录 1 Dockerfile2 构建过程3 Dockerfile保留字3.1 FROM3.2 MAINTAINER3.3 RUN3.4 EXPOSE3.5 WORKDIR3.6 USER3.7 ENV3.8 VOLUME3.9 ADD3.10 COPY3.11 CMD3.12 ENTRYPOINT 4 构建镜像4.1 案例14.2 案例2 5 虚悬镜像 1 Dockerfile Dockerfile 是用来构建 Docker 镜像的文本…

浅谈JVM基本结构

目录 1.JVM概念 2.JVM基本结构 3.JVM存储数据案例 1.JVM概念 JVM是Java Virtual Machine&#xff08;Java虚拟机&#xff09;的缩写&#xff0c;JVM是一种用于计算设备的规范&#xff0c;它是一个虚构出来的计算机&#xff0c;是通过在实际的计算机上仿真模拟各种计算机功能…

SpringBoot【开发实用篇】---- 整合第三方技术(任务、邮件)

SpringBoot【开发实用篇】---- 整合第三方技术&#xff08;任务、邮件&#xff09; 1. 任务QuartzTask 2. 邮件发送简单邮件发送多组件邮件&#xff08;附件、复杂正文&#xff09; 1. 任务 springboot整合第三方技术第二部分我们来说说任务系统&#xff0c;其实这里说的任务系…

mysql中的binlog

目录标题 前言binlog有两个常用的使用场景 常用的binlog日志操作命令查看所有binlog日志列表 【show master logs;】查看master状态&#xff0c;即最后&#xff08;最新&#xff09;一个binlog日志的编号名称&#xff0c;及其最后一个操作事件pos结束点(Position)值。【show ma…

Net跨平台UI框架Avalonia入门-安装和使用

Avalonia UI是是Net的跨平台UI框架&#xff0c;支持 Windows、Linux、iOS 和 Android&#xff0c;与Net其他UI框架相比&#xff0c;主要是支持Linux。在国产化的需求下&#xff0c;对于C#开发的程序员&#xff0c;Avalonia适合用来开发Linux的桌面客户端。 Avalonia 安装 安装…

SpringBoot——日志

简单介绍&#xff1a; 在我们的程序开发中&#xff0c;日志的存在是必不可少的&#xff0c;日志可以帮助我们观察程序的运行过程&#xff0c;报错信息&#xff0c;各种警告&#xff0c;在我们调试程序的时候起到了非常大的作用。那么在SpringBoot中&#xff0c;我们在每次启动…