Pytest 入门学习
Pytest 测试框架使用简单、插件丰富、功能强大,被广泛用于 Python 自动化测试。本文主要介绍一些 Pytest 的基本概念和使用方法。
1. 运行机制
第一步,Pytest 从命令行或文件中读取配置第二步,在指定目录下查找并导入 conftest.py 文件第三步,查找满足匹配条件的测试文件,通常是 test_
开头的 py 文件第四步,执行 session 或 module 类型的 fixture第四步,查找并执行类、函数中,定义的测试用例
2. pytest.ini 和 conftest.py 文件
首先看下测试的文件组织方式:
|
|
执行 Pytest 时,不仅可以使用命令行传递运行时参数,还可以使用配置文件。Pytest 查找配置文件的顺序是:
|
|
通常在项目下放置 pytest.ini 文件,配置相关参数即可。pytest.ini:
|
|
tests/conftest.py 全局依赖的配置
|
|
运行测试时,执行命令:
|
|
3. pytest.fixture
fixture 是 Pytest 引入的概念,是 Pytest 提供的强大功能之一。下面来看看具体的用法:
3.1 直接作为常量使用
|
|
3.2 作为前置函数运行
fixture 允许在执行测试用例之前,先执行一些准备动作。
|
|
通过 autouse 和 scope,可以完成很多测试用例的准备工作。
3.3 作用域 - scope
通过 scope 参数声明作用域,可选项有四个,默认值为 function:
- function,函数级,每个测试函数都会执行一次
- class, 类级别,每个测试类执行一次,所有方法都可以使用
- module,模块级,每个模块执行一次,模块内函数和方法都可使用
- session,会话级,一次测试只执行一次,所有被找到的函数和方法都可用
|
|
4. pytest.mark
pytest.mark 的作用是对测试用例进行标记,从而更精细化地控制测试用例。marker 不需要事先定义好就能使用,下面是一个例子:
|
|
一些内置的 marker :
- skip,跳过被装饰的测试用例
- skipif,传递一个条件判断,满足时跳过测试
- xfail,如果执行失败则认为是通过,成功则认为失败
- parametrize,批量给测试用例提供数据。如果 parametrize 的参数名称和 fixture 名称一样,会覆盖 fixture。
|
|
5. 常用插件
5.1 pytest-cov
pytest-cov 是一个自动检测测试覆盖率的插件。使用示例:
|
|
5.2 pytest-mock
mock 是为了屏蔽一些依赖项。依赖项应该有单独的测试用例,每一个测试只需要关注自身功能是否正常。使用示例:
|
|
5.3 pytest-html
pytest-html 是一个能自动生成 HTML 格式测试报告的插件。使用示例:
|
|
5.4 pytest-django
pytest-django 为 Django 应用和项目添加了 Pytest 支持。具体来说,pytest-django 引入了使用 pytest fixture 测试 Django 项目的能力,并且比标准的 Django 测试套件运行得更快。