Python-Entwicklung unterstützt durch Jenkins-Unit-Test

Zusammenfassung dieses Artikels

Ich werde erklären, wie Jenkins dazu gebracht wird, Unit-Tests in der Entwicklung mit Python durchzuführen. Nose oder py.test sind Kandidaten für das Unit-Test-Framework von Python. Dieses Mal werden wir py.test verwenden.

Zu Jenkins

Die Umgebung ist wie folgt.

Artikel Version etc.
Python 3.5.1
Jenkins 1.6...?
Test-Framework py.test

py.test Installieren Sie mit pip install pytest

Beispiel für einen Testcode

Zu testender Code --carticer.py

class Calculator():
    def add(self, a, b):
        return a + b

    def sub(self, a, b):
        return a - b

    def mul(self, a, b):
        return a * b

    def div(self, a, b):
        return a / b

Testcode --test_calculator.py

import pytest
from calculator import Calculator

def pytest_funcarg__calc():
    return Calculator()

@pytest.mark.parametrize("a, b, r", [(9, 8, 17), (7, 6, 13), (5, 4, 9), (3, 2, 5), (1, 0, 1)])
def test_add(calc, a, b, r):
    assert calc.add(a, b) == r

@pytest.mark.parametrize("a, b, r", [(9, 8, 1), (7, 6, 1), (5, 4, 1), (3, 2, 1), (1, 0, 1)])
def test_sub(calc, a, b, r):
    assert calc.sub(a, b) == r

@pytest.mark.parametrize("a, b, r", [(9, 8, 72), (7, 6, 42), (5, 4, 20), (3, 2, 6), (1, 0, 0)])
def test_mul(calc, a, b, r):
    assert calc.mul(a, b) == r

@pytest.mark.parametrize("a, b, r", [(9, 3, 3), (8, 4, 2), (6, 2, 3), (4, 2, 2), (0, 1, 0)])
def test_div(calc, a, b, r):
    assert calc.div(a, b) == r

def test_div_error(calc):
    with pytest.raises(ZeroDivisionError):
        calc.div(1, 0)

Testlauf

Kann mit py.test ausgeführt werden Rekursiv unter dem ausgeführten Verzeichnis suchen Es wird die py-Datei ausgeführt, die mit dem Test beginnt.

Testergebnisse Erfolgsgeschichte

============================= test session starts ==============================
platform darwin -- Python 3.5.1, pytest-2.9.2, py-1.4.31, pluggy-0.3.1
rootdir: /Users/rotasuke/git/python_test/others, inifile: 
collected 21 items

test_calculator.py .....................

========================== 21 passed in 0.03 seconds ===========================

Fehlerbeispiel

============================= test session starts ==============================
platform darwin -- Python 3.5.1, pytest-2.9.2, py-1.4.31, pluggy-0.3.1
rootdir: /Users/rotasuke/git/python_test/others, inifile: 
collected 21 items

test_calculator.py ...................F.

=================================== FAILURES ===================================
_______________________________ test_div[0-1-1] ________________________________

calc = <calculator.Calculator object at 0x10c9567f0>, a = 0, b = 1, r = 1

    @pytest.mark.parametrize("a, b, r", [(9, 3, 3), (8, 4, 2), (6, 2, 3), (4, 2, 2), (0, 1, 1)])
    def test_div(calc, a, b, r):
>       assert calc.div(a, b) == r
E       assert 0.0 == 1
E        +  where 0.0 = <bound method Calculator.div of <calculator.Calculator object at 0x10c9567f0>>(0, 1)
E        +    where <bound method Calculator.div of <calculator.Calculator object at 0x10c9567f0>> = <calculator.Calculator object at 0x10c9567f0>.div

test_calculator.py:21: AssertionError
===================== 1 failed, 20 passed in 0.04 seconds ======================

Jenkins Schaffung von Arbeitsplätzen

Detaillierte Einstellungen wie Git Checkout werden weggelassen.

In [Build] - [Shell ausführen] py.test <Verzeichnis zum Ausführen> Konkretisieren.

Ausgabe des Testberichts

In dem auszuführenden Shell-Skript, das Sie zuvor eingegeben haben --junitxml = <Zielxml-Datei>> Durch Angabe kann der Testbericht im JUnit-Format ausgegeben werden.

[Aggregate JUnit-Testergebnisse] zu [Post-Build-Verarbeitung] hinzugefügt Geben Sie die XML-Datei an, die zuvor ausgegeben wurde.

Deckungsleistung

Installieren Sie das Modul für die Abdeckungsausgabe mit pip install pytest-cov

In dem auszuführenden Shell-Skript, das Sie zuvor eingegeben haben --cov-report=xml --cov Durch Angabe kann Coverage.xml in dem Verzeichnis ausgegeben werden, in dem der Befehl ausgeführt wird.

Dies kann visualisiert werden, indem das Cobertura-Plugin von Jenkins die Datei cover.xml liest.

Recommended Posts

Python-Entwicklung unterstützt durch Jenkins-Unit-Test
Primzahlbeurteilung durch Python
Python-Integritätstest
Primzahlbeurteilung mit Python
Visualisierungsnotiz von Python
Kommunikationsverarbeitung durch Python
Hinweise zur Entwicklung von Python-Paketen
Python Basic 8 Numpy Test
Python-Testpaket-Memo
Aufbau einer Python-Entwicklungsumgebung
Primzahlbeurteilung mit Python
Informationen zur Python-Entwicklungsumgebung
python2.7 Konstruktion der Entwicklungsumgebung
Beamformer-Antwort von Python
Framework-Entwicklung mit Python
Entwicklungsumgebung in Python
Python-Tag-Kooperationstest
Python-Unit-Test-Vorlage
Entwicklung des Bluemix Python Microservice
Slackbot-Entwicklung in Python
Algorithmus in Python (Haupturteil)
EXE Web API von Python
Newcomer Trainingsprogramm von Python
Pin Python von Conda verwaltet
Organisieren Sie die Python-Entwicklungsumgebung
Keyword-Extraktion mit MeCab (Python)
Zahlen durch 3 Ziffern trennen (Python)
[ev3dev × Python] Aufbau einer ev3dev-Entwicklungsumgebung
Python-Vorlage für Codeforces-manuelle Test-
Markov-Schaltmodell von Python
Python-Entwicklung mit Visual Studio 2017
Bildverarbeitung mit Python (Pillow)
Python wurde von C-Programmierern gestartet
Python-Debug- und Testmodul
[MEMO] [Entwicklung der Entwicklungsumgebung] Python
[Zum Organisieren] Python-Entwicklungsumgebung
Python-Entwicklung mit Visual Studio
Plattform (OS) Beurteilung durch Python
Sortieren nach Datum in Python
Stellen Sie den Python-Test in Jenkins ein
Memorandum of Scraping & Machine Learning [Entwicklungstechnik] von Python (Kapitel 4)
Memorandum of Scraping & Machine Learning [Entwicklungstechnik] von Python (Kapitel 5)
[Pytest] [mock] Anfänger in der Webentwicklung fassten den Unit-Test und den Mock in Python zusammen.