加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python – 将鼻子@attr添加到测试名称

发布时间:2020-12-20 13:44:51 所属栏目:Python 来源:网络整理
导读:我可以设置鼻子测试来运行@attr标签.我现在有兴趣知道我是否可以附加到测试名称末尾的@attr标签?我们要做的是添加一个标签,如果我们的测试遇到问题并且我们为它编写了一个缺陷,那么我们会将缺陷编号作为@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',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__更新了我所看到的截图:

解决方法

以下是使用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,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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读