2009-07-29 52 views
5

我们有一个python项目,我们要使用buildbot开始测试。它的单元测试包括只能在某些平台上运行的测试。所以,我们已经得到了应通过在所有平台应通过对平台的测试,应该只对1个特定平台上运行测试,测试,B,C和传递B测试和D.如何分发和执行平台特定的单元测试?

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

回答

0

我们决定与装饰去,当使用平台模块等,检查测试是否应执行,如果不是简单地让它通过(虽然,我们看到python2.7已经在其主干中有一个SkipTest异常,在这种情况下可能会引发,忽略测试)。

+1

SkipTest也很有用,非常方便 - 无跳过选项。 – Almad 2009-12-23 17:36:08

0

听起来像是一个测试装载一个方便的地方。

退房http://docs.python.org/library/unittest.html#unittest.TestLoader.loadTestsFromName

如果你提供你也许可以创建基于您的测试命名约定套房一些合适的命名约定。

如果我有在AIX,Linux(所有)和32位Windows上运行的测试A,运行在Windows 64,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"名称。

“我们不能有操作系统的。如果我们增加什么新的OS的肯定列表吗?我们必须每次测试,明确列入其重命名?”是。新的操作系统市场发展缓慢,管理起来并不痛苦。

另一种方法是包括每个类(即,类级功能)或装饰器内的信息,并使用一个定制的类加载器,用于评估类级功能。

+0

我不明白它如何帮助准确。如果我有在AIX,Linux(所有)和32位Windows上运行的测试A,在Windows 64,Linux 64和Solaris上运行的测试B,并测试运行于除HPUX之外的所有设备上的C,并测试运行于所有设备上的D ......这有什么可能的命名约定? – abyx 2009-07-29 12:40:43

2

一对夫妇的情况下,我用这个非常简单的方法在测试模块:

import sys 
import unittest 

if 'win' in sys.platform: 
    class TestIt(unittest.TestCase): 
     ... 

if 'linux' in sys.platform: 
    class TestIt(unittest.TestCase): 
     ...