Python nosetests跳过某些测试

时间:2012-08-17 13:04:11

标签: python pylons nosetests

我正在研究用python编写的Web应用程序。

假设我的test_login.py模块中有5个测试。

每一项测试都是一个类。

通常有一个基础测试扩展TestFlow类,这是我们预定义的测试类。

然后,本模块中的其他测试扩展了基础测试。

例如:

#The base test 

TestLogin(TestFlow):
    #do login_test_stuff_here

#Another test in the same module

TestAccountDetails(TestLogin)
    #do account_details_test_stuff_here

...

它实际上非常方便,因为为了测试例如AccountDetails用户必须登录,所以我可以继承TestLogin测试,我准备测试其他功能作为登录用户。

所有测试都在Project / project / tests文件夹中。

我们使用带有选项--with-pylons的nosetests来运行测试。

我的问题是,是否有办法将某些TestClass标记为“不要测试这个”。

因为我不想浪费时间直接执行这些“基础测试”,因为它们将由其他来自它们的测试执行。

可能会有这些测试的音调,我希望尽可能保存每一秒。

我已经找到了类似Skip,SkipTest或@nottest的东西,但这些只适用于ceratin TestClass中的 test_methods ,所以我认为它不会在这里工作,如果我有一个每个测试用例的单个类。

3 个答案:

答案 0 :(得分:12)

表单nosetests可以通过指定属性来完成 http://nose.readthedocs.org/en/latest/plugins/attrib.html

  

通常在测试时,您需要根据条件选择测试,而不是简单地按文件名选择。例如,您可能希望运行除慢速测试之外的所有测试。您可以通过在测试方法上设置属性来使用属性选择器插件执行此操作。这是一个例子:

def test_big_download():
    import urllib
    # commence slowness...

test_big_download.slow = 1
     

一旦您指定了属性slow = 1,您就可以通过运行

排除该测试和所有其他具有慢属性的测试
$ nosetests -a '!slow'

答案 1 :(得分:4)

您实际上也可以使用skiptest进行类。

import unittest

@unittest.skip("Class disabled")
class TestLogin(TestFlow):
    ...

答案 2 :(得分:2)

http://nose.readthedocs.org/en/latest/writing_tests.html

  

编写测试

     

与py.test一样,鼻子测试不必是子类   unittest.TestCase生成。与配置匹配的任何函数或类   testMatch正则表达式((?:^ | [\ b _ \ .-])[Tt] est)默认情况下 -   也就是说,在单词边界或在 - 或_之后进行测试或测试   并且生活在与该表达式匹配的模块中将运行为   一个测试。为了与传统的unittest测试用例兼容,   nose也会加载来自unittest.TestCase子类的测试   unittest呢。像py.test一样,nose按顺序运行功能测试   它们出现在模块文件中。 TestCase派生的测试和   其他测试类按字母顺序运行。

注意上面的正则表达式和规则。将您的函数/方法/类命名为与正则表达式不匹配,它们将不会运行。

话虽如此,我不建议您为测试链接继承的建议。这是挫折和混乱的秘诀。

你可能会更好地制作一个mixin类,或者定义一个没有任何实际测试的基类 - 但是有很多辅助函数,继承类可以调用它们并作为它们自己使用。

如果你看看更受欢迎的软件包的测试,他们几乎都使用这种方法。