13

我正在为用 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 的鼻子测试来运行测试。

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

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

这些测试可能会有音调,我想尽可能地节省每一秒。

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

4

3 回答 3

12

通过指定属性http://nose.readthedocs.org/en/latest/plugins/attrib.html可以完成如下形式的鼻子测试

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

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

test_big_download.slow = 1

分配属性 slow = 1 后,您可以通过运行排除该测试和所有其他具有 slow 属性的测试

$ nosetests -a '!slow'
于 2012-10-01T10:14:25.373 回答
5

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

import unittest

@unittest.skip("Class disabled")
class TestLogin(TestFlow):
    ...
于 2015-10-19T06:50:26.830 回答
2

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

编写测试

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

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

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

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

如果您查看更流行的软件包的测试,它们几乎都使用这种方法。

于 2012-08-17T14:29:47.450 回答