[PYTHON] résumé de l'utilisation de pytest

J'avais rarement écrit du ** "code de test" ** jusqu'à présent, mais j'ai eu l'occasion d'écrire du code de test python et j'ai appris à l'utiliser rapidement. Dans cet article, je me suis concentré sur l'utilisation de pytest, qui est un cadre de test unitaire de python.

Référence: document officiel (https://docs.pytest.org/en/latest/contents.html)


Qu'est-ce que Pytest

Un framework pour les tests unitaires en python. Il en existe un similaire appelé unittest, mais pytest semble être plus populaire. Voici les caractéristiques de pytest

Installation

pip install -U pytest

Facile à utiliser

Test unitaire simple

En gros, vous pouvez exécuter le test comme suit.

Si vous entrez le nom du fichier et le nom de la méthode dans test_ *, le code de test sera trouvé automatiquement (vous pouvez le spécifier vous-même).

test_sample.py


def func(x):
    return x + 1

def test_answer():
    assert func(3) == 5

Créez le fichier test_sample.py ci-dessus et Exécutez pytest.

Ensuite, le résultat du test suivant s'affiche. <détails>

Résultats des tests </ summary>

========================================== test session starts ===========================================
platform darwin -- Python 3.7.6, pytest-5.4.3, py-1.8.1, pluggy-0.13.1
rootdir: /Users/xin/work/study/pytest
plugins: hypothesis-5.5.4, arraydiff-0.3, remotedata-0.3.2, openfiles-0.4.0, doctestplus-0.5.0, astropy-header-0.1.2
collected 1 item                                                                                         

test_sample.py F                                                                                   [100%]

================================================ FAILURES ================================================
______________________________________________ test_answer _______________________________________________

    def test_answer():
>       assert func(3) == 5
E       assert 4 == 5
E        +  where 4 = func(3)

test_sample.py:5: AssertionError
======================================== short test summary info =========================================
FAILED test_sample.py::test_answer - assert 4 == 5
=========================================== 1 failed in 0.18s ============================================

Test de gestion des exceptions

Le test d'exception est possible avec pytest.raises

error_sample.py


import pytest

def f():
    raise SystemExit(1)

def test_mytest():
    with pytest.raises(SystemExit):
        f()

Exécution de plusieurs tests dans une classe

En créant une classe avec Test comme préfixe, vous pouvez tester les méthodes de test internes en même temps.

test_class.py


class TestClass:
    def test_one(self):
        x = "this"
        assert "h" in x

    def test_two(self):
        x = "hello"
        assert hasattr(x, "check")

fixation

Qu'est-ce qu'un luminaire?

Un outil fourni pour mettre en place un environnement d'exécution de test. Je vais en choisir quelques-uns utiles. Voir ci-dessous pour plus de détails (https://docs.pytest.org/en/latest/fixture.html)

tmpdir L'appareil tmpdir vous permet de créer un répertoire unique qui est temporairement disponible pendant les tests.

test_tempdir.py


import os

def test_create_file(tmpdir):
    p = tmpdir.mkdir("sub").join("hello.txt") #Créer un répertoire temporaire
    p.write("content")
    assert p.read() == "content"
    assert len(tmpdir.listdir()) == 1
    assert 0

monkeypatch L'appareil monkeypatch vous permet de simuler un objet. Par exemple, supposons que vous ayez le code produit suivant, et qu'un get_value () est une fonction qui ne peut pas être facilement exécutée.

monkeypatch_product.py


def return_value(): #Code produit
    a = get_value()
    return a

def get_value(): #Fonctions difficiles à exécuter
    return 1

À ce stade, vous pouvez exécuter le test en remplaçant get_value () par votre propre fonction fictive par monkeypatch.setattr.

monkeypatch_test.py


import monkeypatch_product

#Code de test
def test_return_value(monkeypatch):
    def mock_get_value():
        return 100

    #Remplacé par la fonction simulée
    monkeypatch.setattr(monkeypatch_product, "get_value", mock_get_value)
    res = monkeypatch_product.return_value()
    assert res == 100

Vous pouvez également simuler des variables d'environnement avec monkeypatch.setenv.

monkeypatch_env.py


import os

#Code produit
def get_os_user_lower():
    username = os.getenv("USER")

    if username is None:
        raise OSError("USER environment is not set.")

    return username.lower()

#Code de test
def test_get_os_user_lower(monkeypatch):
    monkeypatch.setenv("USER", "TestingUser")
    assert get_os_user_lower() == "testinguser"

Recommended Posts

résumé de l'utilisation de pytest
résumé pytest
Résumé de l'utilisation de pyenv
pandas Matplotlib Résumé par utilisation
Utilisation super basique de pytest
pytest
Résumé d'utilisation pratique de Flask
Résumé de l'utilisation de Pipenv (pour moi-même)
Résumé de l'utilisation de base de Pandas
Résumé Python
Résumé de Django
Résumé de python-pptx
mémo pytest
Résumé Linux
Résumé Python
Résumé de Django
résumé pyenv
Résumé de la chaîne de caractères 1
Résumé matplotlib