Добавьте нос @attr к имени теста
Я могу настроить тесты носа для запуска с тегом @attr. Теперь мне интересно узнать, могу ли я добавить в конец названия теста тег @attr? То, что мы пытаемся сделать, - это добавить тег, если наши тесты сталкиваются с проблемой, и мы записываем для нее дефект, а затем мы указываем номер дефекта как тег @attr. Затем, когда мы запустим, мы могли легко определить, какие тесты имеют открытые дефекты.
Просто интересно, возможно ли это вообще, и куда пойти посмотреть, как это настроить?
РЕДАКТИРОВАТЬ РЕЗУЛЬТАТЫ, РАБОТАЯ С ОТВЕТОМ:
Результаты теста:
Так что я вроде знаю, что происходит, если у меня есть @fancyattr()
на уровне класса он поднимает его и меняет название класса. Когда я ставлю @fancyattr()
на уровне теста это не меняет название теста, что мне нужно для этого.
Например - Меняет имя класса:
@dms_attr('DMSTEST')
@attr('smoke_login', 'smoketest', priority=1)
class TestLogins(BaseSmoke):
"""
Just logs into the system and then logs off
"""
def setUp(self):
BaseSmoke.setUp(self)
def test_login(self):
print u"I can login -- taking a nap now"
sleep(5)
print u"Getting off now"
def tearDown(self):
BaseSmoke.tearDown(self)
Это то, что мне нужно, и оно не работает:
@attr('smoke_login', 'smoketest', priority=1)
class TestLogins(BaseSmoke):
"""
Just logs into the system and then logs off
"""
def setUp(self):
BaseSmoke.setUp(self)
@dms_attr('DMSTEST')
def test_login(self):
print u"I can login -- taking a nap now"
sleep(5)
print u"Getting off now"
def tearDown(self):
BaseSmoke.tearDown(self)
Обновлен скриншот с тем, что я вижу с __doc__
:
1 ответ
Вот как это сделать с атрибутами типа args:
rename_test.py:
import unittest
from nose.tools import set_trace
def fancy_attr(*args, **kwargs):
"""Decorator that adds attributes to classes or functions
for use with the Attribute (-a) plugin. It also renames functions!
"""
def wrap_ob(ob):
for name in args:
setattr(ob, name, True)
#using __doc__ instead of __name__ works for class methods tests
ob.__doc__ = '_'.join([ob.__name__, name])
#ob.__name__ = '_'.join([ob.__name__, name])
return ob
return wrap_ob
class TestLogins(unittest.TestCase):
@fancy_attr('slow')
def test_method():
assert True
@fancy_attr('slow')
def test_func():
assert True
Выполнение теста:
$ nosetests rename_test.py -v
test_method_slow ... ok
test_func_slow ... ok
----------------------------------------------------------------------
Ran 2 tests in 0.003s
OK
РЕДАКТИРОВАТЬ: для работы отчетов xunit, переименование теста должно быть выполнено до запуска теста. Вы можете сделать это при импорте, вот непроверенный хак, показывающий, как это сделать:
rename_test.py:
import unittest
def fancy_attr(*args, **kwargs):
"""Decorator that adds attributes to classes or functions
for use with the Attribute (-a) plugin. It also renames functions!
"""
def wrap_ob(ob):
for name in args:
setattr(ob, name, True)
ob.__doc__ = '_'.join([ob.__name__, name])
return ob
return wrap_ob
class TestLogins(unittest.TestCase):
@fancy_attr('slow')
def test_method(self):
assert True
def make_name(orig, attrib):
return '_'.join([orig, attrib])
def rename(cls):
methods = []
for key in cls.__dict__:
method = getattr(cls, key)
if method:
if hasattr(cls.__dict__[key], '__dict__'):
if 'slow' in cls.__dict__[key].__dict__:
methods.append(key)
print methods
for method in methods:
setattr(cls, make_name(method, 'slow'), cls.__dict__[key])
delattr(cls, method)
rename(TestLogins)
@fancy_attr('slow')
def test_func():
assert True