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测试领域的一个重要工具。

相关推荐
web3.08889991 天前
1688 图搜接口(item_search_img / 拍立淘) 接入方法
开发语言·python
AI算法沐枫1 天前
深度学习python代码处理科研测序数据
数据结构·人工智能·python·深度学习·决策树·机器学习·线性回归
X1A0RAN1 天前
解决Pycharm中部分文件或文件夹被隐藏不展示问题
ide·python·pycharm
kyriewen1 天前
面试官让我查各部门工资最高的员工,我用AI三秒写出窗口函数,他愣了
后端·mysql·面试
MomentYY1 天前
第 3 篇:让 Agent 学会分工,LangGraph 构建多 Agent系统
人工智能·python·agent
程序员Jelena1 天前
Python 代码是什么?—— 从字节到执行的完整解析
python
测试员周周1 天前
【Appium 系列】第13节-混合测试执行器 — API + UI 的协同执行
开发语言·人工智能·python·功能测试·ui·appium·pytest
罗超驿1 天前
18.事务的隔离性和隔离级别:MySQL面试高频考点全解析
数据库·mysql·面试
用户8356290780511 天前
Python 操作 PowerPoint OLE 对象
后端·python
做人求其滴1 天前
面试经典 150 题 380 274
c++·算法·面试·职场和发展·力扣