技术开发 频道

Python 测试框架: 选择和运行测试

  衍生测试(Generative tests)

  正如在第一篇文章中看到的,py.test 和 nose 都支持编写为简单函数的测试,这会大大简化 Python 测试的编写:

 

# test_new.py - simple tests functions

def testTrue(self):
    assert
True == 1

def testFalse(self):
assert
False == 0

 

  如果只需要在某一特定环境中检查组件行为,那么测试函数和更传统的测试类都可以满足需要。但是,如果要执行一系列测试,它们基本相同,只有一些参数有差异,那么怎么办?

  为了更容易实现这种测试,避免多次复制并粘贴测试函数以及设置惟一的名称,py.test 和 nose 都支持衍生测试(generative test)。这里的思想是,您提供一个测试函数,它实际上是一个迭代器,然后使用它的 yield 语句并提供调用参数,从而返回一系列函数。例如,如果希望针对一系列 Web 浏览器运行一个测试,可以编写下面这样的代码:

 

# test_browser.py

def check(browser, page):
    t
= TestBrowser(browser)
    t.load_page(page)
    t.check_status(
200)

def test_browsers():
    
for b in 'ie6', 'ie7', 'firefox', 'safari':
        for p in 'index.html', 'about.html':
        yield check, b, p

  对于衍生测试,py.test 更方便。因此您能够更加轻松的分辨出正在运行的测试,并在一个或多个测试失败时理解测试报告,在每个元组中提供的第一项可以是一个名称,它会作为测试名称的组成部分输出:

 

# Alternate yield statement, for py.test
...
yield
'Page %s browser %s' % (b,p), check, b, p

 

  当前,许多项目使用手工测试或者只能使用 unittest 支持的功能,这些技术非常笨拙。衍生测试提供了好得多的参数化测试解决方案。

0
相关文章