Web前端测试与集成:Jasmine/Selenium/Protractor/Jenkins的最佳实践
上QQ阅读APP看书,第一时间看更新

1.1 Web技术的发展和挑战

Web应用通常分为前端和后端,前端主要在浏览器里显示和采集信息,后端主要处理数据和业务逻辑。传统的Web应用一直偏重后端开发。当用户通过浏览器访问一个网址,这个网址可能是一个存储在服务器上的静态HTML文件,由服务器读取后直接返回。更多的情况是这个网址对应的是一个模板,服务器在用户请求时根据业务逻辑和模板动态拼接成HTML格式的字符串。Web开发人员采用各种后端动态页面技术比如CGI、PHP和ASP等生成这样的字符串。换句话说,所谓的“前端”是由后端服务器动态输出而成的HTML网页。

在这样的传统Web应用中,前端只是充当一个展示层,服务调用、网页跳转流程等都需要由后端服务器处理。每当网页功能有所变化时(即使网页内容只有细微变动),浏览器都需要重新发起一个HTTP请求到服务器,然后由后端服务器重新生成整个页面如图1-1所示。这种方式不但增加服务器的负担,降低响应速度,而且浏览器重复下载整个网页会浪费网络带宽,对于移动应用很不经济。

图1-1 传统网页生命周期

而在现代Web应用中,当网页的部分内容需要更新时,运行在浏览器内的JavaScript代码通常会向服务器发送Ajax请求,而服务器端只需输出必要的数据,不需要重新构造整个HTML页面,如图1-2所示。Web前端应用接收到来自服务器的数据后,只需重绘界面上需要变化的部分。这种方式提高了应用的响应速度,改善了用户的使用体验。同时,因为很多用户交互的处理工作可以在浏览器内完成,无需向服务器发送HTTP请求,服务器和浏览器之间交换的数据量大幅减少,所以服务器负荷降低,响应速度也更快了。Web应用渐渐开始拥有和桌面应用一样的响应速度和使用体验。

图1-2 现代单页应用(SPA)生命周期

除了网页内容的更新,Web应用一部分业务逻辑的处理也从后端服务器慢慢移到前端,Web前端开发变得越来越重要。而这一切都离不开JavaScript。

JavaScript是1995年由Netscape工程师Brendan Eich花了10天的时间创造出来的,其最初目的是为了满足用户浏览网页时产生的交互需求。可以说,JavaScript是为开发Web应用而诞生的。

自其诞生起的相当长一段时间内,这门在浏览器内执行一些简单的校验和互动的脚本语言常被称之为“玩具语言”,堪称世界上被人误解最深的编程语言Douglas Crockford. JavaScript: The World's Most Misunderstood Programming Language[OL]. [2016]. http://javascript.crockford.com/javascript.html.。在简洁的外表下,JavaScript其实有着强大的语言特性。它是一种面向对象的动态语言,包含类型、运算符、标准内置对象和方法。其语法来源于Java和C,所以这两种语言的许多语法特性同样适用于JavaScript。

随着Web应用的普及,JavaScript自身也在不断演化以适应更复杂的编程需求,目前JavaScript已经成为Web前端的实际标准,也是最热门的编程语言之一。各种JavaScript前端框架,包括Ember、AngularJS、React和Vue等不断涌现。

正因为基于JavaScript前端应用越来越重要,功能越来越复杂,对前端开发测试带来了极大的挑战。如何保证Web前端应用的正确性和可靠性成为了各大企业关注的问题。

• 在市场需求的推动下,Web前端应用规模不断扩大,一个应用可能有成千上万行JavaScript代码。这些代码用于执行各种复杂的功能,为用户提供不同的交互体验。为了确保它们能实现预期的功能,因此Web前端应用测试的工作量也需要相应增加。

• 相对于传统的桌面应用,用户只要重新刷新浏览器就可以获得最新版本的网页,所以Web前端应用具有天生的快速迭代特征,可以频繁地更新和发布。而激烈的商业竞争也使得Web前端应用开发周期缩短,对应的测试周期也非常短。

• 除了JavaScript代码,Web前端应用还有各种超链接、表单以及图片等信息,需要保证在不同的操作系统和浏览器上可以正确显示网页的内容。