pytest 参数化进阶
发布人:shili8
发布时间:2025-01-02 23:23
阅读次数:0
**Pytest 参数化进阶**
在前面的文章中,我们已经学习了如何使用 Pytest 进行参数化测试。然而,Pytest 的参数化功能远不止于此。在本文中,我们将深入探讨 Pytest 参数化的进阶主题。
###1. 使用 `@pytest.mark.parametrize` 装饰器我们先来回顾一下最基本的参数化方式:使用 `@pytest.mark.parametrize` 装饰器。这个装饰器允许我们传递多个测试用例给一个单独的测试函数。
import pytest@pytest.mark.parametrize("input,expected", [ (1,2), (2,4), (3,6) ]) def test_add(input, expected): assert input + input == expected
在这个例子中,我们使用 `@pytest.mark.parametrize` 装饰器传递三个测试用例给 `test_add` 函数。
###2. 使用 `parametrize` 函式除了使用装饰器之外,我们还可以使用 `parametrize` 函式来进行参数化。
import pytest@pytest.fixture(params=[ (1,2), (2,4), (3,6) ]) def input_data(request): return request.paramdef test_add(input_data): assert input_data[0] + input_data[0] == input_data[1]
在这个例子中,我们使用 `parametrize` 函式来传递三个测试用例给 `test_add` 函数。
###3. 使用 `@pytest.mark.parametrize` 装饰器的多个参数我们可以使用 `@pytest.mark.parametrize` 装饰器传递多个参数。
import pytest@pytest.mark.parametrize("input1,input2,expected", [ (1,2,3), (2,4,6), (3,6,9) ]) def test_add(input1, input2, expected): assert input1 + input2 == expected
在这个例子中,我们使用 `@pytest.mark.parametrize` 装饰器传递三个参数给 `test_add` 函数。
###4. 使用 `parametrize` 函式的多个参数我们可以使用 `parametrize` 函式传递多个参数。
import pytest@pytest.fixture(params=[ (1,2,3), (2,4,6), (3,6,9) ]) def input_data(request): return request.paramdef test_add(input_data): assert input_data[0] + input_data[1] == input_data[2]
在这个例子中,我们使用 `parametrize` 函式传递三个参数给 `test_add` 函数。
###5. 使用 `@pytest.mark.parametrize` 装饰器的多个参数和多个测试用例我们可以使用 `@pytest.mark.parametrize` 装饰器传递多个参数和多个测试用例。
import pytest@pytest.mark.parametrize("input1,input2,expected", [ (1,2,3), (2,4,6), (3,6,9) ]) def test_add(input1, input2, expected): assert input1 + input2 == expected
在这个例子中,我们使用 `@pytest.mark.parametrize` 装饰器传递三个参数和三个测试用例给 `test_add` 函数。
###6. 使用 `parametrize` 函式的多个参数和多个测试用例我们可以使用 `parametrize` 函式传递多个参数和多个测试用例。
import pytest@pytest.fixture(params=[ (1,2,3), (2,4,6), (3,6,9) ]) def input_data(request): return request.paramdef test_add(input_data): assert input_data[0] + input_data[1] == input_data[2]
在这个例子中,我们使用 `parametrize` 函式传递三个参数和三个测试用例给 `test_add` 函数。
###7. 使用 `@pytest.mark.parametrize` 装饰器的多个参数和多个测试用例,且测试用例为字典我们可以使用 `@pytest.mark.parametrize` 装饰器传递多个参数和多个测试用例,且测试用例为字典。
import pytest@pytest.mark.parametrize("input1,input2,expected", [ {"a":1, "b":2, "c":3}, {"d":2, "e":4, "f":6}, {"g":3, "h":6, "i":9} ]) def test_add(input1, input2, expected): assert input1["a"] + input2["b"] == expected["c"]
在这个例子中,我们使用 `@pytest.mark.parametrize` 装饰器传递三个参数和三个测试用例,且测试用例为字典给 `test_add` 函数。
###8. 使用 `parametrize` 函式的多个参数和多个测试用例,且测试用例为字典我们可以使用 `parametrize` 函式传递多个参数和多个测试用例,且测试用例为字典。
import pytest@pytest.fixture(params=[ {"a":1, "b":2, "c":3}, {"d":2, "e":4, "f":6}, {"g":3, "h":6, "i":9} ]) def input_data(request): return request.paramdef test_add(input_data): assert input_data["a"] + input_data["b"] == input_data["c"]
在这个例子中,我们使用 `parametrize` 函式传递三个参数和三个测试用例,且测试用例为字典给 `test_add` 函数。
###9. 使用 `@pytest.mark.parametrize` 装饰器的多个参数和多个测试用例,且测试用例为列表我们可以使用 `@pytest.mark.parametrize` 装饰器传递多个参数和多个测试用例,且测试用例为列表。
import pytest@pytest.mark.parametrize("input1,input2,expected", [ [1,2,3], [2,4,6], [3,6,9] ]) def test_add(input1, input2, expected): assert input1[0] + input2[1] == expected[2]
在这个例子中,我们使用 `@pytest.mark.parametrize` 装饰器传递三个参数和三个测试用例,且测试用例为列表给 `test_add` 函数。
###10. 使用 `parametrize` 函式的多个参数和多个测试用例,且测试用例为列表我们可以使用 `parametrize` 函式传递多个参数和多个测试用例,且测试用例为列表。
import pytest@pytest.fixture(params=[ [1,2,3], [2,4,6], [3,6,9] ]) def input_data(request): return request.paramdef test_add(input_data): assert input_data[0] + input_data[1] == input_data[2]
在这个例子中,我们使用 `parametrize` 函式传递三个参数和三个测试用例,且测试用例为列表给 `test_add` 函数。
### 总结本文介绍了 Pytest 参数化的进阶主题。我们学习了如何使用 `@pytest.mark.parametrize` 装饰器和 `parametrize` 函式进行参数化测试。我们还学习了如何传递多个参数和多个测试用例,且测试用例为字典或列表。这些知识将有助于你更好地掌握 Pytest 参数化的使用。