8年老鸟整理,Pytest自动化测试框架0到1打通,一文概全...


前言

1、Pytest框架

Pytest是一个强大的Python自动化测试框架,它提供了丰富的功能来帮助用户编写、运行和组织测试用例。

Pytest支持丰富的插件,能够扩展其功能,例如生成HTML测试报告、多线程运行测试用例、控制用例执行顺序等。此外,Pytest还支持与Selenium、Requests等库结合,实现Web自动化、接口自动化和App自动化测试。

2、开发思想

接口自动化测试框架的核心思想是通过封装一些自动化的基础模块、管理模块和统计模块,来提高测试效率,降低维护成本,减少人工干预,增加代码的重用性。以下是开发接口自动化测试框架的主要步骤:

1)需求分析:明确测试的目标和范围,确定需要测试的接口及其功能。
2)环境准备:配置Python环境,安装Pytest和Requests库。
3)设计测试用例:根据接口文档,设计测试用例,包括请求参数、预期结果等。
4)编写测试代码:使用Pytest框架编写测试代码,包括发送HTTP请求、断言结果等。
5)执行测试:运行测试代码,收集测试结果。
6)生成报告:根据测试结果生成测试报告,分析测试结果。

3、开发流程

1)环境准备
首先,需要安装Python和Pytest。可以通过以下命令进行安装:

pip install python
pip install pytest
pip install requests

2)设计测试用例
假设我们有一个名为example.com的网站,该网站提供了一个RESTful API,用于获取用户列表。我们需要编写测试用例来测试这个API。

3)编写测试代码
创建一个名为test_api.py的文件,并添加以下代码:

import pytest
import requests
 
# 定义测试函数
def test_get_user_list():
    # 请求URL
    url = "http://example.com/api/v1/users"
    
    # 发送GET请求
    response = requests.get(url)
    
    # 断言状态码为200
    assert response.status_code == 200
    
    # 断言返回的内容包含"users"字段
    assert "users" in response.json()
    
    # 断言返回的用户列表不为空
    assert len(response.json()["users"]) > 0
 
if __name__ == "__main__":
    pytest.main()

4)执行测试
使用以下命令运行测试代码:

pytest test_api.py

运行后,Pytest将自动发现并执行测试函数,并输出测试结果。

5)生成报告
Pytest支持生成HTML格式的测试报告。为了生成HTML报告,需要安装pytest-html插件:

pip install pytest-html

然后,使用以下命令运行测试并生成HTML报告:

pytest --html=report.html test_api.py

运行后,将在当前目录下生成一个名为report.html的测试报告文件,可以通过浏览器打开查看测试结果。

4、高级功能

1)参数化测试
参数化测试允许为同一个测试用例提供多个输入参数,并让Pytest自动为每个参数运行一次测试。这可以大大提高测试的覆盖率,同时减少重复的测试代码。

以下是一个参数化测试的示例:

import pytest
import requests
 
# 参数化测试数据
test_data = [
    ("http://example.com/api/v1/users", 200),
    ("http://example.com/api/v1/nonexistent", 404),
]
 
# 参数化测试函数
@pytest.mark.parametrize("url, expected_status", test_data)
def test_different_urls(url, expected_status):
    response = requests.get(url)
    assert response.status_code == expected_status

2)前后置处理
在测试用例执行之前和之后,可能需要进行一些准备工作和清理工作。Pytest提供了setup_function和teardown_function等函数来实现前后置处理。

以下是一个前后置处理的示例:

import pytest
import requests
 
# 前置处理函数
def setup_function():
    print("前置处理:设置测试环境")
 
# 后置处理函数
def teardown_function():
    print("后置处理:清理测试环境")
 
# 测试函数
def test_get_user_list():
    url = "http://example.com/api/v1/users"
    response = requests.get(url)
    assert response.status_code == 200
    assert "users" in response.json()
    assert len(response.json()["users"]) > 0
 
# 注册前后置处理函数
pytest.hookimpl(tryfirst=True, hookwrapper=True)(setup_function)
pytest.hookimpl(trylast=True, hookwrapper=True)(teardown_function)

注意:在实际应用中,建议使用pytest的fixture机制来实现前后置处理,因为它更加灵活和强大。

3)失败重试
对于可能因网络波动等原因导致偶尔失败的测试用例,可以使用pytest-rerunfailures插件来实现失败重试。

首先,安装pytest-rerunfailures插件:

pip install pytest-rerunfailures

然后,在测试函数上使用@pytest.mark.flaky(reruns=N, reruns_delay=T)装饰器来指定重试次数和重试间隔。

以下是一个失败重试的示例:

import pytest
import requests
 
@pytest.mark.flaky(reruns=3, reruns_delay=2)
def test_get_user_list():
    url = "http://example.com/api/v1/users"
    response = requests.get(url)
    assert response.status_code == 200
    assert "users" in response.json()
    assert len(response.json()["users"]) > 0

5、完整代码示例

以下是一个完整的接口自动化测试框架的代码示例,包括环境准备、测试用例设计、测试代码编写、执行测试和生成报告等步骤:

# test_api.py
 
import pytest
import requests
 
# 前置处理函数
@pytest.fixture(scope="module")
def api_client():
    print("前置处理:设置测试环境")
    base_url = "http://example.com/api/v1"
    return lambda path, **kwargs: requests.get(f"{base_url}/{path}", **kwargs)
 
# 参数化测试数据
test_data = [
    ("/users", 200),
    ("/nonexistent", 404),
]
 
# 参数化测试函数
@pytest.mark.parametrize("path, expected_status", test_data)
def test_different_urls(api_client, path, expected_status):
    response = api_client(path)
    assert response.status_code == expected_status
    if expected_status == 200:
        assert "users" in response.json() if path == "/users" else True
 
# 后置处理函数(通过fixture的scope="module"实现)
def teardown_module(module):
    print("后置处理:清理测试环境")
 
if __name__ == "__main__":
    pytest.main(["--html=report.html"])

运行上述代码后,将在当前目录下生成一个名为report.html的测试报告文件,可以通过浏览器打开查看测试结果。

通过Pytest框架,我们可以轻松编写高效、可靠的接口测试用例,提高测试效率和软件质量。

完整版pytest自动化测试框架教学视频-精通上手pytest

下面是我整理的2025年最全的软件测试工程师学习知识架构体系图

一、Python编程入门到精通

请添加图片描述

二、接口自动化项目实战

请添加图片描述

三、Web自动化项目实战

请添加图片描述

四、App自动化项目实战

请添加图片描述

五、一线大厂简历

请添加图片描述

六、测试开发DevOps体系

请添加图片描述

七、常用自动化测试工具

请添加图片描述

八、JMeter性能测试

请添加图片描述

九、总结(尾部小惊喜)

人生最精彩的不是实现梦想的瞬间,而是追逐梦想的过程。那些流过的汗水和泪水,终将浇灌出最美的花朵。记住:你现在的坚持,正在为未来的自己铺路。别停下脚步,因为最好的风景总在前方!

每一个平凡的日子都是改变命运的契机。不要小看自己的力量,水滴能穿石,坚持能移山。当别人选择放弃时,你的坚持就是胜利的开始。相信自己,你生来就是冠军!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值