很多测试工作都由前端发起,所以了解前端技术可以让测试人员使用更灵活的方式执行测试 任务。如何利用前端技术辅助测试人员更好地执行测试?就要从网络开发模式说起。
网络开发分为前端和后端,为了减少对后端没意义的请求,数据正确性的校验一般都会放在 前端代码中。这样即使后端不判断,正常情况下也不会出现什么大问题。但如果遇到前端代码被 篡改,就可以绕过前端验证发送请求到后端,而当后端的判断有问题就会造成错误的数据进入, 从而引发其他bug,所以要测试这种问题也要会修改前端代码,以便绕过前端验证。
举个输入手机号的例子。
现在一般都是以手机号作为用户名的,而手机号是固定的11位数字,前端一般会限制最多输 入11位数字,那要输入12位数字怎么处理呢?这时候需要使用浏览器的开发者工具了,以下为 操作步骤。
(1)打开 chrome 浏览器。
(2)按住F12调出开发者工具。
(3)选择最左边的定位元素按钮。
(4)选中需要测试的输入框。
(5)出现该输入框的对应的代码,如图所示。
可以看到输入框有个属性 maxlength=11,这段代码说明了输入框的最大长度是11,将11改 成一个很大的数字,然后再在输入框输入就可以超过11了
前端可以修改的东西还很多,这只是举一个简单的例子,所以测试人员需要懂得前端技术。 在学习技术的过程中,当遇到不懂的前端代码时可以请教前端开发,与其合作构建符合测试用例 预置条件的测试场景。
网络架构一般分为两种。
(1)C/S(Client/Server)结构 (2)B/S(Browser/Server)结构
对于核心的Server端来说,简单的是可以在一台服务器上布代码和数据库;复杂的就需要一群 服务器,有些服务器布代码,有些服务器放数据库,有些服务器做中间层,有些服务器用于存储。
从最简单的开始说起,Server端就是一台服务器,上面有应用代码和数据库。
后来前端访问越来越多,一台服务器无法承受,把数据库和应用代码的服务器分开,于是就 形成了几台应用服务器+一台数据库服务器。
往后发展用户越来越多,一台数据库服务器也无法承受了,那就需要进行数据库分离,把不 同用户的数据库放到不一样的数据库服务器上,于是形成了几台应用服务器和几台数据库服务器。
随着用户和访问量越来越多,并发的情况导致数据库堵塞,聪明的IT工程师想了一种办法, 能不能在代码与数据库之间加上一个保护?于是诞生了中间层。中间层也可以理解为另外一种应 用服务器,上面有代码,也有数据库,即代码请求数据的时候不直接连接数据库,而是连接中间 层,中间层连接数据库。逻辑如图所示。
这样当中间层缓存了数据库的数据之后,第二次前端访问同样的数据时,即可通过中间层返 回,而不需要再去请求数据库。当然这只是读数据库的逻辑,写数据库其实也差不多,就是通过 中间层去写数据库,写完数据库再将写完的数据返回来缓存到中间层,这样很大程度减少了读数 据库的压力,起到了保护数据库的作用。
有了中间层之后也并不是高枕无忧了,随着业务功能越来越多,应用服务器也可能随时承受不住 压力,为了规避风险和提高服务质量,通过域名对业务进行分离,保证一块业务模块单独用一个域名, 然后每个域名再用多台服务器,这样一旦某个业务模块出问题之后也不会影响到其他业务模块,而 且单独一块业务用一群服务器也能提高处理效率。
经过不停的演变和进化,Server 端越来越复杂,最 后如图所示。
当然这并不是一个终极形态,只是完成了树干而已,随着业务的拓展和提供更快、更稳定的服务,可以再进
行分离。优化从无止境,所以Server端的网络架构只会 更复杂,更精细。了解Server端的架构对于测试来说是 一种基础,只有明白了所有的环节,才能对每个点进行测试,不然无法保证测试的覆盖率。不仅如此,这对于定位bug也是大有帮助的。
在网络上,计算机之间是如何通过通信进行信息交流的?就如同开心和比目鱼先生进行对话一样,网络协 议就相当于人类所使用的语言。不同的网络协议类似于 不同的语言,它们具备各自的规则特性及约定的标准集合。常用的网络协议有Http 协议、Https 协议和WebSocket协议等。
懂得网络协议对测试人员做专项测试尤为重要。特别是接口测试以及性能测试,它们所使用 的数据通信机制就是建立在协议的基础上的。测试人员了解协议后,才能明白数据传输究竟是怎 么一回事,熟悉协议的组成部分,才能自如地构建测试数据,绕过前端向服务器发送请求。协议 是数据传输的本质,也是测试人员在技术提升上的一大步。
DNS是计算机域名系统(Domain Name System或 Domain Name Service)的缩写,它是由解 析器和域名服务器组成的。域名服务器是指保存有该网络中所有主机的域名和对应IP地址,并具 有将域名转换为IP地址功能的服务器。
DNS解析就是把域名解析成ip的过程,一般网络的访问流程如图1.34所示。
一般来说DNS服务器都是由网络运营商提供的,也就是说不需要特别设置,当你使用该网络 时默认会去访问运营商提供的DNS服务器。当然你也可以自动设置DNS服务器,在网络的TCP/IP 协议中,手动输入DNS的IP,于是便会通过你设置的DNS去解析对应的IP。
好学的开心提问:“用不一样的DNS有什么区别吗?”
“对于只有一个IP的网站来说是没有区别的,对于有多个IP的网站就不一定了。”比目鱼先 生回复道。
先举个例子,当百度只有一个IP的时候,无论哪个DNS解析到的只有一个IP,这样域名对应IP就是一对一的关系
再举个例子,当百度存在多个IP的时候,不同的DNS会解析到不同的IP,这样域名对应IP就是一对多的关系。然而一个用户只能使用一个DNS服务器,所以对于一个用户来说,他访问IP也是唯一的。如果他改了DNS服务器,也许才会解到另外一个IP,如图所示
其实还有一种特殊情况是一个 DNS 解析到多个IP,就是DNS轮询。一个域名针对多个IPa记录的解析,DNS服务器将解析请求按照a记录的顺序,逐一分配到不同的IP上,当轮了一圈之后继续循环,即IP1,IP2,IP3,IP1,IP2,IP3这样的顺序。
这样的好处是为了实现负载均衡,但随着CDN技术的普及,这种方式已经渐渐被淘汰,DNS是CDN的基础,所以先要明白DNS,才可能理解CDN。了让大家更深刻地理解DNS,再介绍一下域名对应多个IP图DNS 劫持的原理。简单来说就是计算机中病毒,然后病毒修改了计算机的DNS设置。此时访问任意网站都会通过该DNS,而该DNS返回给你的IP并非该网站的真正IP,而是一些广告网站或者色情网站的IP。当然这并不是最高级的,因为用户可以很容易改回正常的DNS,高级的做法是入侵正常的DNS服务器,改掉域名和IP的正确对应关系。于是使用该DNS的用户都会遭殃,这种情况只能等运营商去修复或者使用其他未被入侵的DNS。
随着网络的普及和发展,瓶颈已经不再是服务器或者数据库的压力了,而是流量和访问速度。打个比方,有一个很大的水池可以存放很多水,但是只有一个水龙头放水,此时水就会放得很慢,后面的水要等前面的水放出来才能进入水池,那么怎么办呢?多弄几个水龙头同时放水就可以解决这个问题。其实CDN就是这么一件事情。
CDN的全称是 Content Delivery Network,即内容分发网络是通过在网络各处放置节点服务器所构成的在现有的互联网基础之上的一层智能虚拟网络。CDN系统能够实时地根据网络流量和各节点的连接、负载状况以及到用户的距离和响应时间等综合信息将用户的请求重新导向离用户最近的服务节点上。其目的是使用户可就近取得所需内容,解决 Internet 网络的状况,提高用户访问网站的响应速度。
最常见的就是通过CDN服务商去分配合适的IP给用户访问,一般遵循3种方式分配。
(1)就近分配,即CDN服务器获取本地IP所在地,然后访问最近的CDN节点,这样可以少经过几条路由,从而加快访问速度,如图所示。
(2)负载均衡分配,如果都按照上图的原则去分配,势必会导致一个问题,即北上广的用户过多,而其他地方用户太少,这样北上广用户还是会慢,都堵在一个节点。所以需要根据每个节点的负载压力自动将其分配到压力较小的节点。
(3)手动分配,以上两种都是自动分配,但有一种情况是某个节点网络出问题,或者机房断电等不可控因素,这时候就要手动调配节点以保证用户不受影响。
当然也可以不通过CDN服务商达到CDN的目的,就是自己做CDN,虽然成本较大,但私密信息不会泄露。毕竟通过CDN服务商必须把信息放在CDN节点上,这样隐秘性比较难保证。
最后说一下云服务,随着网络架构越来越复杂,需要耗费大量的人力和物力去搭建网络架构,还有很大的维护成本。于是就兴起了云服务,云服务的说法众说纷纭,原理搭建一套独立的网络系统提供给企业或者个人使用,从中收取费用。对使用者而言节约了自身的开发和搭建的时间,而对于云服务的开发者来说又提供了很好的服务。这是一个双赢的结果,也是越来越多企业和个人愿意使用云服务,而各种大公司又愿意开发云服务的原因。
Linux 系统作为常用的服务器系统,不论测试环境的部署,还是构建测试场景,它的基本操作对专家级的测试人员来说都是必须掌握的技能。测试人员可以从以下几方面学习Linux知识。
(1)获得帮助·#help #man
(2)基础命令
tar与gzip 34
mount,umount 图形界面和命令行界面的切换
列出目录中的文件(LS)
·目录切换(CD)
·创建、移动、复制、删除文件的操作
·重启和关机
(3)建新目录
cp rm
· mv
·dudf
·cat
(4)文件指令
(5)清除屏幕
(6)组管理
(7)进程服务
(8)网卡设置
(9)服务进程
·Web服务
·ssh服务
数据库对于测试人员来说不是陌生的话题。测试工程师在编写测试用例时,要根据数据库的 表结构编写SQL语句。让测试结果不受前端显示的影响,可以更彻底地校验数据的正确性。
对于专家级的测试人员,数据库的使用也不是单单停留在查询数据而已。可以通过对数据库 的修改构建测试人员所需的测试场景。这算是一种比较高级的测试,这种测试已经不是简单的黑 盒测试,首先要对程序逻辑清楚,而且还要对数据库的表和字段都非常熟悉,不然是没法通过对 数据库的操作来达到测试的目的的。
有些时候需要测试工程师具备检验异常情况下的程序处理能力,而某些异常场景通过测试数 据本身无法模拟。这时候就需要通过修改数据库,如插入一条异常数据,或者修改某个字段,达 到构建异常测试场景的效果。具体情况需要根据程序和数据库的处理逻辑来修改,这是专家级测 试人员必备的一种测试思路。
以上这些不需要样样精通,但至少需要达到理解的程度。因为具备这些知识不仅可以发现更 深层次的bug,对于分析定位bug也非常有用。而此时可以做的测试内容就非常多了,不再局限 于手工测试,可以借助于各种辅助工具来协助测试,从而完成一些手工测试无法做到的测试,比 如接口测试或者安全性测试等。
专家级的测试人员需要具备很强的综合能力,不但要精通各方面相关技术,还需要具备一定的编码能力,能将人工的测试转化为自动化测试和并发测试,并且通过工具或自己写的脚本把人力从一些烦琐和重复的测试之中解放出来,从而投入到其他更需要花时间测试精力的地方。这就需要测试人员具备专业以外的技能,如项目管理以及业务分析等。
专家级的测试相比工程师级的测试,可以通过各种方式把测试贯穿在整个项目中,将测试进行得更全面和细致,大大缓解了测试时间的压力,自然而然项目的质量也会更好。虽然说“三个臭皮匠赛过诸葛亮”,但考虑人力成本的性价比,公司应该一定会选择一个诸葛亮。