《Python测试驱动开发》试读:准备工作和应具备的知识

我假设读者具备了如下的知识,电脑中还应该安装一些软件。 了解Python 3,会编程 写这本书时,我考虑到了初学者。但如果你刚接触编程,我假设你已经学习了Python 基础知识。如果还没学,请阅读一份Python 初学者教程,或者买一本入门书,比如Dive Into Python 或《“笨办法”学Python》,或者出于兴趣,看一下《Python 游戏编程快速上手》。这三本都是很好的入门书。 如果你是经验丰富的程序员,但刚接触Python,阅读本书应该没问题。Python 简单易懂。 本书中我用的是Python 3。我在2013—2014 年写这本书时,Python 3 已经发布好几年了, 全世界的开发者正处在一个拐点上,他们更倾向于选择使用Python 3。可以参照本书内容在Mac、Windows 和Linux 中实践。在各种操作系统中安装Python 的详细说明后文会介绍。 本书内容在Python 3.6 中测试过。如果你使用的是较低的版本,可能会发现细微的差别(比如f 字符串句法),所以如果可以,最好升级Python。 我不建议使用Python 2,因为它和Python 3 之间的区别太大。如果碰巧你的下一个项目使用的是Python 2,仍然可以运用从本书中学到的知识。不过,当你得到的程序输出和本书不一样时,要花时间判断是因为用了Python 2,还是因为你确实犯了错——这么做太浪费时间了。 如果你想使用PythonAnywhere(这是我就职的PaaS 创业公司),不愿在本地安装Python, 可以先快速阅读一遍附录A。 无论如何,我希望你能使用Python,知道如何从命令行启动Python,也知道如何编辑和运行Python 文件。再次提醒,如果你有任何疑问,看一下我前面推荐的三本书。 如果你已经安装了Python 2,担心再安装Python 3 会破坏之前的版本,那大可以放心,Python 3 和Python 2 可以相安无事地共存于同一个系统中,使用虚拟环境的话(本书就是)更是如此。 HTML的工作方式 我还假定你基本了解Web 的工作方式,知道什么是HTML、什么是POST 请求等。如果你对这些概念不熟悉,那么需要找一份HTML 基础教程看一下,webplateform 网站上列出了一些。如果你知道如何在电脑中创建HTML 页面,并在浏览器中查看,也知道表单以及它的工作方式,那么或许你就符合我的要求。 Django 本书使用Django 框架,这(或许)是Python 世界最为人认可的Web 框架。本书不要求读者事先了解Django,但如果你刚接触Python、刚接触Web 开发,也刚接触测试,偶尔会觉得话题太多,有太多的概念要理解。如果发生了这样的情况,我建议你先把本书放下, 找份Django 教程看看。DjangoGirls 是我所知的对新手最友好的教程。官方教程(https:// docs.djangoproject.com/en/1.11/intro/tutorial01/)对有经验的程序员来说是不错的选择。 Django 的安装说明参见后文。 JavaScript 本书后半部分有少量JavaScript。如果你不了解JavaScript,先别担心。如果你觉得有些看不懂,我到时会推荐一些参考资料给你。 关于IDE 如果你来自Java 或.NET 领域,可能非常想使用IDE(集成开发环境)编写Python 代码。IDE 中有各种实用的工具,例如VCS 集成。Python 领域也有一些很棒的IDE。刚开始我也用过一个IDE,它对我最初的几个项目很有用。我能建议(只是建议)你别用IDE 吗?至少在阅读本书时别用。在Python 领域,IDE 不是那么重要。写作本书时,我假定你只使用一个简单的文本编辑器和命令行。某些时候,它们是你所能使用的全部工具(例如在服务器中),所以刚开始时值得花时间学习使用基本的工具,理解它们是如何工作的。即便当你读完本书后决定继续使用IDE 和其中的实用工具,这些基本的工具还是唾手可得。 需要安装的软件 除了Python 之外,还要安装以下软件。 Firefox Web 浏览器 Selenium 其实能驱动任意一款主流浏览器,不过以Firefox 举例最简单,因为它跨平台。而且使用Firefox 还有另外一个好处——和公司利益没有多少关联。 Git 版本控制系统 Git 可在任何一个平台上使用。Windows 安装环境带有Bash 命令行,这是本书所需的。 装有Python 3、Django 1.11 和Selenium 3 的虚拟环境 Python 3.4+ 现在自带virtualenv 和pip(早期版本没有,这是一大进步)。搭建虚拟环境的详细说明参见后文。 Geckodriver 这是通过Selenium 远程控制Firefox 的驱动。在“安装Firefox 和Geckodriver”一节会给出下载链接。 针对Windows 的说明 Windows 用户有时会觉得被开源世界忽略了,因为macOS 和Linux 太普遍了,很容易让人忘记在Unix 之外还有一个世界。使用反斜线作为目录分隔符?盘符?这些是什么?不过,阅读本书时仍然可以在Windows 中实践。下面是一些小提示。 1. 在Windows 中安装Git 时,一定要选择“Run Git and included Unix tools from the Windows command prompt”(在Windows 命令提示符中运行Git 和所含的Unix 工具)。选择这个选项之后就能使用Git Bash 了。把Git Bash 作为主要命令提示符, 你就能使用所有实用的GNU 命令行工具,例如ls、touch 和grep,而且目录分隔符也使用斜线表示。 2. 在Git 安装程序中,还要勾选“Use Windows’default console”(使用Windows 的默认控制台),否则Python 在Git Bash 窗口中无法正常使用。 3. 安装Python 3 时,除非已经安装了Python 2 且想继续将它用作默认版本,否则一定要选中“Add Python 3.6 to PATH”(把Python 3.6 添加到系统路径中,如图P-1 所示),这样才能在命令行中顺利运行Python。 测试所有软件是否正确安装的方法是,打开Git Bash 命令提示符,在任意一个文件夹中执行命令python 或pip。 图P-1:从安装程序将Python 加入系统路径 针对MacOS 的说明MacOS 比Windows 稍微正常一点儿,不过在Python 3.4 之前,安装pip 还是一项极具挑战性的任务。Python 3.4 发布后,安装方法变得简单明了。 • 使用下载的安装程序就能安装Python 3.6,省去了很多麻烦。而且,这个安装程序也会自动安装pip。 • Git 安装程序也能顺利运行。 测试这些软件是否正常安装的方法和Windows 类似:打开一个终端,然后在任意位置执行命令git、python3 或pip。如果遇到问题,搜索关键字“system path”和“command not found”,就能找到解决问题的合适资源。 或许你还应该检验一下Homebrew。在Mac 安装众多Unix 工具的方式中,它是唯一可信赖的。1 虽然现在Python 安装程序做得不错,但将来你可能会用到Homebrew。要使用Homebrew,需下载大小为1.1 GB 的Xcode。不过这有个好处——你得到了一个C 编译器。 注1: 不过我不建议使用Homebrew 安装Firefox,因为Homebrew 会把Firefox 二进制文件放到一个陌生的位置,Selenium 找不到。虽然这个问题可以解决,但是以常规的方式安装更简单。 Git默认使用的编辑器和其他基本配置 后文我会逐步介绍如何使用Git,不过现在最好做些配置。例如,首次提交时,默认情况下会弹出vi,这可能让你手足无措。鉴于vi 有两种模式,因此你有两个选择。其一,学一 些基本的vi 命令(按i 键进入插入模式,输入文本后再按<Esc> 键返回常规模式,然后输入:wq<Enter> 写入文件并退出)。学会这些命令后,你就加入了一个互助会,这里的人们知道怎么使用这个古老而让人崇敬的文本编辑器。 另外一个选择是直接拒绝这种穿越到20 世纪70 年代的荒唐行为,而是配置Git,让它使用你选择的编辑器。按<Esc> 键,再输入:q!,退出vi,然后修改Git 使用的默认编辑器。具体方法参见介绍Git 基本配置的文档。 安装Firefox和Geckodriver 从https://www.mozilla.org/firefox/ 可下载Windows 和macOS 的Firefox 安装包。Linux 可能已经预装了Firefox;如果没有,使用包管理器安装。 Geckodriver 可从https://github.com/mozilla/geckodriver/releases 下载。下载后解压,放到系统路径中的某个位置。 对macOS 或Linux 来说,可以放在~/.local/bin 目录中。 对Windows 来说,可以放在Python 的Scripts 文件夹中。 为了确认是否成功安装,打开一个Bash 控制台,执行下述命令: geckodriver --version geckodriver 0.17.0 The source code of this program is available at https://github.com/mozilla/geckodriver. This program is subject to the terms of the Mozilla Public License 2.0. You can obtain a copy of the license at https://mozilla.org/MPL/2.0/. 如果无法执行这个命令,可能是因为~/.local/bin 不在PATH 中(针对Mac 和Linux 系统)。这个文件夹最好加到PATH 中,因为使用pip install --user 安装的Python 包都存储在这里。把这个文件夹添加到.bashrc 文件中的方法如下所示2: echo 'PATH=~/.local/bin:$PATH' >> ~/.bashrc 然后关闭终端,重新打开,再次确认能否执行geckodriver --version 命令。 注2:.bashrc 是Bash 的初始化文件,在家目录中。每次运行Bash 都会运行这个文件。 搭建虚拟环境 Python 项目所需的环境使用virtualenv(virtual environment 的简称)搭建。在不同项目的虚拟环境中可以使用不同的包(例如不同版本的Django,甚至是不同版本的Python)。而且虚拟环境中的包不是全局安装的,因此无须root 权限。 Python 从3.4 版开始集成了用于搭建虚拟环境的virtualenv 工具,不过我始终建议使用virtualenvwrapper 这个辅助工具。先安装virtualenvwrapper(对Python 版本没有要求): # 在Windows中 pip install virtualenvwrapper # 在macOS/Linux中 pip install --user virtualenvwrapper # 然后让Bash自动加载virtualenvwrapper echo "source virtualenvwrapper.sh" >> ~/.bashrc source ~/.bashrc 在Windows 中,virtualenvwrapper 只能在Git Bash 中使用,而不能在常规的命令行中使用。 virtualenvwrapper 把所有虚拟环境都放在一个地方,而且为激活和停用虚拟环境提供了便利的工具。 下面创建一个名为“superlists”3 的虚拟环境, 并在里面安装Python 3: # 在macOS/Linux中 mkvirtualenv --python=python3.6 superlists # 在Windows中 mkvirtualenv --python=`py -3.6 -c"import sys; print(sys.executable)"` superlists #(为了得到一个装有Python 3.6的虚拟环境,我们绕了点弯子) 激活和停用虚拟环境 阅读本书时,一定要先“激活”你的虚拟环境。你之所以能看出我们处在虚拟环境中,通常是因为提示符中有(superlists),例如: $ (superlists) $ 创建虚拟环境之后,就直接激活了虚拟环境。你可以执行which python 命令再次确认: (superlists) $ which python /home/harry/.virtualenvs/superlists/bin/python #(在Windows中会显示为下面这样 # /C/Users/IEUser/.virtualenvs/superlists/Scripts/python) (superlists) $ deactivate $ which python /usr/bin/python $ python --version Python 2.7.12 # 在我的设备中,虚拟环境外部的“python”默认为Python 2 $ workon superlists (superlists) $ which python /home/harry/.virtualenvs/superlists/bin/python (superlists) $ python --version Python 3.6.0 注3: 你可能会问为什么叫“superlists”?我可不想剧透!下一章你就知道了。 激活虚拟环境的命令是workon superlists。若想确认有没有激活,可以看命令提示符中有没有(superlists) $,或者执行which python 命令。 安装Django和Selenium 我们将安装Django 1.11 和最新版Selenium,即Selenium 3: (superlists) $ pip install "django<1.12" "selenium<4" Collecting django==1.11.3 Using cached Django-1.11.3-py2.py3-none-any.whl Collecting selenium<4 Using cached selenium-3.4.3-py2.py3-none-any.whl Installing collected packages: django, selenium Successfully installed django-1.11.3 selenium-3.4.3 无法激活虚拟环境时可能会看到的一些错误消息 对刚接触虚拟环境的人来说,肯定会经常忘记激活虚拟环境(说实话,老手也经常犯这个错,比如我)。这时,你会看到一个错误消息,其中的重要部分如下所示: ImportError: No module named selenium 或者是: ImportError: No module named django.core.management 如果遇到这种错误,不要慌,先看看命令提示符中有没有(superlists)。通常只需执行workon superlists 就能解决问题。 除此之外,可能还会遇到这个错误: bash: workon: command not found 这表明你前面少做了一步,没有把virtualenvwrapper 添加到.bashrc 中。从前文中找到echo source virtualenvwrapper.sh 命令,再执行一遍。 'workon' is not recognized as an internal or external command, operable program or batch file. 这表明你打开的是Windows 的默认命令提示符cmd,而不是Git Bash。关掉cmd,打开Git Bash。 编程快乐! 上述说明对你没什么用,或者你有更好的说明?请给我发电子邮件吧,地址是obeythetestinggoat@gmail.com。 配套视频 我为本书录制了一套十集的配套视频(http://oreil.ly/1svTFqB)1,主要针对第一部分的内容。如果你更适合通过视频学习,建议你看看。除了书中的内容之外,这套视频还能让你直观地感受TDD流程,了解如何在测试和代码之间切换,与此同时保持思路清晰。 我还特意穿了一件亮黄色T恤。 注1:这套视频没有针对第2版更新,不过内容基本上依然适用。 致谢 要感谢的人很多,没有他们就不会有这本书,就算有也会写得比现在差。 首先感谢某出版社的Greg,他是第一个鼓励我、让我相信我能写完这本书的人。虽然你们公司在版权问题上思想过于退化,但我还是要感激你个人对我的信任。 感谢Michael Foord,他以前也是Resolver Systems的员工。我写书的最初灵感便来自于他,因为他自己也写了一本书。感谢他一直支持这个项目。感谢我的老板Giles Thomas,他傻傻地允许他的另一位员工也去写书(不过,我觉得他现在已经修改了标准的雇佣合同,加上了“禁止写书”的条款)。同样也感谢你不断增长的智慧,把我带入了测试领域。 感谢我的另外两位同事,Glenn Jones和Hansel Dunlop。你们总是给我提供非常宝贵的意见, 而且在过去一年中耐心地陪我录制单轨对话。 感谢我的妻子Clementine和家人,没有他们的支持和耐心,我绝对无法写完这本书。很多时间本该和家人在一起难忘地度过,我却把它们都花在了写作上,为此我感到抱歉。开始写作时,我不知道这本书会对我的生活产生什么影响(“在闲暇时间写怎么样?听起来可行……”)。没有你们的支持,我写不完这本书。 感谢技术审校人员Jonathan Hartley、Nicholas Tollervey和Emily Bache。感谢你们的鼓励和珍贵的反馈。尤其是Emily,她认真阅读了每一章。感谢Nick和Jon,由衷感谢。感谢你们在我身旁,让写作的过程变得不那么孤单。没有你们,这本书的内容会像傻瓜一样废话连篇。 感谢每个放弃自己的时间把意见反馈给我的人,感谢你们的热心肠:Gary Bernhardt、Mark Lavin、Matt O’Donnell、Michael Foord、Hynek Schlawack、Russell Keith-Magee、Andrew Godwin和Kenneth Reitz。你们比我聪慧得多,让我避免说一些愚蠢的事情。当然,书中还有很多愚蠢的内容,不过责任肯定不在你们。 感谢我的编辑Meghan Blanchette,她是一位非常友善可爱的监工。谢谢你为我规划时间,制止我愚蠢的想法,让本书的写作在正确的轨道上行进。感谢O’Reilly出版社其他所有为我提供帮助的人,包括Sarah Schneider、Kara Ebrahim和Dan Fauxsmith,感谢你们让我继续使用英式英语。感谢Charles Roumeliotis在行文风格和语法上给我的帮助。虽然我们对 芝加哥学派引用和标点符号规则的优势有不同观点,但有你在身边我仍然高兴。感谢设计部门为封面绘制了一头山羊。 特别感谢预览版的读者,感谢你们挑出拼写错误,给我反馈和建议,感谢你们提出各种有助于使本书学习曲线变平滑的方法,感谢你们中的大多数人给我鼓励和支持,让我一直写下去。感谢Jason Wirth、Dave Pawson、Jeff Orr、Kevin De Baere、crainbf、dsisson、Galeran、Michael Allan、James O’Donnell、Marek Turnovec、Sooner Bourne、julz、Cody Farmer、William Vincent、Trey Hunner、David Souther、Tom Perkin、Sorcha Bowler、Jon Poler、Charles Quast、Siddhartha Naithani、Steve Young、Roger Camargo、Wesley Hansen、Johansen Christian Vermeer、Ian Laurain、Sean Robertson、Hari Jayaram、Bayard Randel、Konrad Korzel、Matthew Waller、Julian Harley、Barry McClendon、Simon Jakobi、Angelo Cordon、Jyrki Kajala、Manish Jain、Mahadevan Sreenivasan、Konrad Korzel、Deric Crago、Cosmo Smith、Markus Kemmerling、Andrea Costantini、Daniel Patrick、Ryan Allen、Jason Selby、Greg Vaughan、Jonathan Sundqvist、Richard Bailey、Diane Soini、Dale Stewart、Mark Keaton、Johan Wärlander、Simon Scarfe、Eric Grannan、Marc-Anthony Taylor、Maria McKinley、John McKenna、Rafał Szymański、Roel van der Goot、Ignacio Reguero、TJ Tolton、Jonathan Means、Theodor Nolte、Jungsoo Moon、Craig Cook、Gabriel Ewilazarus、Vincenzo Pandolfo、David “farbish2”、Nico Coetzee、Daniel Gonzalez、Jared Contrascere、赵亮等很多人。如果我遗漏了你的名字,你绝对有权感到委屈。我当然非常感激你,请给我写封信,我会尽我所能把你的名字加上。 最后,我要感谢你,现在的读者,感谢你决定阅读这本书,希望你喜欢。 第2版附加致谢 感谢第2 版的编辑Nan Barber,感谢Susan Conant、Kristen Brown 和O’Reilly 整个团队。再次感谢Emily 和Jonathan,感谢你们的技术审阅,还要感谢Edward Wong 细致的笔记。倘若书中还有错误和不足,责任都在我。 感谢免费版的读者们,感谢你们提出的意见和建议,有些读者甚至发起了拉取请求。感谢 Emre Gonulates、Jésus Gómez、Jordon Birk、James Evans、Iain Houston、Jason DeWitt、Ronnie Raney、Spencer Ogden、Suresh Nimbalkar、Darius、Caco、LeBodro、Jeff、wasabigeek、joegnis、Lars、Mustafa、Jared、Craig、Sorcha、TJ、Ignacio、Roel、Justyna、Nathan、Andrea、Alexandr、bilyanhadzhi、mosegontar、sfarzy、henziger、hunterji、das-g、juanriaza、GeoWill、Windsooon、gonulate,等等。我肯定遗漏了一些名字,为此我深感抱歉。

>Python测试驱动开发

Python测试驱动开发
作者: [英] 哈利 • J.W. 帕西瓦尔
副标题: 使用Django、Selenium和JavaScript进行Web编程(第2版)
原作名: Test-Driven Development with Python: Obey the Testing Goat: Using Django, Selenium, and JavaScript 2nd Edition
isbn: 7115485577
书名: Python测试驱动开发
页数: 488
译者: 安道
定价: 119.00元
出版社: 人民邮电出版社
出版年: 2018-7
装帧: 平装