九、测试和部署您的移动 Web 应用
信不信由你,测试和部署你的移动 web 应用是开发周期中最重要的,但却被忽视的方面之一。
最基本的测试和部署方法是使用 FTP(文件传输协议)客户端将您的移动 web 应用上传到面向公众的 web 服务器。通常情况下,你可以在手机的网络浏览器中测试上传的应用,通过“玩”来确保一切正常。如果有任何问题,那么您在本地机器上进行修改,测试它,然后重新加载更改后的文件。
这适用于小型应用和非常小的团队;然而,随着您的应用和开发团队的成长,彻底测试功能的每个方面,并跟踪代码更改,变得非常耗时。
自然的“快速修复”进展是开始使用文件共享软件或服务,如 AFP(苹果文件共享协议)、Samba 或 Dropbox 来管理组代码,并在开发团队之间共享项目。这最终会变得很麻烦,熟悉这种技术的人都很清楚——文件冲突并不罕见,解决它们极其困难和费力。也没有代码所有权或责备方法。如果开发人员破坏了一部分功能,没有人可以指责,代码需要更长的时间来修复或回滚。
持续集成原则有助于解决这个问题。持续集成包括 SCM(源代码控制管理)来管理团队中的代码、自动化测试、环境测试和自动化部署。这些原则中的一些可能看起来有些陌生,但将在本章中得到全面阐述。没有一个项目或开发团队太大或太小而不能利用持续集成。
本章首先解释这些持续集成元素是什么。然后,您将得到一个实践练习,展示如何创建单元测试,如何使用 SCM 系统 Git,以及如何使用 Capistrano 将您的应用部署到生产服务器上。
源代码管理
源代码控制管理是持续集成的核心。到目前为止,有几种 SCM 实现,包括以下几种:
- 饭桶
- SVN(阿帕奇颠覆)
- 水银的
SCM 提供了一种存储源文件版本的方法。SCM 通过在初始提交/保存时存储原始文件来做到这一点。然后,SCM 在每次后续提交时只存储每个文件之间的变化/差异。这样可以节省磁盘空间和带宽,因为除非文件是新的,否则每次提交时不会保存整个文件。
当您使用 SCM 存储项目时,它们仍然可以从您的计算机上访问,就像任何其他文件一样。不同之处在于,对于基于 SCM 的项目,您可以提交任何文件更改(包括图像、视频等)。)以便在需要时可以对它们进行版本控制和恢复或比较。
要使用 SCM 提交变更,您需要一个 SCM 客户端,比如 Git 或 SVN。配置管理系统通常也会存储额外的文件作为你项目的一部分。在使用过 Git 和 SVN 之后,Git 是我首选的 SCM,因为它在根目录中只存储了一个可以轻松删除的文件夹;相比之下,SVN 会在你的项目的每个文件夹中存储.svn
文件夹,这可能会被证明是一个痛苦的删除。
目前有两种类型的供应链管理:集中式和分布式。集中式系统将所有代码存储在中央服务器上。当开发人员提交时,更改在服务器上合并,而不是在开发机器上。
SVN 是一个集中的供应链管理系统。分布式系统没有中央服务器。提交可以在任何开发人员的机器上进行。如果一个开发人员想要共享他或她的代码,另一个开发人员可以将存储库克隆到他们的机器上,这将包含来自原始存储库的每一个变更。
Git 是一个分布式供应链管理系统。通常情况下,Git 存储库会有一个主要的远程存储库,所有的开发人员都可以在其中进行修改。Git 等系统的优势在于,您可以在没有网络连接的情况下处理项目,但仍然可以在处理项目时将更改提交到您的本地存储库。一旦您有了网络访问权,您就可以提取并合并任何变更,测试它们,然后将您合并的变更推送到远程存储库。如果您有一个中央构建系统,这尤其有用。
SCM 还为您提供了在每次提交时存储注释的能力,这样当您浏览项目提交历史时,您可以看到谁提交了对哪些文件的更改以及每次提交背后的原因。像 Git 这样的配置管理系统默认需要提交注释,而 SVN 不需要。Git 在开发社区中非常受欢迎,这也是它成为本章重点的原因。
分支和标记
大多数 SCM 系统遵循分支和标记的方法。Git 中的 master 分支是主要的代码库;这通常是生产就绪的,包含项目代码的最新版本。当需要添加新特性时,通常会从主分支创建一个分支。这些通常都有代号;一些开发团队使用流行卡通节目中的名字,如 Peter、Meg 或 Stewie,而另一些使用行星名,如 Saturn、Jupiter 或 Mars。您可以使用任何您喜欢的命名约定,只要每个分支都有一个唯一的名称。重要的是创建分支时所做的注释。必须明确分支是干什么的,应该包含什么内容。
分支只是主分支的副本或快照,因此任何新特性都不会干扰生产就绪代码。通常,主分支会定期与新分支合并。这是为了确保对主代码库的任何更改都与分支中的功能更改兼容。在新分支中的特性被实现和测试之后,它将与主分支合并,为生产做好准备。
标签只是您希望保留以供将来参考的项目主分支的重要快照。这些通常是项目的重要版本。如果其他开发人员经常在主分支上工作,而您想要进行工作部署,这可能会很有用。
测试
对于新的 web 开发人员来说,测试您的移动 web 应用是开发周期中最容易被忽视的方面之一。大多数新的移动网站开发者将简单地把他们的网站加载到移动设备上,然后玩玩看它是否能工作。随着您添加更多功能,这可能会很费力,而且您真的不知道代码内部发生了什么。随着您开始编写更多面向对象的代码,您开始看到应用的复杂性在增长(以一种有组织的方式)。您可以基于您输入的内容和您期望得到的内容来测试每个代码单元。
例如,在前面的章节中,您提到了在应用中创建模型来存储数据。表示的完整性和应用背后的逻辑实际上依赖于这些模型如何通过 getters、setters 和其他基于模型的方法接受和输出数据。你可以写一套测试,基于每一个代码单元,包括你输入的内容和你期望得到的回报。这种测试方法被称为单元测试。单元测试允许您测试应用中的每个方法。您为项目的每个方面编写的单元测试越多,您就应该对应用的工作越有信心。这就是所谓的代码覆盖率。请记住,单元测试将只覆盖一定比例的代码,您的目标应该是至少 80%的代码覆盖率。
通过创建单元测试,您可以一次运行一系列针对每个目标 web 浏览器的测试。这应该给你信心,你的代码工作正常。这在发布新的浏览器或浏览器版本时尤其有用,因为您可以通过在新浏览器中运行单元测试来确保您的 JavaScript 代码与新浏览器兼容。
部署您的应用
您的应用可以通过多种方式部署。最常见的方法是通过 FTP(文件传输协议)或 SFTP(安全文件传输协议)进行部署。通常情况下,您会有一个存放生产代码的生产服务器,一个测试最新集成代码的开发服务器,以及一个本地开发服务器。您可能还想创建其他环境,例如预生产服务器,它将模拟生产服务器的确切配置,并且您可能想创建一个临时服务器,在将最终代码投入生产之前,客户端或测试人员将在其中测试您的最终代码。
管理所有这些环境及其代码库可能会有问题,并且每次提交到几个环境时手动部署代码更改可能会变得费力,并且容易出现人为错误。您可能还必须为每个环境执行任务,比如 CSS 预编译、JavaScript 和 CSS 缩小和连接,等等。
您可以将大部分工作交给部署应用,比如 Capistrano。Capistrano 将允许您为每个环境编写部署脚本,并使用一个命令将您的应用部署到任何环境。Capistrano 还允许您将任何更改回滚到以前的工作版本,对于每个部署,Capistrano 将存储每个版本的副本,以便您可以随时回滚。
持续集成服务器
将所有这些应用和实践结合在一起的粘合剂是一个良好的持续集成环境。持续集成环境将检测应用代码中的变化,并自动构建和部署它,以及执行其他任务。这意味着您可以专注于开发世界级的 web 应用,而将重复的部署和测试任务留给持续集成服务器。
本书选择的持续集成服务器是 Atlassian 的 Bamboo。选择这个产品是因为它易于安装,有许多插件,易于设置,并且与 Atlassian 的其他流行软件开发工具兼容,如 JIRA、Crucible 和 FishEye。
您的第一个持续集成项目
第一次创建一个持续的集成项目可能是相当费力的。您将首先在 Aptana Studio 3 中创建一个新项目。为此,打开 Aptana Studio,进入文件 新建 Web 项目。将项目命名为ci
。
在项目中创建一个名为js
的新文件夹。在这个文件夹中,创建两个名为app
和tests
的文件夹。在app
文件夹中,通过转到文件 新建 文件创建一个名为calculator.js
的新的空 JavaScript 文件。你不会添加任何东西。TDD(测试驱动开发)声明您必须首先编写您的单元测试,以便它们在您编写代码之前失败。这意味着您所有的预期结果都是在测试中编写的,所以当您编写代码时,您的代码能够满足它们。这是一个很好的练习。当您在单元测试中编写逻辑规则时,如何实现最终代码并不重要,只要输出满足单元测试即可。
这种工作方法确实有助于你写出更简洁的代码,因为你的代码现在只会满足预期的输出。
编写你的第一个单元测试
您可以选择编写自己的单元测试框架,或者使用现成的框架。这本书的选择是 QUnit。它由 jQuery 社区开发,并定期更新。不仅如此,它还可以从浏览器中运行,或者可以使用一个名为 PhantomJS 的程序从命令行运行。
要为计算器设置一个 QUnit 单元测试,首先在包含以下 HTML 的tests
文件夹中创建一个名为calculator.html
的新文件。
`<!DOCTYPE html>
calculator unit tests
calculator unit tests
l`
这段代码代表了在 QUnit 中运行一个基本的空单元测试所需的 HTML。如您所见,它不包含任何特定于移动设备的标记。
在body
标签中,您可以看到有几个带有 id 的 HTML 元素。这些在表 9-1 中描述。
您需要在移动网络浏览器中运行测试。为此,必须首先配置 Aptana,使其内部服务器绑定到计算机的 IP 地址,而不是其本地 IP 地址 127.0.0.1。为此,请转到 Aptana Studio 3 首选项Aptana StudioWeb 服务器 内置。您将看到一个屏幕和下拉菜单,允许您选择内部 web 服务器的 IP 地址应该绑定到什么,如图图 9-1 所示。
图 9-1。 内置服务器偏好
选择一个与你的电脑的 IP 地址匹配的(通常是最上面的)点击OK
,退出 Aptana Studio,并再次启动它以使更改生效。
Aptana 完成启动后,您可以在 web 浏览器中运行应用,方法是在 Aptana Studio 应用浏览器中右键单击calculator.html
,然后选择以 身份运行 JavaScript Web 应用。这将启动 Firefox。将 Firefox 地址栏中的 URL 输入移动设备的默认浏览器。你应该看到标题栏下面的栏是绿色的,0/0 测试已经运行,如图 9-2 所示。现在是时候开始编写一些单元测试了。
图 9-2。 在浏览器中运行 QUnit 测试
在 Aptana Studio 中打开calculator.html
,如果它还没有打开的话。单元测试只是运行几个断言,检查方法或属性的结果值是否与基于可预测输入的期望值相匹配。本章中的计算器例子很简单,因为很容易预测 1+1 应该总是等于 2。没有其他变量会影响预期结果,所以 2 应该总是预期结果。当结果不是 2 时,您就知道应用在某个地方出了问题。
在calculator.html
中,在结束的body
标签之前创建一个新的script
标签。
` ...
版权属于:月萌API www.moonapi.com,转载请注明出处