conftest.py
(peut être créé pour chaque répertoire)C'est ce que signifie écrire conftest.py
pour chaque répertoire.
tests
├── __init__.py
├── event
│ ├── __init__.py
| |── conftest.py #Code de configuration commun
│ ├── battle_event_1207
│ │ ├── __init__.py
│ │ ├── conftest.py #Code de configuration d'événement à durée limitée
│ │ └── test_event.py
│ └── battle_event_1213
│ ├── __init__.py
│ ├── conftest.py #Un autre
│ └── test_event.py
└── logics
└── __init__.py
__Web Framework utilise Flask __
Là où c'est impossible à moins de comprendre les spécifications de l'application et d'apprendre à utiliser le framework Web / le framework de test
_ Considérer s'il faut utiliser Web Test ou Test intégré de Flask _
Il semble bon d'importer ou d'initialiser la cible de test. Si vous créez un fichier avec le nom conftest.py
, pytest le lira pour vous.
De plus, les fonctions commençant par pytest_
sont des fonctions spéciales et utilisent principalement pytest_funcarg__xxxx (request)
.
Vous pouvez l'utiliser pour transmettre des objets qui dépendent de la fonction de test en tant qu'arguments. Du côté de la fonction de test, si vous spécifiez un argument avec le nom «xxxx», il y sera passé.
conftest.py
# coding: utf-8
"""battle_event_1213 bootstrap.
Traitement courant des modules utilisés dans le code de test
Création de cibles de test, etc.
"""
from datetime import datetime, timedelta
def pytest_report_header(config):
"""En-tête du rapport de test
"""
return "battle_event_1213 essai"
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):
"""Usine décrite ici
"""
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(Injection de dépendance)
Fonction de test/Dans l'argument de la méthode`mysetup`Spécifier
"""
return MySetup()
def pytest_funcarg__event(request):
return MySetup().makeEvent()
Vous pouvez utiliser le décorateur pytest.mark.skipif
pour sauter le test lorsque la condition est vraie. Bien que ce soit une fonction qui a déjà été supprimée, il est possible de ne laisser que le cas de test pour le moment, ou de spécifier la date d'expiration et d'ignorer la fonction pendant un temps limité le moment venu.
Du côté du code d'installation, l'objet renvoyé par la fonction pytest_funcarg__event (request)
est passé à l'argument ʻevent. Puisque vous voulez tester l'état de l'objet à tester qui est fondamentalement configuré depuis le début, utiliser
conftest.pyélimine le problème de configuration côté code de test. Comme dans cet exemple, vous pouvez utiliser le décorateur
pytest.mark.parametrizepour passer l'entrée et les valeurs attendues afin d'éliminer les tracas liés à l'écriture répétée de fonctions / méthodes de test. Comme
pytest_funcarg__xxxx (request)`, il est passé à l'argument de la fonction de test.
test_event.py
# coding: utf-8
import pytest
from datetime import datetime
#Période de validité du test
is_timeout_event = datetime.now() > datetime(2012,12,19,23,59)
check_event_period = pytest.mark.skipif('%s' % is_timeout_event)
#Paramètres de test
EXCEEDED_GAUGE = 140
MAX_GAUGE = 100
MAX_ATTACK_PT = 4
#Si vous mettez des caractères dans skipif, le test sera ignoré(J'ai supprimé la mauvaise fonction, donc j'ai sauté le test)
@pytest.mark.skipif('"La jauge utilise une bonne jauge, alors sautez ce 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
#Passer ce test à la fin de la période
@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()
Je ne peux pas retourner à unittest
Recommended Posts