python接口自动化测试框架+断言+验证码识别

最近工具组要求用python开发一个接口自动化测试框架,使用pytest和参数化关联机制,对每一次的接口进行断言,添加验证码识别功能。

主要功能:

1,对每一次的接口进行断言

2,必须增加验证码识别功能

具体思路如下:

1,首先选择pytest的parametrize参数化机制,选则使用数据库或者文本文件存储数据

2,先用python自带的assert关键字进行断言,后期在丰富

3,使用网上公开的验证码识别的接口

接下来,将创建一个简单的测试框架。在这个例子中,将展示如何创建一个测试类,该类使用参数化测试用例,并包含一个虚拟的验证码识别函数。

import pytest
import requests
from PIL import Image

# 假设这是我们的验证码识别函数
def recognize_captcha(image_path):
    # 这里可以集成真实的验证码识别逻辑,比如使用机器学习库进行图像识别
    # 目前还在研究中,此处我们仅返回一个模拟值
    return "模拟验证码"

# 测试类
class TestAPI:

    # 参数化测试数据
    @pytest.mark.parametrize(
        "url, expected_status",
        [
            ("http://www.xxxx.com/api endpoint", 200),
            # 在这里添加更多的测试用例
        ]
    )
    def test_api_endpoint(self, url, expected_status):
        # 获取验证码
        captcha_url = "http://www.xxxx.com/captcha"
        response = requests.get(captcha_url)
        captcha_image_path = "/path/to/save/captcha.jpg"
        with open(captcha_image_path, 'wb') as f:
            f.write(response.content)
        
        # 识别验证码
        captcha_solution = recognize_captcha(captcha_image_path)

        # 发送带有验证码的请求
        payload = {'captcha': captcha_solution}
        response = requests.post(url, data=payload)

        # 断言
        assert response.status_code == expected_status
        # 这里可以添加更多的断言,比如检查响应内容
        assert response.massage == expected_massage
        assert response.size == expected_size
        # 这里可以判断具体的关键字在不在接口返回结果里面
        assert key_word[0] in response.text()
        assert key_word[1] in response.text()
        assert key_word[2] in response.text()
        assert key_word[3] not in response.text()
        assert key_word[4] not in response.text()

# 运行测试
if __name__ == "__main__":
    pytest.main()

这个框架的组成如下:
1,recognize_captcha 函数:用于识别验证码,你需要集成实际的验证码识别逻辑。,

2,TestAPI 类:包含测试方法的类。
3,test_api_endpoint 方法:使用parametrize装饰器来参数化测试用例。每个测试用例将使用不同的URL和期望状态码。

4,在test_api_endpoint方法中,首先请求验证码,保存到本地文件,然后调用recognize_captcha函数来识别验证码。
5,使用识别出的验证码作为请求的一部分,向API发送请求。

6,最后,对响应进行断言,以验证API的行为。

请注意,这个框架是非常基础的,实际应用中可能需要处理更多的复杂情况,比如cookies管理、会话保持、数据库验证等。此外,验证码识别通常需要使用专门的库或服务,这里仅为示例提供了一个虚拟的函数。在实际应用中,可能需要集成如Google的Tesseract OCR引擎或其他机器学习库来提高验证码识别的准确性。

  • 7
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值