Python nosetests跳过某些测试

kol*_*leS 13 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

...
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

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

可能会有这些测试的音调,我想在可能的情况下保存每一秒.

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

vin*_*tti 12

通过指定属性http://nose.readthedocs.org/en/latest/plugins/attrib.html,可以按照以下方式进行表单测试

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

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

test_big_download.slow = 1
Run Code Online (Sandbox Code Playgroud)

一旦分配了属性slow = 1,就可以通过运行排除该测试和所有其他具有慢属性的测试

$ nosetests -a '!slow'
Run Code Online (Sandbox Code Playgroud)


Kas*_*qui 5

实际上,您也可以将skiptest 用于类。

import unittest

@unittest.skip("Class disabled")
class TestLogin(TestFlow):
    ...
Run Code Online (Sandbox Code Playgroud)


Jon*_*sco 2

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

\n\n
\n

编写测试

\n\n

与 py.test 一样,nose 测试不必是 unittest.TestCase 的子类。默认情况下,与配置的 testMatch 正则表达式 ((?:^|[\\b_\\.-])[Tt]est) 匹配的任何函数或类 \xe2\x80\x93\n 即具有 test 或在字边界处或在 - 或 _)\n 之后进行测试,并且位于也匹配该表达式的模块中,将作为测试运行\n。为了与旧的unittest测试用例兼容,nose也会像unittest一样从unittest.TestCase子类加载测试。与 py.test 一样,nose 按照功能测试在模块文件中出现的顺序运行功能测试。TestCase 派生的测试和其他测试类按字母顺序运行。

\n
\n\n

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

\n\n

话虽这么说,我不建议您为测试链接继承的建议。这是造成挫败感和混乱的根源。

\n\n

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

\n\n

如果你看一下更流行的软件包的测试,他们几乎都使用这种方法。

\n