详细的 pytest 教程
发布人:shili8
发布时间:2025-01-10 03:22
阅读次数:0
**Pytest 教程**
Pytest 是一个流行的 Python 测试框架,用于编写和运行测试用例。它提供了许多特性来帮助开发者编写高质量的测试,并且可以与其他测试工具集成。
### 安装 Pytest首先,我们需要安装 Pytest。我们可以使用 pip 来安装:
bashpip install pytest
### 创建测试文件创建一个名为 `test_example.py` 的新文件,用于存放我们的测试用例。
### 编写测试用例在 `test_example.py` 文件中,我们可以编写测试用例。例如,我们可以编写一个测试来检查一个函数是否正确地返回了一个值:
# test_example.pydef add(a, b): return a + bdef test_add(): assert add(2,3) ==5
在上面的示例中,我们定义了一个 `add` 函数,用于将两个数字相加。然后,我们编写了一个测试用例 `test_add()`,用于检查 `add` 函数是否正确地返回了一个值。
### 运行测试我们可以使用以下命令来运行我们的测试:
bashpytest test_example.py
如果所有测试都通过,则会输出如下信息:
============================= test session starts ============================== platform linux -- Python3.9.5, pytest-6.2.4, py-1.10.0, pluggy-0.13.0rootdir: /home/user/projectcollected1 itemtest_example.py . [100%] ==============================1 passed in0.01s ===============================
### 使用标签进行测试分组我们可以使用 `@pytest.mark` 来为我们的测试添加标签。例如,我们可以将一个测试标记为 `slow`:
# test_example.pyimport pytestdef add(a, b): return a + b@pytest.mark.slowdef test_add(): assert add(2,3) ==5
然后,我们可以使用以下命令来运行所有 `slow` 测试:
bashpytest -m slow test_example.py
### 使用 fixture 提供测试数据我们可以使用 `@pytest.fixture` 来为我们的测试提供fixture。例如,我们可以定义一个 fixture 来返回两个数字的和:
# conftest.pyimport pytest@pytest.fixturedef numbers(): return2,3
然后,我们可以在我们的测试中使用这个fixture:
# test_example.pyimport pytestdef add(a, b): return a + bdef test_add(numbers): assert add(*numbers) ==5
### 使用参数化进行测试我们可以使用 `@pytest.mark.parametrize` 来为我们的测试提供多个输入值。例如,我们可以定义一个测试来检查两个数字的和:
# test_example.pyimport pytestdef add(a, b): return a + b@pytest.mark.parametrize("a, b, expected", [ (2,3,5), (4,5,9), ]) def test_add(a, b, expected): assert add(a, b) == expected
### 使用 mock 对象进行测试我们可以使用 `@pytest.fixture` 来为我们的测试提供mock对象。例如,我们可以定义一个fixture来返回一个mock对象:
# conftest.pyimport pytest@pytest.fixturedef mock_object(): return object()
然后,我们可以在我们的测试中使用这个fixture:
# test_example.pyimport pytestdef test_mock_object(mock_object): assert isinstance(mock_object, object)
### 使用依赖注入进行测试我们可以使用 `@pytest.fixture` 来为我们的测试提供依赖对象。例如,我们可以定义一个fixture来返回一个依赖对象:
# conftest.pyimport pytest@pytest.fixturedef dependency(): return "dependency"
然后,我们可以在我们的测试中使用这个fixture:
# test_example.pyimport pytestdef test_dependency(dependency): assert dependency == "dependency"
### 使用异步测试进行测试我们可以使用 `@pytest.mark.asyncio` 来为我们的测试添加异步标签。例如,我们可以定义一个异步测试来检查一个函数是否正确地返回了一个值:
# test_example.pyimport pytestimport asyncioasync def add(a, b): return a + b@pytest.mark.asyncioasync def test_add(): assert await add(2,3) ==5
然后,我们可以使用以下命令来运行所有异步测试:
bashpytest -m asyncio test_example.py
### 使用多线程进行测试我们可以使用 `@pytest.mark.slow` 来为我们的测试添加慢速标签。例如,我们可以定义一个慢速测试来检查一个函数是否正确地返回了一个值:
# test_example.pyimport pytestimport threadingdef add(a, b): return a + b@pytest.mark.slowdef test_add(): assert add(2,3) ==5
然后,我们可以使用以下命令来运行所有慢速测试:
bashpytest -m slow test_example.py
### 使用多进程进行测试我们可以使用 `@pytest.mark.slow` 来为我们的测试添加慢速标签。例如,我们可以定义一个慢速测试来检查一个函数是否正确地返回了一个值:
# test_example.pyimport pytestfrom multiprocessing import Pooldef add(a, b): return a + b@pytest.mark.slowdef test_add(): assert add(2,3) ==5
然后,我们可以使用以下命令来运行所有慢速测试:
bashpytest -m slow test_example.py
### 使用分布式测试进行测试我们可以使用 `@pytest.mark.distributed` 来为我们的测试添加分布式标签。例如,我们可以定义一个分布式测试来检查一个函数是否正确地返回了一个值:
# test_example.pyimport pytestfrom distributed import Clientdef add(a, b): return a + b@pytest.mark.distributeddef test_add(): assert add(2,3) ==5
然后,我们可以使用以下命令来运行所有分布式测试:
bashpytest -m distributed test_example.py
### 使用 CI/CD 进行测试我们可以使用 `@pytest.mark.ci` 来为我们的测试添加CI标签。例如,我们可以定义一个CI测试来检查一个函数是否正确地返回了一个值:
# test_example.pyimport pytestdef add(a, b): return a + b@pytest.mark.cidef test_add(): assert add(2,3) ==5
然后,我们可以使用以下命令来运行所有CI测试:
bashpytest -m ci test_example.py
### 使用自定义标签进行测试我们可以使用 `@pytest.fixture` 来为我们的测试添加自定义标签。例如,我们可以定义一个自定义标签来检查一个函数是否正确地返回了一个值:
# conftest.pyimport pytest@pytest.fixturedef custom_tag(): return "custom"
然后,我们可以在我们的测试中使用这个fixture:
# test_example.pyimport pytestdef add(a, b): return a + b@pytest.mark.customdef test_add(custom_tag): assert add(2,3) ==5
### 使用多个标签进行测试我们可以使用 `@pytest.fixture` 来为我们的测试添加多个标签。例如,我们可以定义一个测试来检查一个函数是否正确地返回了一个值:
# test_example.pyimport pytestdef add(a, b): return a + b@pytest.mark.slow@pytest.mark.cidef test_add(): assert add(2,3) ==5
然后,我们可以使用以下命令来运行所有慢速和CI测试:
bashpytest -m slow -m ci test_example.py
### 使用环境变量进行测试我们可以使用 `@pytest.fixture` 来为我们的测试添加环境变量。例如,我们可以定义一个测试来检查一个函数是否正确地返回了一个值:
# conftest.pyimport pytest@pytest.fixturedef env_var(): return "env_var"
然后,我们可以在我们的测试中使用这个fixture:
# test_example.pyimport pytestdef add(a, b): return a + b@pytest.mark.env_vardef test_add(env_var): assert add(2,3) ==5
### 使用配置文件进行测试我们可以使用 `@pytest.fixture` 来为我们的测试添加配置文件。例如,我们可以定义一个测试来检查一个函数是否正确地返回了一个值:
# conftest.pyimport pytest@pytest.fixturedef config_file(): return "config_file"
然后,我们可以在我们的测试中使用这个fixture: