• 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连接到一个浏览器实例,并加载我们要测试的网页。

    1. from selenium import webdriver
    2. driver = webdriver.Chrome()
    3. driver.get('http://tempuri.org')

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

    1. 现在我也找了很多测试的朋友,做了一个分享技术的交流群,共享了很多我们收集的技术文档和视频教程。
    2. 如果你不想再体验自学时找不到资源,没人解答问题,坚持几天便放弃的感受
    3. 可以加入我们一起交流。而且还有很多在自动化,性能,安全,测试开发等等方面有一定建树的技术大牛
    4. 分享他们的经验,还会分享很多直播讲座和技术沙龙
    5. 可以免费学习!划重点!开源的!!!
    6. qq群号:110685036

    二. 添加自动化测试用例

    1. 编写测试脚本

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

    1. def test_add_user():
    2. # 查找用户登录界面的"用户名""密码"输入框
    3. username_input = driver.find_element_by_name('username')
    4. password_input = driver.find_element_by_name('password')
    5. # 输入用户名和密码
    6. username_input.send_keys('username')
    7. password_input.send_keys('password')
    8. # 记录当前 URL
    9. login_url = driver.current_url
    10. # 点击登录按钮
    11. driver.find_element_by_id('submit').click()
    12. # 获取当前 URL
    13. current_url = driver.current_url
    14. # 验证登录成功与否
    15. assert current_url != login_url

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

    2. 运行测试脚本

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

    test_add_user()

    三. 验证码识别与处理

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

    1. 验证码种类

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

    2. 验证码处理方式

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

    - 转灰度:将彩色的验证码转成单一的灰度。

    - 二值化:通过Sobel算法,对灰度图像进行边缘检测,并进行二值化。

    - 降噪:去除二值化后图像中噪声点等干扰信息。

    - 切割:将验证码进行切割成单个字符,然后对单个字符进行识别。

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

    1. import requests
    2. from PIL import Image
    3. import pytesseract
    4. def get_verify_code_img(url):
    5. """
    6. 获取验证码图片
    7. """
    8. response = requests.get(url=url)
    9. img = Image.open(BytesIO(response.content))
    10. return img
    11. def preprocessing_verify_code(img):
    12. """
    13. 预处理验证码图片
    14. """
    15. # 转换成灰度图
    16. img = img.convert('L')
    17. # 二值化
    18. threshold = 160
    19. img = img.point(lambda x: 255 if x > threshold else 0)
    20. # 去除噪声
    21. img = img.filter(ImageFilter.MedianFilter(size=3))
    22. return img
    23. def recognize_verify_code(img):
    24. """
    25. 识别验证码
    26. """
    27. text = pytesseract.image_to_string(img, lang='eng')
    28. return text
    29. def test_with_verify_code():
    30. # 验证码图片URL
    31. img_url = 'http://captcha.com/verify_code'
    32. # 获取验证码图片
    33. img = get_verify_code_img(img_url)
    34. # 预处理验证码图片
    35. img = preprocessing_verify_code(img)
    36. # 识别验证码
    37. verify_code = recognize_verify_code(img)
    38. # 输入验证码并登录
    39. driver.find_element_by_id('verify_code_input').send_keys(verify_code)
    40. driver.find_element_by_id('submit').click()
    41. test_with_verify_code()

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

    四. 结语

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

  • 相关阅读:
    P1154 奶牛分厩
    如何运用低代码开发平台实现企业数字化转型
    Linux 安装中央仓库 Nexus
    Linux中docker项目提示No such file or directory
    如何挑选合适的文档外发加密系统,主要看这几点!
    udp的简单整理
    [第七届蓝帽杯全国大学生网络安全技能大赛 蓝帽杯 2023]——Web方向部分题 详细Writeup
    JS——常用内置对象
    AI 律助 Alpha GPT 线上实操发布会,重磅发布!
    淘宝高级关键字搜索淘宝商品 API
  • 原文地址:https://blog.csdn.net/qq_43371695/article/details/133953157