TDD不是天生就会的技术,和武术一样是一种技能。而且就像在功夫电影中一样,你需要一个脾气不好、不可理喻的师傅来强制你学习。我们的师傅是测试山羊。 1.1 遵从测试山羊的教诲,没有测试什么也别做 在Python测试社区中,测试山羊是TDD的非官方吉祥物。测试山羊对不同的人有不同的意义。对我来说,它是我脑海中的一个声音,告诉我要一直走在测试这条正确的道路上,就像卡通片中在肩膀上浮现的天使或魔鬼一样,只是没那么咄咄逼人。我希望借由这本书,让测试山羊也扎根于你的脑海中。 虽然还不太确定要做什么,但我们已经决定要开发一个网站。Web开发的第一步通常是安装和配置Web框架。下载这个,安装那个,配置那个,运行这个脚本……但是,使用TDD时要转换思维方式。做测试驱动开发时,你的心里要一直记着测试山羊,像山羊一样专注,咩咩地叫着:“先测试,先测试!” 在TDD的过程中,第一步始终一样:编写测试。 首先要编写测试,然后运行,看是否和预期一样失败,只有失败了才能继续下一步——编写应用程序。请模仿山羊的声调复述这个过程。我就是这么做的。 山羊的另一个特点是一次只迈一步。因此,不管山壁多么陡峭,它们都不会跌落。看看图1-1里的这只山羊! 图1-1:山羊比你想象的要机敏(来源:Flickr用户Caitlin Stewart,http://www.flickr.com/photos/caitlinstewart/2846642630/) 我们会碎步向前。使用流行的Python Web框架Django开发这个应用。 首先,要检查是否安装了Django,并且能够正常运行。检查的方法是,在本地电脑中能否启动Django的开发服务器,并在浏览器中查看能否打开网页。使用浏览器自动化工具Selenium完成这个任务。 在你想保存项目代码的地方新建一个Python文件,命名为functional_tests.py,并输入以下代码。如果你喜欢一边输入代码一边像山羊那样轻声念叨,或许会有所帮助: from selenium import webdriverbrowser = webdriver.Firefox()browser.get('http://localhost:8000')assert 'Django' in browser.title 这是我们编写的第一个功能测试(Functional Test,FT)。后面我会深入说明什么是功能测试,以及它和单元测试的区别。现在,只要能理解这段代码做了什么就行: • 启动一个Selenium webdriver,打开一个真正的Firefox浏览器窗口; • 在这个浏览器中打开我们期望本地电脑伺服的网页; • 检查(做一个测试断言)这个网页的标题中是否包含单词“Django”。 我们尝试运行一下: $ python3 functional_tests.pyTraceback (most recent call last): File "functional_tests.py", line 6, in <module> assert 'Django' in browser.titleAssertionError 你应该会看到弹出了一个浏览器窗口,尝试打开localhost:8000,然后会看到上述Python错误消息。接着,会看到Firefox窗口停留在桌面上,等待你关闭。这可能会让你生气,我们稍后会修正这个问题。 如果看到关于导入Selenium的错误,或许你应该往前翻,看一下“准备工作和应具备的知识”。 现在,得到了一个失败测试。这意味着,我们可以开始开发应用了。
Python Web开发:测试驱动方法——1.1 遵从测试山羊的教诲,没有测试什么也别做
书名: Python Web开发:测试驱动方法
作者: Harry J·W·Percival
出版社: 人民邮电出版社
原作名: Test-Driven Development with Python
副标题: 测试驱动方法
译者: 安道
出版年: 2015-10
页数: 444
定价: 99
装帧: 平装
ISBN: 9787115403278