web自动化测试中,如何处理验证码

在自动化测试中,处理验证码是一项具有挑战性的任务,常见的处理方式如下:

1. 绕过验证码

  • 环境配置修改:在测试环境中,通过修改配置文件关闭验证码功能。许多基于 Java Spring Boot 框架开发的 Web 应用,可在application.properties(或application.yml)文件中设置特定参数来禁用验证码。例如,将captcha.enabled=false写入配置文件,重启应用后,自动化测试就无需处理验证码。但此方法仅限于测试环境,生产环境使用会严重降低系统安全性。
  • 特定测试账号:与开发团队协作,创建特殊的测试账号。这些账号在登录或执行关键操作时,系统自动绕过验证码验证。比如企业内部管理系统,可为测试人员专门设置几个具有 “免验证码” 权限的账号。此方式操作简便,但无法完全模拟真实用户场景,对于依赖验证码的业务逻辑测试可能不准确。

2. 使用固定验证码

  • 硬编码固定值:在开发阶段,将验证码设置为固定值。例如,把验证码逻辑代码修改为始终返回 “123456”。自动化测试脚本每次输入此固定值即可通过验证。这种方式简单直接,但仅适用于测试,生产环境使用会带来严重安全隐患。
  • 配置文件设定:将固定验证码配置在文件中,如 Python 项目的config.ini文件或 Java 项目的properties文件。测试脚本从配置文件读取验证码值。以 Python 为例,使用configparser库读取config.ini中的验证码:

python

import configparser

config = configparser.ConfigParser()
config.read('config.ini')
captcha = config.get('captcha_section', 'captcha_value')

这样便于在不同环境配置不同的固定验证码,且修改验证码时无需修改大量测试代码。

3. 识别验证码

  • OCR 技术:利用光学字符识别技术识别验证码图片。常见的开源 OCR 库如 Tesseract,支持多种编程语言。以 Python 结合 Tesseract 为例,首先安装pytesseract库和 Tesseract OCR 引擎:

bash

pip install pytesseract
# 不同操作系统安装Tesseract OCR引擎方法不同,以Ubuntu为例
sudo apt - get install tesseract - ocr

然后编写代码识别验证码图片:

python

import pytesseract
from PIL import Image

image = Image.open('captcha.png')
captcha_text = pytesseract.image_to_string(image)

但 OCR 对复杂验证码(如扭曲、含干扰线、不规则字体)识别准确率较低,通常需对图片进行预处理,如灰度化、二值化、降噪、去除干扰线等,以提高识别率。

  • 第三方识别平台:借助专门的验证码识别平台,如打码兔、超级鹰等。这些平台提供 API 接口,测试脚本将验证码图片发送到平台,平台利用算法或人工识别后返回结果。以超级鹰为例,使用 Python 调用其 API:

python

import requests

# 超级鹰API相关参数
username = 'your_username'
password = 'your_password'
soft_id = 'your_soft_id'
app_key = 'your_app_key'
captcha_path = 'captcha.png'

# 读取图片内容
with open(captcha_path, 'rb') as f:
    captcha_data = f.read()

# 构造请求参数
data = {
    'user': username,
    'pass2': password,
   'softid': soft_id,
    'appkey': app_key,
    'codetype': '1004',  # 验证码类型
    'image': captcha_data
}

response = requests.post('http://api.chaojiying.net/Upload/Processing.php', data=data)
result = response.json()
if result['err_no'] == 0:
    captcha_text = result['pic_str']
else:
    print('识别失败:', result['err_str'])

此方法识别准确率较高,但可能涉及付费,且依赖外部平台,存在稳定性风险。

4. 验证码接口模拟

  • 分析生成逻辑:若能获取验证码生成算法和逻辑,测试脚本可模拟生成相同验证码。例如,简单的数字验证码由时间戳与特定密钥经哈希算法生成。测试脚本可获取当前时间戳,结合已知密钥,按照相同哈希算法生成验证码。但分析和模拟生成逻辑难度较大,且业务代码变更时,脚本需相应调整。
  • 调用生成接口:部分系统开发团队会提供测试用的验证码生成接口。测试脚本直接调用该接口获取验证码,确保与真实环境一致。例如,接口返回 JSON 格式数据,包含生成的验证码:

python

import requests

response = requests.get('验证码生成接口URL')
captcha_json = response.json()
captcha_text = captcha_json['captcha']

使用此方法需开发团队配合提供接口,并注意接口权限和安全性。

5. 通过 Cookie 处理验证码

  • 原理:当用户在浏览器中手动输入正确验证码并成功通过验证后,服务器通常会在响应中设置特定的 Cookie。这个 Cookie 可能包含验证码验证通过的标识或相关信息。在自动化测试中,如果能获取并添加这个 Cookie 到浏览器会话,就可以绕过验证码输入环节,直接进行后续操作。
  • 操作步骤
    • 手动获取 Cookie:首先,手动在浏览器中访问目标网站,输入正确的验证码完成相关操作(如登录)。然后利用浏览器的开发者工具(如 Chrome 浏览器按 F12 ,在 “Application” 选项卡下的 “Cookies” 部分),找到与该网站相关且与验证码验证通过有关的 Cookie。记录下该 Cookie 的名称、值、域和路径等关键信息。这可能需要多次尝试不同操作,并观察 Cookie 的变化来准确确定。
    • 自动化添加 Cookie:以 Python 的 Selenium 库为例,代码如下:

python

from selenium import webdriver

# 创建浏览器驱动实例
driver = webdriver.Chrome()
# 打开网站
driver.get('目标网站URL')

# 手动获取的与验证码相关的Cookie
captcha_cookie = {
    'name': 'captcha - related - cookie - name',
    'value': 'captcha - related - cookie - value',
    'domain': '目标网站域名',
    'path': '/'
}

# 添加Cookie到当前会话
driver.add_cookie(captcha_cookie)

# 刷新页面使Cookie生效,可进行后续操作
driver.refresh()
# 此处可编写后续测试代码,如登录后的功能测试等

在上述代码中,先创建 Chrome 浏览器驱动实例并打开目标网站,接着根据手动获取的 Cookie 信息构建captcha_cookie字典。注意替换namevalue为实际获取的值,domainpath也需根据实际情况填写,以确保 Cookie 能正确生效。通过driver.add_cookie()方法添加 Cookie 后,使用driver.refresh()刷新页面,使添加的 Cookie 生效,从而绕过验证码进行后续测试。

  • 局限性和注意事项
    • 局限性:这种方式依赖于手动获取 Cookie,并且 Cookie 通常具有时效性。一旦 Cookie 过期或网站验证码机制改变,就需要重新获取并更新测试代码中的 Cookie 信息。此外,不同网站的 Cookie 机制差异较大,有些网站可能对 Cookie 进行加密或采用更复杂的验证方式,使得通过添加 Cookie 绕过验证码变得困难甚至不可行。
    • 注意事项:在实际应用中,要确保获取 Cookie 的操作符合网站的使用条款和法律法规,避免因绕过验证码等行为引发法律问题。同时,自动化测试代码中添加 Cookie 的操作应封装在独立的函数或模块中,便于维护和管理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值