反骨仔

一个业余的 .NET Core 攻城狮

0%

17 自动化测试和接口测试

当今我们正处于互联网时代,特别是移动互联网 时代 。 大量的程序都是以 APP 或者 Web 的形式提供给用户使用。 测试人员现在主要测试的是 APP 或者 Web 端 。按照架构程序可以分为前端和后台。有的测试人员测试前端,有的测试后台。学好了 HTTP 协议和 Fiddler,可以将其应用到后台的自动化测试和接口的自动化测试。

17.1 自动化测试分类

自动化测试的种类非常多。

17.2 分层的自动化测试理念

最底层的单元测试是属于开发人员做的。

最上层的 UI 自动化测试,就是用程序模拟用户手工操作的测试方法,模拟鼠标键盘的操作,能够帮助测试人员从重复和枯燥的手工测试中解放出来 。 比如使用 Selenium 来做 Web 的 UI 自动化测试,使用 Appium 来对于机 UI 做自动化测试。UI 层的自动化测试工具非常多。将 UI 自动化测试在真正的工作中时,测试人员会发现理想和现实之间差距很大。

image-20210110203338196

image-20210110203352462

为什么外部环境、业务变更和应用环境问题能导致这么多 UI 自动化失败呢?这是因为 UI 自动化存在以下的缺点:

  1. UI 自动化是非常不稳定的。网速、浏览器、脚本的健壮性和测试环境等因素都会导致 UI 自动化测试的失败
  2. 做 UI 自动化测试成本非常高,对测试人员要求也很高一一需要懂自动化框架,会一门编程语言,同时还需要代码逻辑清晰
  3. UI 自动化效果差,发现不了几个 Bug。UI 自动化测试搞不好可能会成为鸡肋
  4. 维护性差,当 UI 发生改变的时候,UI 自动化测试用例会大量失效,测试人员不得不花时间去修改 UI 自动化测试代码

虽然 UI 自动化测试对项目来说有时候可能没有太大作用,但是对测试人员自身来说却有非常大的帮助 。在做 UI 自动化测试的过程中,测试人员会碰到各种各样的问题 ,然后他们会想办法去解决问题,这个过程能大大提高测试人员的能力。

17.3 Web 自动化测试的两种思路

  1. UI 自动化测试,或者叫 Browser 测试, 模拟浏览器端的一些操作,比如在 TextBox 输入一些文本,选择下拉框中的某个选项。使用 Selenium 这样的 UI 自动化测试框架,模拟用户的操作,比如自动打开浏览器;然后自动输入用户名和密码,自动单击登录按钮。

  2. 用发包工具模拟浏览器的发包,直接发送 HTTP 请求给 Web 服务器,然后对服务器响应回来的行进行解析和验证。

    这两种自动化测试的方法各有优缺点。浏览器的 UI 自动化测试能够模拟用户真实的操作场景,但是运行很慢,而且不稳定,自动化测试代码维护成本非常高。基于 HTTP 协议的自动化测试运行速度快,稳定,但是没有对 UI 和脚本进行测试。

17.4 什么是接口测试

接口是指模块与模块之间的对接方式定义,或者是系统与系统之间的对接方法定义。接口是可以部署成服务的协议接口,常见的协议就是 HTTP 协议。

所以测试人员平常说的接口测试或者 Web 接口测试、Restful API 测试,就是基于 HTTP 协议的接口测试。除了基于 HTTP 协议的接口,还有基于其他协议的接口,其本质都是要发送一个 HTTP 请求报文给服务器,然后服务器返回 一个 HTTP 响应报文。

接口一般比较稳定,改动不会很频繁,所以接口的自动化测试的维护成本就比较低 。一般来说,接口测试是最简单的自动化测试,甚至不需要写多少代码,用自动化工具就能实现自动化测试,接口测试能发现很多 Bug 。

手动测试人员如果想转型做自动化测试,从接口自动化测试开始入门是一个非常好的选择。

17.5 接口测试工具

  1. 抓包工具:Fiddler、Firebug 、HTTP Analyzer
  2. 发包工具:开源工具有 JMeter 、Postman,商业工具有 LoadRunner 、SoapUI 。

17.6 Web 原理

当我们在浏览器的地址栏中输入 URL,就能打开一个网页,那么网页是如何呈现的呢?具体过程如下 。

  1. 浏览器(Browser)是客户端,发送 HTTP 请求给 Web 服务器(Server)
  2. Web 服务器接受了请求后,生成相应的 HTTP 响应(Response),然后发送给浏览器。
  3. 浏览器解析 HTTP 响应,这样我们就看到页面了 。 这就是我们说的 Browser/Server 结构,简称 B/S 结构。

在浏览器中输入 http://www.cnblogs.com/liqingwen。

image-20210110204637463

17.7 Web 自动化测试原理

用自动化工具把自己伪装成一个浏览器,发送 HTTP 请求给 Web 服务器,这就是自动化测试原理。市面上能发送 HTTP 请求的工具很多 ,常用的有 JMeter、 Load.Runner 、 Postman 等。

另外,几乎所有的编程语言都能发送 HTTP 请求。

image-20210110204739192

17.8 性能测试的原理

性能测试实际上也是通过工具模拟出很多虚拟的用户,同时发送 HTTP 请求给 Web 服务器。对被测系统实行压力负载测试,监控被测系统在不同业务不同压力下的性能表现,找出潜在的性能瓶颈并对其进行分析、优化。

image-20210110204820082

17.9 APP 的后台测试

移动 APP 的架构一般是由前端 的 APP 调用后台的 Web 服务器,Web 服务器提供了很多接口。

image-20210110204854341

APP 的后台其实就是 Web Server ,也是通过 HTTP 协议暴露出来 的 API(或者叫接口)。

如果我们要直接测试 APP 的后台服务,则可以使用自动化测试工具,直接调用后台的 API。

image-20210110204954698

17.10 如何学习 Web 自动化测试和性能测试

做 Web 自动化测试和性能测试,最重要的是要理解 HTTP 协议,然后再学会用工具模拟出同样的 HTTP 请求发送给服务器,或者自己写代码模拟出相同的 HTTP 请求。

HTTP 协议是一个数据包,我们怎么样才能看到这个数据包的样子呢?我们需要找一个抓包工具来抓 HTTP 的数据包,查看数据包中有什么字段。

我们用什么工具来发送 HTTP 协议数据包呢?我选择用 JMeter 来发送 HTTP 数据包,因为 JMeter 的功能强大井且简单易学,不需要写代码,使用非常方便。

参考

《HTTP 抓包实战》