当今我们正处于互联网时代,特别是移动互联网 时代 。 大量的程序都是以 APP 或者 Web 的形式提供给用户使用。 测试人员现在主要测试的是 APP 或者 Web 端 。按照架构程序可以分为前端和后台。有的测试人员测试前端,有的测试后台。学好了 HTTP 协议和 Fiddler,可以将其应用到后台的自动化测试和接口的自动化测试。
17.1 自动化测试分类
自动化测试的种类非常多。
17.2 分层的自动化测试理念
最底层的单元测试是属于开发人员做的。
最上层的 UI 自动化测试,就是用程序模拟用户手工操作的测试方法,模拟鼠标键盘的操作,能够帮助测试人员从重复和枯燥的手工测试中解放出来 。 比如使用 Selenium 来做 Web 的 UI 自动化测试,使用 Appium 来对于机 UI 做自动化测试。UI 层的自动化测试工具非常多。将 UI 自动化测试在真正的工作中时,测试人员会发现理想和现实之间差距很大。
为什么外部环境、业务变更和应用环境问题能导致这么多 UI 自动化失败呢?这是因为 UI 自动化存在以下的缺点:
- UI 自动化是非常不稳定的。网速、浏览器、脚本的健壮性和测试环境等因素都会导致 UI 自动化测试的失败
- 做 UI 自动化测试成本非常高,对测试人员要求也很高一一需要懂自动化框架,会一门编程语言,同时还需要代码逻辑清晰
- UI 自动化效果差,发现不了几个 Bug。UI 自动化测试搞不好可能会成为鸡肋
- 维护性差,当 UI 发生改变的时候,UI 自动化测试用例会大量失效,测试人员不得不花时间去修改 UI 自动化测试代码
虽然 UI 自动化测试对项目来说有时候可能没有太大作用,但是对测试人员自身来说却有非常大的帮助 。在做 UI 自动化测试的过程中,测试人员会碰到各种各样的问题 ,然后他们会想办法去解决问题,这个过程能大大提高测试人员的能力。
17.3 Web 自动化测试的两种思路
-
UI 自动化测试,或者叫 Browser 测试, 模拟浏览器端的一些操作,比如在 TextBox 输入一些文本,选择下拉框中的某个选项。使用 Selenium 这样的 UI 自动化测试框架,模拟用户的操作,比如自动打开浏览器;然后自动输入用户名和密码,自动单击登录按钮。
-
用发包工具模拟浏览器的发包,直接发送 HTTP 请求给 Web 服务器,然后对服务器响应回来的行进行解析和验证。
这两种自动化测试的方法各有优缺点。浏览器的 UI 自动化测试能够模拟用户真实的操作场景,但是运行很慢,而且不稳定,自动化测试代码维护成本非常高。基于 HTTP 协议的自动化测试运行速度快,稳定,但是没有对 UI 和脚本进行测试。
17.4 什么是接口测试
接口是指模块与模块之间的对接方式定义,或者是系统与系统之间的对接方法定义。接口是可以部署成服务的协议接口,常见的协议就是 HTTP 协议。
所以测试人员平常说的接口测试或者 Web 接口测试、Restful API 测试,就是基于 HTTP 协议的接口测试。除了基于 HTTP 协议的接口,还有基于其他协议的接口,其本质都是要发送一个 HTTP 请求报文给服务器,然后服务器返回 一个 HTTP 响应报文。
接口一般比较稳定,改动不会很频繁,所以接口的自动化测试的维护成本就比较低 。一般来说,接口测试是最简单的自动化测试,甚至不需要写多少代码,用自动化工具就能实现自动化测试,接口测试能发现很多 Bug 。
手动测试人员如果想转型做自动化测试,从接口自动化测试开始入门是一个非常好的选择。
17.5 接口测试工具
- 抓包工具:Fiddler、Firebug 、HTTP Analyzer
- 发包工具:开源工具有 JMeter 、Postman,商业工具有 LoadRunner 、SoapUI 。
17.6 Web 原理
当我们在浏览器的地址栏中输入 URL,就能打开一个网页,那么网页是如何呈现的呢?具体过程如下 。
- 浏览器(Browser)是客户端,发送 HTTP 请求给 Web 服务器(Server)
- Web 服务器接受了请求后,生成相应的 HTTP 响应(Response),然后发送给浏览器。
- 浏览器解析 HTTP 响应,这样我们就看到页面了 。 这就是我们说的 Browser/Server 结构,简称 B/S 结构。
在浏览器中输入 http://www.cnblogs.com/liqingwen。
17.7 Web 自动化测试原理
用自动化工具把自己伪装成一个浏览器,发送 HTTP 请求给 Web 服务器,这就是自动化测试原理。市面上能发送 HTTP 请求的工具很多 ,常用的有 JMeter、 Load.Runner 、 Postman 等。
另外,几乎所有的编程语言都能发送 HTTP 请求。
17.8 性能测试的原理
性能测试实际上也是通过工具模拟出很多虚拟的用户,同时发送 HTTP 请求给 Web 服务器。对被测系统实行压力负载测试,监控被测系统在不同业务不同压力下的性能表现,找出潜在的性能瓶颈并对其进行分析、优化。
17.9 APP 的后台测试
移动 APP 的架构一般是由前端 的 APP 调用后台的 Web 服务器,Web 服务器提供了很多接口。
APP 的后台其实就是 Web Server ,也是通过 HTTP 协议暴露出来 的 API(或者叫接口)。
如果我们要直接测试 APP 的后台服务,则可以使用自动化测试工具,直接调用后台的 API。
17.10 如何学习 Web 自动化测试和性能测试
做 Web 自动化测试和性能测试,最重要的是要理解 HTTP 协议,然后再学会用工具模拟出同样的 HTTP 请求发送给服务器,或者自己写代码模拟出相同的 HTTP 请求。
HTTP 协议是一个数据包,我们怎么样才能看到这个数据包的样子呢?我们需要找一个抓包工具来抓 HTTP 的数据包,查看数据包中有什么字段。
我们用什么工具来发送 HTTP 协议数据包呢?我选择用 JMeter 来发送 HTTP 数据包,因为 JMeter 的功能强大井且简单易学,不需要写代码,使用非常方便。
参考
《HTTP 抓包实战》