DEV Community

Cover image for Intro to Pytest
ThatMLGuy
ThatMLGuy

Posted on

Intro to Pytest

The pytest framework makes it easy to write small, readable tests, and can scale to support complex functional testing for applications and libraries.

To install pytest, run:

pip install pytest
Enter fullscreen mode Exit fullscreen mode

In this post, we’ll create a simple division function and then write tests that validate its behavior.

Step 1: Create Your Code File

Let’s create a file called methods.py with a simple method that divides two integer numbers and returns a floating number:

# methods.py
def division(a: int, b: int) -> float:
    return a / b
Enter fullscreen mode Exit fullscreen mode

Step 2: Create Your Test File

Next, create a file named tests.py, which will contain all the tests.

We’ll use @pytest.mark.parametrize to run the test function multiple times with different inputs.

# tests.py
import pytest
from methods import division

@pytest.mark.parametrize(
    "a,b,expected",
    [
        (10, 20, 0.5),                  
        (20, 0, ZeroDivisionError),
        ("10", "hello", TypeError),
    ],
)
def test_division(a, b, expected):
    # If expected is an exception type, assert that the error is raised
    if isinstance(expected, type) and issubclass(expected, Exception):
        with pytest.raises(expected):
            division(a, b)
    else:
        # Otherwise, assert the result matches
        assert division(a, b) == expected
Enter fullscreen mode Exit fullscreen mode

Our Test Cases:

a b expected result
10 20 0.5
20 0 ZeroDivisionError raised
"10" "hello" TypeError raised

Step 3: Run Your Tests

From your terminal, run:

pytest tests.py
Enter fullscreen mode Exit fullscreen mode

Pytest will automatically:

  • execute all the test methods in the file
  • display which tests passed or failed
  • show helpful tracebacks when something goes wrong

Output:

collected 3 items                                                                                          

tests.py ...                                                                                         [100%]

============================================ 3 passed in 0.02s =============================================
Enter fullscreen mode Exit fullscreen mode

All the test cases have passes as we are aware what errors would be raised.

I know this is a short post, but I felt it was cool and just wanted to share it with you all. If you know any other tools or frameworks worth checking out, feel free to share them in the comments.

If you want to explore more, check out the official documentation at PyTest Docs

Top comments (0)