5

我们有一个 python 项目,我们想开始使用 buildbot 进行测试。它的单元测试包括应该只在某些平台上工作的测试。所以,我们有应该在所有平台上通过的测试,应该只在 1 个特定平台上运行的测试,应该在 A、B、C 平台上通过的测试以及在 B 和 D 上通过的测试。

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

4

3 回答 3

2

有几次我在测试模块中使用了这种非常简单的方法:

import sys
import unittest

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

if 'linux' in sys.platform:
    class TestIt(unittest.TestCase):
        ...
于 2009-07-29T12:01:48.627 回答
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"名称。

“我们不能有一个肯定的操作系统列表。如果我们添加一个新的操作系统怎么办?我们是否必须重命名每个测试以明确包含它?” 是的。新的操作系统市场发展缓慢,管理起来并不痛苦。

另一种方法是在每个类(即类级函数)或装饰器中包含信息,并使用定制的类加载器来评估类级函数。

于 2009-07-29T11:44:31.803 回答
0

我们决定使用装饰器,使用平台模块和其他模块,检查是否应该执行测试,如果不是简单地让它通过(不过,我们看到 python2.7 的主干中已经有一个 SkipTest 异常,可以在这种情况下被提出,忽略测试)。

于 2009-09-03T06:50:32.233 回答