Python面试题:结合Python技术,如何使用Pytest进行单元测试和集成测试

使用Pytest进行单元测试和集成测试是非常常见和有效的方法。下面是如何使用Pytest进行这些测试的详细指南。

安装Pytest

首先,使用pip安装Pytest:

bash 复制代码
pip install pytest

单元测试

单元测试用于测试单个模块或函数的功能。假设我们有一个简单的Python模块 math_functions.py,其中包含几个基本的数学函数:

python 复制代码
# math_functions.py
def add(a, b):
    return a + b

def subtract(a, b):
    return a - b

def multiply(a, b):
    return a * b

def divide(a, b):
    if b == 0:
        raise ValueError("Cannot divide by zero!")
    return a / b

为这些函数编写单元测试:

python 复制代码
# test_math_functions.py
import pytest
from math_functions import add, subtract, multiply, divide

def test_add():
    assert add(1, 2) == 3
    assert add(-1, 1) == 0
    assert add(-1, -1) == -2

def test_subtract():
    assert subtract(2, 1) == 1
    assert subtract(-1, 1) == -2
    assert subtract(-1, -1) == 0

def test_multiply():
    assert multiply(2, 3) == 6
    assert multiply(-1, 1) == -1
    assert multiply(-1, -1) == 1

def test_divide():
    assert divide(6, 3) == 2
    assert divide(-1, 1) == -1
    assert divide(-1, -1) == 1
    with pytest.raises(ValueError):
        divide(1, 0)

运行单元测试

在命令行中,导航到包含测试文件的目录,然后运行:

bash 复制代码
pytest

Pytest会自动发现所有以 test_ 开头的文件和函数,并运行它们。

集成测试

集成测试用于测试多个模块之间的交互。假设我们有一个简单的应用程序 app.py,它使用 math_functions.py 中的函数:

python 复制代码
# app.py
from math_functions import add, subtract, multiply, divide

def calculate(a, b, operation):
    if operation == 'add':
        return add(a, b)
    elif operation == 'subtract':
        return subtract(a, b)
    elif operation == 'multiply':
        return multiply(a, b)
    elif operation == 'divide':
        return divide(a, b)
    else:
        raise ValueError("Invalid operation!")

为这个应用程序编写集成测试:

python 复制代码
# test_app.py
import pytest
from app import calculate

def test_calculate_add():
    assert calculate(1, 2, 'add') == 3

def test_calculate_subtract():
    assert calculate(2, 1, 'subtract') == 1

def test_calculate_multiply():
    assert calculate(2, 3, 'multiply') == 6

def test_calculate_divide():
    assert calculate(6, 3, 'divide') == 2
    with pytest.raises(ValueError):
        calculate(1, 0, 'divide')

def test_calculate_invalid_operation():
    with pytest.raises(ValueError):
        calculate(1, 2, 'invalid')

运行集成测试

同样,在命令行中,导航到包含测试文件的目录,然后运行:

bash 复制代码
pytest

Pytest会发现并运行所有测试文件中的测试。

使用Fixtures进行测试初始化和清理

Fixtures用于在测试前进行初始化操作,并在测试后进行清理。以下是一个简单的示例:

python 复制代码
# test_math_functions_with_fixtures.py
import pytest
from math_functions import add, subtract, multiply, divide

@pytest.fixture
def setup_teardown():
    print("Setup before test")
    yield
    print("Teardown after test")

def test_add(setup_teardown):
    assert add(1, 2) == 3

def test_subtract(setup_teardown):
    assert subtract(2, 1) == 1

高级功能

Pytest还支持许多高级功能,例如参数化测试、标记测试和并行测试。以下是一些示例:

参数化测试
python 复制代码
@pytest.mark.parametrize("a, b, expected", [
    (1, 2, 3),
    (-1, 1, 0),
    (-1, -1, -2),
])
def test_add(a, b, expected):
    assert add(a, b) == expected
标记测试
python 复制代码
@pytest.mark.slow
def test_slow_function():
    time.sleep(5)
    assert True

运行标记测试:

bash 复制代码
pytest -m slow
并行测试

安装 pytest-xdist

bash 复制代码
pip install pytest-xdist

使用并行测试:

bash 复制代码
pytest -n 4

通过这些示例,你可以使用Pytest进行高效的单元测试和集成测试。Pytest的灵活性和强大的功能使其成为Python测试领域的一个重要工具。

相关推荐
2601_9563198815 分钟前
2026年零基础学量化:从看懂示例到写清条件和动作
人工智能·python
Thecozzy21 分钟前
大厂 AI Coding 面试大招
人工智能·面试·职场和发展
过期的秋刀鱼!37 分钟前
LangChain-D1-模型的工作流程
人工智能·python·langchain
萤火工厂目视化设计1 小时前
智能制造与企业文化目视化浪潮下:中小工厂的机遇与挑战
python·制造
Dr.kangder1 小时前
嵌入式面试总结(十五)——异常处理
单片机·面试·职场和发展·系统架构·嵌入式
DeepVisionary2 小时前
从GPT-5.6 Sol的Ultrafast模式看推理速度竞赛:750 token/秒背后,Cerebras的晶圆级生意
python·自动化
leisoo80973 小时前
财报数据怎么排雷本地化Python构建财务异常预警系统
人工智能·python·算法
AI领路人.3 小时前
[特殊字符] 用 OpenClaw 实现一个 C++ 复刻版 QuantClaw
websocket·单元测试·discord·rest api·内存占用·c++17
小柯南敲键盘3 小时前
跨马翻译:跨境电商批量图片翻译与视频字幕一站式工具
人工智能·python·音视频
卷无止境4 小时前
FastAPI Guard 全解析,从概念到工程落地的实战指南
后端·python