Python自动化测试教程_pytest框架实战

pytest是成熟灵活的Python测试框架,相比unittest更简洁,支持自动发现用例、断言重写、fixture依赖管理、参数化测试及丰富插件生态。

pytest是什么,为什么选它做自动化测试

pytest是一个成熟、功能丰富的Python测试框架,相比unittest更简洁灵活。它自带断言重写、自动发现测试用例、丰富的插件生态(如pytest-html生成报告、pytest-xdist支持并行执行),写测试不用写繁琐的类和setup/teardown方法,函数级测试即可开跑。

快速上手:写第一个pytest测试

安装只需一条命令:pip install pytest。新建一个test_example.py文件,内容如下:

def test_add():
    assert 2 + 3 == 5

def test_str_upper():
    assert "hello".upper() == "HELLO"

终端运行pytest,它会自动找到所有以test_开头的函数并执行。加上-v参数可显示详细结果,加-s可输出print内容。

用fixture管理测试依赖和资源

fixture是pytest的核心机制,用来准备、复用和清理测试环境。比如数据库连接、临时文件、模拟对象等,都可通过@pytest.fixture定义:

@pytest.fixture
def sample_data():
    return [1, 2, 3]

def test_sum(sample_data):
    assert sum(sample_data) == 6

fixture默认作用域是函数级,也可设为scope="class"scope="session"。带yield的fixture可自动执行清理逻辑。

参数化测试与跳过/标记用例

@pytest.mark.parametrize可以对同一逻辑批量验证多组输入:

@pytest.mark.parametrize("x,y,expected", [(2, 3, 5), (0, 0, 0), (-1, 1, 0)])
def test_add_param(x, y, expected):
    assert x + y == expected

跳过某条测试用@pytest.mark.skip,按条件跳过用@pytest.mark.skipif(如sys.version_info )。用@pytest.mark.smoke等自定义标签后,可运行pytest -m smoke只跑冒烟用例。