[파이썬] pytest parametrize 데코레이터 활용

Pytest is a popular testing framework for Python that is widely used for writing test cases. One of the powerful features of Pytest is the parametrize decorator, which allows you to define test cases with multiple input parameters.

In this blog post, we will explore how to use the parametrize decorator in Pytest to write more concise and efficient test cases.

What is the parametrize decorator?

The parametrize decorator in Pytest enables you to define multiple test cases with different input parameters in a single test function. This is particularly useful when you have a set of test cases that follow a similar pattern but need to be executed with different inputs.

The parametrize decorator takes two arguments - the name of the parameter and a list of values for that parameter. It generates multiple test cases by iterating over the list of values and substituting each value as an argument for the test function.

How to use the parametrize decorator?

To demonstrate the usage of the parametrize decorator, let’s consider a simple example where we have a function that calculates the square of a number.

def calculate_square(number):
    return number ** 2

We want to test this function with multiple inputs. Instead of writing separate test functions for each input, we can use the parametrize decorator to generate multiple test cases.

import pytest

@pytest.mark.parametrize("number, expected_result", [
    (2, 4),
    (5, 25),
    (10, 100)
])
def test_calculate_square(number, expected_result):
    assert calculate_square(number) == expected_result

In the example above, we have defined the test_calculate_square function as a test case using the parametrize decorator. The decorator specifies two parameters - number and expected_result - and provides a list of input-output pairs as values.

Pytest will automatically generate three test cases based on the provided values. Each test case will have the corresponding values for number and expected_result as arguments.

Benefits of using parametrize decorator

The parametrize decorator offers several benefits:

  1. Concise and readable code: By using the parametrize decorator, you can write multiple test cases in a single test function instead of creating separate functions for each case. This makes the code more readable and maintainable.

  2. Efficient testing: With the parametrize decorator, you can easily add new test cases by adding values to the input parameters’ list. This ensures that your test suite covers a wide range of scenarios without writing redundant code.

  3. Clear failures: If one of the test cases fails, Pytest will display the parameter values that caused the failure. This helps in debugging and identifying the specific inputs that resulted in the failure.

  4. Flexible test generation: The parametrize decorator allows you to generate test cases dynamically based on various conditions. You can use loops, conditionals, or even external data sources to generate test cases at runtime.

Conclusion

In this blog post, we explored the parametrize decorator in Pytest and how it can be used to write more efficient and concise test cases. We discussed its usage, benefits, and highlighted why it is a valuable tool in testing Python applications.

By leveraging the parametrize decorator in your test suite, you can effectively reduce code duplication, improve test coverage, and enhance the efficiency of your testing process.