Home  >  Article  >  Backend Development  >  How to use pytest for Python unit testing

How to use pytest for Python unit testing

WBOY
WBOYOriginal
2023-08-03 14:45:111292browse

How to use pytest for Python unit testing

Introduction:
Unit testing is an indispensable task in software development. It can help us ensure the quality and stability of the code. In Python, pytest is a powerful and easy-to-use unit testing framework. This article will introduce how to use pytest for Python unit testing.

1. Install pytest
First, we need to install pytest. The installation can be easily completed using the pip command:

pip install pytest

2. Write test cases
Next, we need to write test cases. A test case is a block of code that verifies the function or functionality of the code under test.

Example:
Suppose we want to test a simple calculator module, which contains four operations: addition, subtraction, multiplication and division. We can create a file named test_calculator.py in the project to store the code of the test case. The following is the code of an example test case:

# test_calculator.py

from calculator import add, subtract, multiply, divide

def test_add():
    assert add(2, 3) == 5

def test_subtract():
    assert subtract(5, 3) == 2

def test_multiply():
    assert multiply(2, 3) == 6

def test_divide():
    assert divide(6, 3) == 2

In the above code, we use the assert statement provided by the pytest framework to assert whether the test results are as expected.

3. Run test cases
After completing the writing of test cases, we can use pytest to run these test cases.

Enter the project directory on the command line and enter the following command to test:

pytest

pytest will automatically find the test cases in the project and run them.

Example of running results:

============================= test session starts ==============================
platform darwin -- Python 3.9.0, pytest-6.2.2, py-1.10.0, pluggy-0.13.1
rootdir: /path/to/project
collected 4 items                                                              

test_calculator.py ....                                                  [100%]

============================== 4 passed in 0.02s ===============================

The above results show that all four test cases we wrote passed the test.

4. Advanced usage

  1. Parameterized testing
    Sometimes, in order to verify the working of a function under different input parameters, we need to write multiple test cases. pytest provides the function of parameterized testing, which can reduce the workload of writing repeated code.

Example:

import pytest

@pytest.mark.parametrize(
    "a, b, expected",
    [
        (2, 3, 5),
        (-1, 1, 0),
        (0, 0, 0),
    ],
)
def test_add(a, b, expected):
    assert add(a, b) == expected

In the above code, we use the @pytest.mark.parametrize decorator to parameterize the test case. Each set of parameters is automatically passed to the function under test and assertions are made.

  1. Set pre- and post-operations
    During the execution of test cases, sometimes we need to perform some preparation work before the test case runs, and perform some cleanup after the test case runs. Work. pytest provides decorators such as setup and teardown to implement these operations.

Example:

@pytest.fixture(autouse=True)
def setup_and_teardown():
    # 在测试用例运行之前的准备工作
    print("准备工作") 

    yield

    # 在测试用例运行之后的清理工作
    print("清理工作")

In the above example, we use the setup_and_teardown decorator to define a function with pre- and post-operations. Use the yield keyword to insert the test case into the location where the function is defined.

Conclusion:
This article introduces how to use pytest for Python unit testing. You can use pytest to easily conduct code testing by installing pytest, writing test cases, running test cases, and using advanced usage. I hope this article can be helpful to your unit testing work in software development.

The above is the detailed content of How to use pytest for Python unit testing. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn