项目架构的演变——软件接口测试实战详解(15)

发表于:2021-6-03 09:34

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:于涌 马林 张林丰    来源:51Testing软件测试网原创

  第6章  接口测试案例
  6.1  项目架构的演变
  在传统的Web开发中,设计了由浏览器和服务器组成的架构,将浏览器(browser)叫前端,将服务器(server)叫后端,因此将这种设计架构统称为B/S架构,如图6-1所示。
图6-1  B/S架构

  最早的项目都是由多个静态资源文件组成的,如HTML文件、图片文件等,这些项目文件被部署到Web服务器上。常见的Web服务器有IIS、Apache等,当用户从浏览器中发送请求后,服务器将请求的资源文件传输到浏览器端,由浏览器解释并执行这些HTML文件,读取图片文件,最终以页面形式呈现给用户。
  接下来,出现了可以进行动态页面开发的语言,如ASP.NET、PHP、JSP等开发语言。
  于是,业务逻辑就可以变得更复杂了,不仅可以进行数据库的读写操作,这些由动态语言编写的代码被部署到应用服务器上,还可以在服务器端环境下解释和执行(而静态HTML语言是在浏览器端环境中执行的)。
  然而,这时候的页面开发有一个令人头疼的问题,一个页面中既有用于展示的HTML、CSS静态代码,又有控制页面行为的JavaScript代码,还有用于业务处理的逻辑判断、循环分支以及数据读取等动态代码,简直就像一个大杂烩,代码结构杂乱无章,高度耦合,难以维护。
  此时的架构虽然区分了前端和后端,但是属于在物理层上的区分,而不是从工作职责上进行区分,开发人员既要熟悉后端开发语言,又要懂得前端语言,简直就是一个全能的角色。
  当然,现在还有一个更炫的名字与之对应,叫作“全栈开发工程师”,该取位显然是好听不好做的。
  从架构的角度出发,为了实现解耦及功能分隔,提出了模型-视图-控制器(Model View Controller,MVC)设计模式,即将界面、业务和数据区分开来,各司其职。
  其中,模型用于数据的封装,视图用于数据的展示(简单说就是界面),控制器用于业务处理。MVC框架的实现主要基于后端,渲染视图的过程是在服务端完成的,最终呈现给浏览器的是带模型的视图页面。
  例如,若用户发出一个HTTP请求,该请求首先会到达控制器,然后由控制器读取数据并封装为模型,最后将模型传递到视图中进行展现(见图6-2)。
  MVC设计模式一种典型的应用是Java的SSH框架,其中整合了Struts 2、Spring和Hibernate,以帮助开发人员在短期内搭建结构清晰、可复用性高、维护方便的Web应用程序。
图6-2  MVC设计模式

  随着AJAX技术的兴起,开发重心又开始逐渐前移了。AJAX 的全称是 Asynchronous JavaScript And XML,即“异步 JavaScript 和 XML”,它并非特指一门语言或者一个框架,而是一种编程方法。
  同步(synchronized)和异步(asynchronized)是一对相对的概念。
  同步是指浏览器发出请求后,要等待服务器接收并发回响应以后,才可以发送下一个请求的通信方式,在这种方式下请求和响应必须一来一回,按顺序执行。
  异步是指浏览器发出请求后,不用等待服务器发回响应,就可以发送下一个请求,浏览器可以随时监控响应的到达并进行处理的通信方式。同步和异步通信的区别如图6-3(a)与(b)所示。
  AJAX通过JavaScript语言操作文档对象模型(Document Object Model,DOM)来实现动态效果,通过XML语言进行数据交互,使用XMLHttpRequest进行异步数据接收。
  在AJAX之前,当展现的页面数据需要更新时,页面将作为一个整体重新加载,即使要更新的只是页面中的一小块区域,也要重新加载整个页面,速度慢且效果差。
  而AJAX利用JavaScript异步发起请求,结果以XML格式返回,随后通过JavaScript可以更新局部页面,所以AJAX最大的优点是不用重新加载全部页面,而只是进行局部更新即可。
  例如,我们打开百度首页,输入搜索关键词后,在搜索框下方会弹出一个搜索建议词列表,于是只有局部的一小块区域更新了,而不是整个百度首页重新加载一次,如图6-4所示。
图6-3  同步和异步通信的区别

图6-4  在百度首页中通过AJAX实现搜索词列表

  技术和用户需求都在不断更新。用户可使用的前端设备越来越多样化,如传统的浏览器、手机App、手持Pad等,同时在激烈的市场竞争环境中,既要求应用的发布时间尽可能缩短,又要给用户带来尽善尽美的使用体验,继而开发模式也从传统的瀑布模式向敏捷迭代模式转变。
  系统开发的难度和成本越来越高,对开发人员的要求也不断攀升,如果针对不同的终端环境分别开发和维护一套单独的应用版本,这个工作量将非常庞大,那么为了提升开发效率,使业务逻辑和数据尽量实现复用,前后端分离的需求就会越来越迫切。
  为了实现前后端分离的模式,当前一种主流的做法是前端HTML页面通过AJAX技术调用后端提供的RESTful API接口,并使用JSON数据进行交互。
  REST的全称是Representational State Transfer,可以翻译为表现性状态转移,是Roy Thomas Fielding(HTTP规范的主要设计者之一、Apache HTTP Server项目的联合创始人)在2000年写的一篇关于软件架构风格的论文中首次提出的。
  而后许多知名互联网公司纷纷开始采用这种轻量级的Web服务,并习惯将其称为RESTful Web Service,或简称REST服务。
  如图6-5所示,在前后端分离的架构中,后端只需要负责按照约定的数据格式向前端提供可调用的API服务即可。
  前后端之间通过HTTP请求进行交互,前端获取到数据后,进行页面的组装和渲染,最终呈现到浏览器中。
图6-5  前后端分离的架构

查看《软件接口测试实战详解》全部连载章节
版权声明:51Testing软件测试网获得人民邮电出版社和作者授权连载本书部分章节。
任何个人或单位未获得明确的书面许可,不得对本文内容复制、转载或进行镜像,否则将追究法律责任。
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号