我们有一个python项目,我们想要使用buildbot开始测试。其单元测试包括仅适用于某些平台的测试。因此,我们有测试应该在所有平台上传递,测试只能在1个特定平台上运行,测试应该通过平台A,B,C和传递B和D的测试。
这样做的最佳方式是什么?简单的套件会很麻烦,因为如上所述,每个测试都可以有不同的目标平台列表。我想添加“@run_on”和“@ignore_on”装饰器,它们可以将平台与测试方法相匹配。还有什么更好的吗?
答案 0 :(得分:2)
有几次我在测试模块中使用了这个非常简单的方法:
import sys
import unittest
if 'win' in sys.platform:
class TestIt(unittest.TestCase):
...
if 'linux' in sys.platform:
class TestIt(unittest.TestCase):
...
答案 1 :(得分:0)
对于测试加载器来说,这听起来很方便。
查看http://docs.python.org/library/unittest.html#unittest.TestLoader.loadTestsFromName
如果您提供一些合适的命名约定,则可以根据测试命名约定创建套件。
如果我在AIX,Linux(全部)和32位Windows上执行测试A,测试在Windows 64,Linux 64和Solaris上运行的B,并测试在除HPUX和测试D之外的所有内容上运行的C在所有事情上运行......有什么可能的命名约定?
class TestA_AIX_Linux2_Win32( unittest.TestCase ):
class TestB_Win64_Linux64_Solaris( unittest.TestCase ):
class TestC_AIX_Linux2_Win32_Win64_Linux64_Solaris( unittest.TestCase ):
class TestD_All( unittest.TestCase ):
困难的部分是“不是HP / UX”。避免负面逻辑会让您的生活更加简单。在这种情况下,您只需列出所有非HP / UX的操作系统。这个名单很短,而且增长缓慢。
“全部”测试只是一个单独的文本搜索,它与当前平台的测试列表合并,以创建一个完整的套件。
您可以尝试类似
的内容class TextC_XHPUX( unittest.TestCase ):
您的文字匹配规则通常为"_someOSName"
;您的异常将是一个奇怪的文本过滤器,以便使用"_X"
名称。
“我们不能有一个正面的操作系统列表。如果我们添加一个新操作系统怎么办?我们是否必须重命名每个测试以明确包含它?”是。新的操作系统市场发展缓慢,管理并不痛苦。
另一种方法是在每个类(即类级函数)或装饰器中包含信息,并使用定制的类加载器来评估类级函数。
答案 2 :(得分:0)
我们决定使用装饰器,使用平台模块和其他装置,检查是否应该执行测试,如果不是简单地让它通过(尽管我们看到python2.7已经在其主干中有一个SkipTest在这种情况下可以提出的例外,忽略测试。)