gpt4 book ai didi

python - 将 nose @attr 附加到测试名称

转载 作者:太空宇宙 更新时间:2023-11-03 11:51:35 26 4
gpt4 key购买 nike

我能够设置 Nose 测试以使用@attr 标签运行。我现在想知道我是否可以将 @attr 标记附加到测试名称的末尾?我们正在尝试做的是,如果我们的测试遇到问题并为它写下缺陷,我们会添加一个标签,然后我们会将缺陷编号作为@attr 标签。然后当我们运行时,我们可以很容易地识别出哪些测试有针对它们的开放缺陷。

只是想知道这是否可能,去哪里查看如何设置?

运行带有答案的编辑结果:enter image description here enter image description here

测试结果: enter image description here

所以我有点知道发生了什么,如果我在类级别有 @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__ 中看到的截图:

enter image description here

最佳答案

以下是使用 args 类型属性的方法:

重命名_测试.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 报告正常工作,应在运行测试之前进行测试重命名。您可以在导入时执行此操作,这里是未经测试的技巧,展示了如何执行此操作:

重命名_测试.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

关于python - 将 nose @attr 附加到测试名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25869667/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com