首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何分发和执行特定于平台的单元测试?

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

Stack Overflow用户
提问于 2009-07-29 11:13:10
回答 3查看 676关注 0票数 5

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

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-09-03 06:50:32

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

票数 0
EN

Stack Overflow用户

发布于 2009-07-29 12:01:49

在一些情况下,我在测试模块中使用了这种非常简单的方法:

代码语言:javascript
运行
复制
import sys
import unittest

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

if 'linux' in sys.platform:
    class TestIt(unittest.TestCase):
        ...
票数 2
EN

Stack Overflow用户

发布于 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...对此有什么可能的命名约定?

代码语言:javascript
运行
复制
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操作系统。这个列表相当短,而且增长缓慢。

“所有”测试只是一个单独的文本搜索,它与当前平台的测试列表合并,以创建一个完整的套件。

你可以尝试像这样的东西

代码语言:javascript
运行
复制
class TextC_XHPUX( unittest.TestCase ):

您的文本匹配规则通常是"_someOSName";您的例外情况是一个奇怪的文本过滤器来处理"_X"名称。

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1199493

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档