我们有一个python项目,我们想要使用buildbot开始测试它。它的单元测试包括应该只在某些平台上工作的测试。因此,我们有应该在所有平台上通过的测试,应该只在一个特定平台上运行的测试,应该在平台A、B、C上通过的测试,以及在B和D上通过的测试。
做这件事的最好方法是什么?简单的套件将是一个麻烦,因为如上所述,每个测试可以有一个不同的目标平台列表。我考虑添加"@run_on“和"@ignore_on”装饰器来匹配平台和测试方法。还有更好的吗?
发布于 2009-09-03 06:50:32
我们决定使用装饰器,使用平台模块和其他模块,检查是否应该执行测试,如果不是,就让它通过(不过,我们看到python2.7在其主干中已经有一个SkipTest异常,在这种情况下可能会引发,以忽略测试)。
发布于 2009-07-29 12:01:49
在一些情况下,我在测试模块中使用了这种非常简单的方法:
import sys
import unittest
if 'win' in sys.platform:
class TestIt(unittest.TestCase):
...
if 'linux' in sys.platform:
class TestIt(unittest.TestCase):
...
发布于 2009-07-29 11:44:32
对于测试加载器来说,这听起来是一个很方便的地方。
查看http://docs.python.org/library/unittest.html#unittest.TestLoader.loadTestsFromName
如果您提供了一些合适的命名约定,则可以基于您的测试命名约定创建套件。
如果我有在AIX、Linux (all)和32位Windows上执行的测试A,在Windows64、Linux 64和Solaris上运行的测试B,以及在除HPUX之外的所有系统上运行的测试C和在所有系统上运行的测试D...对此有什么可能的命名约定?
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"
名称。
“我们不能有一个肯定的操作系统列表。如果我们添加一个新的操作系统呢?我们必须重命名每个测试以明确地包括它吗?”是。新的操作系统市场发展缓慢,管理起来也不是那么痛苦。
另一种方法是在每个类(即类级函数)或装饰器中包含信息,并使用自定义的类加载器来计算类级函数。
https://stackoverflow.com/questions/1199493
复制相似问题