conftest.py
schreiben (kann für jedes Verzeichnis erstellt werden)Dies bedeutet, für jedes Verzeichnis "conftest.py" zu schreiben.
tests
├── __init__.py
├── event
│ ├── __init__.py
| |── conftest.py #Allgemeiner Setup-Code
│ ├── battle_event_1207
│ │ ├── __init__.py
│ │ ├── conftest.py #Setup-Code für zeitlich begrenzte Ereignisse
│ │ └── test_event.py
│ └── battle_event_1213
│ ├── __init__.py
│ ├── conftest.py #Noch einer
│ └── test_event.py
└── logics
└── __init__.py
__Web Framework verwendet Flask __
Dies ist nur möglich, wenn Sie die Anwendungsspezifikationen verstehen und lernen, wie Sie das Webframework / Testframework verwenden.
_ Überlegen Sie, ob Sie Web Test oder Flask's integrierten Test verwenden möchten _
Es scheint gut zu sein, das Testziel zu importieren oder zu initialisieren. Wenn Sie eine Datei mit dem Namen "conftest.py" erstellen, liest pytest sie für Sie.
Außerdem sind die Funktionen, die mit "pytest_" beginnen, spezielle Funktionen und verwenden hauptsächlich "pytest_funcarg__xxxx (request)". Sie können dies verwenden, um Objekte, die von der Testfunktion abhängen, als Argumente zu übergeben. Wenn Sie auf der Seite der Testfunktion ein Argument mit dem Namen "xxxx" angeben, wird es dort übergeben.
conftest.py
# coding: utf-8
"""battle_event_1213 bootstrap.
Gemeinsame Verarbeitung von Modulen, die im Testcode verwendet werden
Erstellung von Testzielen usw.
"""
from datetime import datetime, timedelta
def pytest_report_header(config):
"""Testbericht-Header
"""
return "battle_event_1213 Test"
def get_time_subtract_by_delta(seconds):
return datetime.now() + timedelta(seconds=-1 * seconds)
#def pytest_addoption(parser):
# parser.addoption('--ssh', action='store', default=None, help='specify ssh host to run tests with')
class MySetup(object):
"""Fabrik hier beschrieben
"""
def getEventCls(self):
from event_models.battle_event_1213 import Event
return Event
def makeEvent(self, *args, **kwargs):
return self.getEventCls()(*args, **kwargs)
def pytest_funcarg__mysetup(request):
"""DI(Abhängigkeitsspritze)
Testfunktion/Im Argument der Methode`mysetup`Konkretisieren
"""
return MySetup()
def pytest_funcarg__event(request):
return MySetup().makeEvent()
Sie können den Dekorator pytest.mark.skipif
verwenden, um den Test zu überspringen, wenn die Bedingung erfüllt ist. Obwohl es sich um eine Funktion handelt, die bereits gelöscht wurde, ist es möglich, vorerst nur den Testfall zu belassen oder das Ablaufdatum anzugeben und die Funktion zu gegebener Zeit für eine begrenzte Zeit zu überspringen.
Auf der Seite des Setup-Codes wird das von der Funktion pytest_funcarg__event (request )
zurückgegebene Objekt an das Argument event
übergeben. Da Sie den Status des zu testenden Objekts testen möchten, der im Grunde von Anfang an eingerichtet wurde, entfällt durch die Verwendung von conftest.py
die Einrichtung auf der Testcodeseite.
Wie in diesem Beispiel können Sie den Dekorator pytest.mark.parametrize
verwenden, um Eingabe- und Erwartungswerte zu übergeben, um den Aufwand des wiederholten Schreibens von Testfunktionen / -methoden zu vermeiden. Wie "pytest_funcarg__xxxx (request)" wird es an das Argument der Testfunktion übergeben.
test_event.py
# coding: utf-8
import pytest
from datetime import datetime
#Gültigkeitsdauer des Tests
is_timeout_event = datetime.now() > datetime(2012,12,19,23,59)
check_event_period = pytest.mark.skipif('%s' % is_timeout_event)
#Testparameter
EXCEEDED_GAUGE = 140
MAX_GAUGE = 100
MAX_ATTACK_PT = 4
#Wenn Sie einige Zeichen in skipif einfügen, wird der Test übersprungen(Ich habe die fehlerhafte Funktion gelöscht und den Test übersprungen)
@pytest.mark.skipif('"Das Messgerät verwendet ein großartiges Messgerät. Überspringen Sie diesen Test"')
class TestEventDame(object):
@pytest.mark.parametrize('prop', [
'dame_gauge',
])
def test_exists_properties(self, event, prop):
assert hasattr(event, prop)
@pytest.mark.parametrize(('input_val', 'set_val', 'mode'), [
(0, 0, False),
(1, 1, False),
(MAX_GAUGE, MAX_GAUGE, True),
(EXCEEDED_GAUGE, MAX_GAUGE, True),
])
def test_update_dame_gauge(self, event, input_val, set_val, mode):
event.update_dame_gauge(input_val)
assert event.dame_gauge == set_val
assert event.is_dame() is mode
@pytest.mark.parametrize(('value', 'expected'), [
(0, 0),
(1, 1),
(2, 2),
(3, 3),
(4, 6),
])
def test_get_attack_pt_effect(self, event, value, expected):
result = event.get_attack_pt_effect(value)
assert result == expected
#Überspringen Sie diesen Test am Ende des Zeitraums
@check_event_period
class TestEventSugoiGauge(object):
@pytest.mark.parametrize('prop', [
'attack_pt',
'current_use_attack_pt',
'update_datetime',
'_use_full_attack_pt_count',
'_use_full_attack_pt_count_with_win',
])
def test_exists_properties(self, event, prop):
assert hasattr(event, prop)
@pytest.mark.parametrize(('value', 'expected'), [
(0, False),
(1, False),
(2, False),
(3, False),
(4, True),
])
def test_is_max_attack_pt(self, event, value, expected):
assert event.is_max_attack_pt(value) is expected
@pytest.mark.parametrize(('value', 'expected'), [
(0, 1),
(1, 2),
(9, 10),
])
def test_inc_use_full_attack_pt_count(self, event, value, expected):
event._use_full_attack_pt_count = value
event._use_full_attack_pt_count_with_win = value
event.inc_use_full_attack_pt_count()
event.inc_use_full_attack_pt_count_with_win()
assert event._use_full_attack_pt_count == expected
assert event._use_full_attack_pt_count_with_win == expected
@pytest.mark.parametrize(('value', 'win_flag', 'expected', 'win_expected'), [
(0, True, 0, 0),
(1, True, 0, 0),
(3, True, 0, 0),
(MAX_ATTACK_PT, False, 1, 0),
(MAX_ATTACK_PT, True, 1, 1),
])
def test_set_use_full_attack_pt(self, event, value, win_flag, expected, win_expected):
event.set_use_full_attack_pt(value, is_win=win_flag)
assert event._use_full_attack_pt_count == expected
assert event._use_full_attack_pt_count_with_win == win_expected
if __name__ == '__main__':
pytest.main()
Ich kann nicht zu Unittest zurückkehren
Recommended Posts