pytest.mark.parametrize用法举例
时间: 2023-12-31 21:04:37 浏览: 145
pytest.mark.parametrize用法举例:可以在测试函数上方使用该装饰器,将多组参数传入测试函数,并自动化执行所有测试用例。例如:@pytest.mark.parametrize("input, expected_output", [(5, 10), (10, 20)])。这意味着我们将两组参数传递给该测试函数,第一组参数为5和10,第二组参数为10和20,分别执行测试函数,预期输出结果分别为10和20。
相关问题
python pytest框架举例
Python pytest是一个功能强大的测试框架,用于编写和运行单元测试、集成测试和功能测试。它提供了丰富的功能和灵活的用法,使得编写和运行测试变得简单而高效。
下面是一些Python pytest框架的特点和示例:
1. 简单易用:pytest提供了简洁的语法和易于理解的断言,使得编写测试用例变得简单而直观。
示例:
```python
def test_addition():
assert 2 + 2 == 4
def test_subtraction():
assert 5 - 3 == 2
```
2. 自动发现测试用例:pytest会自动发现以"test_"开头或以"_test"结尾的函数或方法作为测试用例,并执行它们。
示例:
```python
def test_multiply():
assert 3 * 4 == 12
def test_divide():
assert 10 / 2 == 5
```
3. 参数化测试:pytest支持使用@pytest.mark.parametrize装饰器来实现参数化测试,可以方便地对不同的输入进行测试。
示例:
```python
import pytest
@pytest.mark.parametrize("a, b, expected", [(2, 3, 5), (4, 5, 9)])
def test_addition(a, b, expected):
assert a + b == expected
```
4. 夹具(Fixture):pytest提供了夹具机制,可以在测试用例执行前后进行一些准备和清理工作,例如创建临时文件、启动和关闭数据库连接等。
示例:
```python
import pytest
@pytest.fixture
def setup():
# 执行一些准备工作
yield
# 执行一些清理工作
def test_something(setup):
# 使用夹具进行测试
assert True
```
5. 插件扩展:pytest支持通过插件来扩展其功能,例如生成测试报告、集成其他测试工具等。
示例:
```python
# 安装pytest-html插件:pip install pytest-html
# 运行测试并生成HTML报告
pytest --html=report.html
```
pytest 常用的装饰器有哪些,详细展开并举例说明
pytest 常用的装饰器有以下几个:
1. `@pytest.fixture`:用于创建测试用例需要使用的测试数据或测试环境,并在测试用例执行前后完成资源的分配和释放。例如:
```python
@pytest.fixture
def user():
return User('test_user', '123456')
def test_login(user):
assert login(user.username, user.password) == 'success'
```
2. `@pytest.mark.parametrize`:用于参数化测试用例,允许在同一个测试函数中多次执行相同的测试用例,只需提供不同的参数组合即可。例如:
```python
@pytest.mark.parametrize('a, b, expected', [(1, 2, 3), (3, 4, 7)])
def test_add(a, b, expected):
assert add(a, b) == expected
```
3. `@pytest.mark.skip`:用于跳过某些测试用例,通常是因为这些测试用例不适用于当前的测试环境或测试数据。例如:
```python
@pytest.mark.skip(reason='not implemented')
def test_something():
pass
```
4. `@pytest.mark.xfail`:用于标记期望测试用例失败,即使测试用例失败了也不会报错,通常是因为这些测试用例涉及到一些还未实现的功能。例如:
```python
@pytest.mark.xfail(raises=ZeroDivisionError)
def test_divide_by_zero():
assert 1 / 0 == 0
```
以上是 pytest 常用的装饰器及其用法,希望能对你有所帮助。
阅读全文