Python 测试框架: 选择和运行测试
2009-09-06 00:00:00 来源:WEB开发网尽管 nose 提供更强的定制能力,但是比较简单的测试发现过程如下:
当 nose 检查 Python 测试模块的内部时,它采用在选择测试模块时使用的正则表达式,收集与这个正则表达式匹配的函数和类。(在默认情况下,寻找包含单词 Test 或 test 的名称,但是可以通过命令行或配置文件提供不同的正则表达式)。
当 nose 检查测试类的内部时,它运行与同一正则表达式匹配的方法。
无须特别指定,nose 总会检测 unittest.TestCase 的子类并作为测试使用它们。但是,它会根据自己的正则表达式决定哪些方法是测试,而不使用标准的 unittest 模式 ^test。
衍生测试(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
更多精彩
赞助商链接