如何分发和执行特定于平台的单元测试?

时间:2009-07-29 11:13:10

标签: python unit-testing buildbot

我们有一个python项目,我们想要使用buildbot开始测试。其单元测试包括仅适用于某些平台的测试。因此,我们有测试应该在所有平台上传递,测试只能在1个特定平台上运行,测试应该通过平台A,B,C和传递B和D的测试。

这样做的最佳方式是什么?简单的套件会很麻烦,因为如上所述,每个测试都可以有不同的目标平台列表。我想添加“@run_on”和“@ignore_on”装饰器,它们可以将平台与测试方法相匹配。还有什么更好的吗?

3 个答案:

答案 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在这种情况下可以提出的例外,忽略测试。)