接口测试基础

接口测试理论

学习目标

  1. 理解接口测试的原理
  2. 理解接口测试的价值

接口相关概念

  • 接口:系统之间数据交互的通道

image-20231209121847609

  • 接口测试:校验接口响应数据与预期数据是否一致
    • 接⼝测试,可以绕过前端界⾯, 直接对服务器进⾏测试

image-20231209121925813

接口测试价值

  • 测试页面测试发现不了的问题
  • 符合质量控制前移理念
  • 测试成本低,效益高

接口测试实现方式

  • ⼯具:
    • postman:使⽤简单,上⼿难度低。功能较少。
    • jmeter:使⽤难度较⼤。上⼿难度⼤。功能⻬全。
  • 代码:
    • Python + requests + Unittest
    • java + HttpClient

image-20231209122025055

HTTP协议

学习目标

  1. 掌握URL的组成部分
  2. 掌握HTTP请求数据
  3. 掌握HTTP响应数据

HTTP协议

  • 协议:就是规则!要要求使用协议的双方必须严格遵守
  • HTTP:超文本传输协议,基于请求与响应的应用层协议
    • 提示:协议是不同事物之间通信的规则。
  • 特点:
    1. 客户端、服务器模式
    2. 简单快速
    3. 灵活
    4. ⽆连接
    5. ⽆状态

image-20231209122200554

URL的组成

  • 说明:

    • URL:(Uniform Resource Locator)统一资源定位符,网络资源地址

    • HTTP使用URL来建立连接和传输数据

  • URL组成:协议 :// hostname[:port] / path / [? 查询参数1 & 查询参数2]

    • 完整语法格式:协议://IP地址:端口号/资源路径?查询参数

      • 协议:
        • http、https。 作⽤:指定数据传输规则
      • 域名:
        • 也就是 IP 地址。 作⽤:在⽹络环境中,定位⼀台唯⼀的主机
      • 端口:
        • 作⽤:在 主机上,唯⼀定义个应⽤程序。
        • 可以省略。如果省略,默认端口跟随协议。 http 协议默认端口为 80 。 Https 协议默认端口号是 443
      • 资源路径:
        • 作⽤:应⽤对应的数据资源。
        • 可以省略。如果省略,资源路径默认为 /
      • 查询参数 :
        • 作⽤:给资源传递参数
        • 可以省略。如果省略,没有 分割符。
        • 可以有多组。每组 k=v 格式。各组之间 ⽤ & 隔分。
    • 例如 : http://www.itcast.cn:8080/news/index.html?uid=123&page=1

      • http 协议的默认端口号是 80 端口
      • https 协议的默认端口号是 443 端口
  • 案例 :

    • 说出下面 URL 是我各个组成部分
      • http://www.weather.com.cn/data/sk/101010100.html
        • 协议:http
        • 域名:www.weather.com.cn
        • 端口: http 协议默认端口为 80
        • 资源路径:/data/sk/101010100.html
        • 查询参数 : 无

HTTP请求

HTTP请求

  • 定义请求数据格式, 由 请求行、请求头、空行 , 请求体组成 , 一定产生于客户端 , 当客户端给服务器发送请求时,使用该协议
    • 请求⾏:请求⽅法、URL、协议版本
    • 请求头:k :v
    • 空⾏:代表 请求头 结束。
    • 请求体:发送给服务器请求时,携带的数据。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// 以下为请求方式 , 请求地址 , 协议和协议版本
POST http://demo.zentao.net/user-login.html HTTP/1.1
// 以下为请求头
Host: demo.zentao.net
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:68.0) Gecko/20100101
Firefox/68.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Referer: http://demo.zentao.net/user-login.html
Content-Type: application/x-www-form-urlencoded
Content-Length: 54
Connection: keep-alive
Upgrade-Insecure-Requests: 1

// 以下为请求体
account=demo&password=efc4a3b32e48054865e5a8321cfda3e4

请求行

  • 位置:⼀定位于 http 请求协议的,第⼀⾏。格式:请求⽅法(空格) URL(空格) 协议版本

  • 作用:说明请求方法、访问的资源、协议版本

    • POST http://demo.zentao.net/user-login.html HTTP/1.1
  • 常用请求方法:

    • GET:从服务器获取资源 , (没有请求体)
    • POST:在服务器新建一个资源(注册、登录)
    • PUT:在服务器更新资源
    • DELETE:从服务器删除资源 (没有请求体)

请求头

  • 位置:位于 请求⾏之下,空⾏之上的部分。 数据组织格式 ⼀定是 k:v 对。
  • 作用:通知服务器客户端请求信息
  • 特点:请求头部由键值对组成,每行一对

image-20231209123103972

  • Content-Type : 作⽤是指定请求体的数据类型。

    • application/json:请求体数据类型为json
    • application/x-www-form-urlencoded:描述请求体的数据类型为表单类型。
  • Content-Type:请求体数据类型

    • text/html: HTML 格式
    • text/plain:纯文本格式
    • image/jpeg:jpg 图片格式
    • application/json: JSON 数据格式
    • application/x-www-form-urlencoded: 表单默认的提交数据格式
    • multipart/form-data: 在表单中进行文件上传时使用

请求体

  • 位置:空白行之后的内容

    • 有的请求协议是没有请求体。如:get、delete
    • 请求体的数据类型, 受请求头中 Content-Type 的值影响。
  • 作用:传输数据实体

  • 请求体常在POST、PUT方法中使用

  • 常配合的请求头:Content-Type和Content-Length

  • 例如 : account=demo&password=efc4a3b32e48054865e5a8321cfda3e4

    • 请求报文中可以没有请求体数据

案例

  • 抓包获取ihrm系统的登录接口和tpshop登录接口,解析请求数据

    • 区分请求数据行/头/体位置

    • 请求url:

    • 请求方法:

    • 请求数据类型:

    • 请求数据:

  • 浏览器 : F12 - Network - 选择All

HTTP 响应

HTTP响应

  • 产生端 :

    • ⼀定产⽣于服务端。 当服务器接收到 http请求协议 之后,才会产⽣ http响应协议(响应报⽂、响应包)。
  • 定义响应数据格式:

    • 响应⾏:包含协议版本、状态码、状态码描述
      • 响应行也可以叫状态行
    • 响应头:K:V 格式的数据。
    • 空⾏:代表响应头结束。
    • 响应体:服务回发给客户端的数据。⼏乎所有的响应包,都有响应体。

状态行

  • 位置:⼀定位于 http响应协议的,第⼀⾏。格式:协议版本 (空格) 状态码 (空格) 状态码描述
  • 作用:描述服务器处理结果
  • 内容:状态行由协议版本号、状态码、状态消息组成
  • HTTP/1.1 200 OK

响应状态码

  • 状态码三位数字组成,第一个数字定义响应类别:

    • 1xx:指示信息
    • 2xx:成功
    • 3xx:重定向
    • 4xx:客户端错误
    • 5xx:服务器端错误
  • 常见的响应状态码 :

image-20231209123620441

响应头

  • 位置:第二行开始到空白行之间
  • 作用:描述客户端要使用的一些附加信息
  • 特点:响应头由键值对组成,每行一对
1
2
3
4
5
6
7
8
9
HTTP/1.1 200 OK
<!-- 响应头 -->
Date: Fri, 22 May 2009 06:07:21 GMT
Content-Type: text/html; charset=UTF-8

<html>
<head></head>
<body>...</body>
</html>

响应体

  • 位置:响应数据空白行之后
  • 作用:服务器返回的数据实体
  • 特点:有图片、json、xml、html等多种类型
1
2
3
4
5
6
7
8
9
10
HTTP/1.1 200 OK
<!-- 响应头 -->
Date: Fri, 22 May 2009 06:07:21 GMT
Content-Type: text/html; charset=UTF-8

<!--响应体-->
<html>
<head></head>
<body>...</body>
</html>

案例

  • 抓包获取ihrm系统的登录接口和tpshop登录接口,解析响应数据
    • 区分响应数据行/头/体
    • 响应状态码
    • 响应体数据类型
    • 响应体具体数据

接口规范

传统接口风格

  • 举例:对用户进行操作的相关接口,包括增删改查
  • 特点 :
    • 接口统一采用get/post实现所有操作
    • URL与资源不是一一对应的。
    • 在URL中查看出,是何种操作
    • 状态码统一返回200

image-20231209124659574

RESTful

  • RESTful是一种网络应用程序的设计风格和开发方式,并不是必须要遵守的标准,只是提供了一组设计原则和约束条件
  • 好处:提供了一套统一遵守的规范,方便团队配合,提高工作效率
  • 特点 :
    • 接口使用的方法,与http协议的请求方法,,一一对应。
    • get-查、post-增、put-改、delete-删 , URL与资源一一对应!
    • 不能从URL中,看出是何种操作。需要通过结合请求方法来识别何种操作。
    • 响应状态码使用较为全面。

image-20231209124754477

接口API设计规范

  • 特点: 面向资源

  • 1 , 请求 API 的 URL 用来定位资源(名词表示)

image-20231209124902861

  • 2 , 通过标准HTTP方法对资源CRUD

image-20231209124928245

  • 3 , 利用HTTP状态码返回状态信息

传统风格和RESTful对比

  • 传统风格接口:get、post方法。URL不唯一。统一返回200
  • RESTfuI风格接口:URL唯一,定位资源。结合请求方法对应不同操作。返回状态码较灵活。

image-20231209125018315

接口测试流程

  1. 需求分析(产品经理的需求⽂档)

  2. 接⼝⽂档解析(开发编写的接⼝API⽂档)

  3. 设计 接⼝测试⽤例(编写 Excel 表格形式的⽤例)

  4. 准备接⼝测试脚本

  5. postman ⼯具 ⽣成脚本

  6. python 代码 编写脚本

  7. 执⾏测试⽤例,跟踪缺陷

  8. ⽣成 接⼝测试报告

  9. 接⼝⾃动化持续集成(可选)

image-20231209125051012

接口文档解析

接口文档介绍

  • 什么是接口文档 : 也叫 API ⽂档,⼀般由后端开发⼯程师编写。⽤来描述接⼝信息的⽂档。
  • 接口文档的作用 , 为什么要写接口文档 :
    • 协同:团队⼈员⼯作协同配合
    • 约束:项⽬更新修改同步维护

接口文档解析

  • 为什么要进行接口解析?
    • 通过分析接⼝⽂档,熟悉接⼝信息。
    • 通过接⼝⽂档获取,接⼝测试所使⽤的 请求数据、预期结果。
  • 解析的核⼼⽬标 :
    • 熟悉接口的相关信息,为设计接口用例准备

    • 请求报⽂关键数据:

      • 请求⽅法、URL、请求数据(请求头、请求体)
    • 响应报⽂关键数据:

      • 响应状态码、响应数据(响应体)

接口文档解析

  • 接口文档:又称为API文档,是由后端开发编写,用来描述接口信息的文档。

image-20231209125222252

接口文档内容

image-20231209125324709

image-20231209125352540

案例

  • 需求:解析ihrm系统API文档中部分接口信息
    • 登录

    • 添加员工

    • 查询员工

    • 修改员工

    • 删除员工

    • 城市列表

    • 用户资料

image-20231222141017820

思考

  1. 接口API文档包含哪些内容?
  2. 接口解析重点需要分析哪些内容?
  3. 是否按照excel模版要求完成指定的接口解析?

总结

  1. 能够分析HTTP协议的请求和响应报文
  2. 完成ihrm系统指定单接口的API文档解析

接口测试用例设计

学习目标

  1. 掌握接口测试用例设计方法
  2. ihrm系统登录/员工管理相关接口用例设计

接口测试质量维度

image-20231209131056980

功能测试

  • 单接口功能测试:
    • 一个单独的业务,就对一个独立的接口。如:登录业务,对应登录接口。
  • 业务场景功能测试:
    • 多个接口被连续调用。(模拟用户的实际使用场景)

性能测试

  • 响应时长:从发送请求到接收到服务器回发响应包所经历的时间。
  • 错误率:服务器运行出错的概率
  • 吞吐量:服务器单位时间内,处理请求的数量。
  • 服务器资源利用率:cpu、内存、网络、磁盘等硬件资源的占用率。

安全测试

  • 攻击安全:木马、病毒.由具备专业安全技术,会使用专业安全测试工具的安全测试工程师负责。
  • 业务安全:必须登录,才能访问用户数据。敏感数据加密存储。
  • SQL注入

接口用例设计方法

image-20231209131113328

单接口测试

  • ⼀个单独的业务,就对⼀个独⽴的接⼝。如:登录业务,对应登录接⼝。注册业务,对应注册接⼝。⽀付业务,对应⽀付接⼝。
    • 正向:
      • 必选 参数。 所有必选项,给正确数据
      • 组合 参数。 所有必选 + 任意可选,给正确数据。
      • 全部 参数。 所有必选 + 所有可选。给正确数据。
    • 反向:
      • 功能异常:数据格式正确,不能履⾏接⼝功能。
      • 数据异常:数据格式不正确(空值、特殊字符、汉字、字⺟、⻓度、范围 —- 等价类、边界值)
      • 参数异常:
        • 多参:多出 必选参数
        • 少参:缺少 必选参数
        • ⽆参:没有 指定参数
        • 错误参数:参数名 错误。

业务场景测试

  • ⼀定在 单接⼝ 测试 之后!
    • 尽量模拟⽤户实际使⽤场景。
    • 尽量⽤最少的⽤例,覆盖最多的接⼝请求。
    • ⼀般情况下,覆盖正向测试即可。

接口测试用例设计实践

  • 完成登录接口+新增/查询/修改/删除员工+指定业务场景用例设计
    • 按照接口测试方法进行测试点分析
    • 从测试点转化测试用例
    • 使用Postman进行接口测试
  • 指导思想:模拟⽤户实际使⽤,⽤较少的测试⽤例,覆盖更多接⼝,测试正向即可。
    • 登录 - 添加员⼯ - 查询员⼯ - 修改员⼯ - 删除员⼯ - 查询员⼯列表

image-20231222185110128

登录

image-20231209131222398

  • 正向:
    • 登录成功
  • 反向:
    • 功能异常:
      • ⼿机未注册
      • 密码错误
    • 数据异常:
      • ⼿机号为空
      • ⼿机号含有字⺟、特殊字符
      • ⼿机号12位
      • ⼿机号10位
      • 密码为空
      • 密码含有字⺟、特殊字符
      • 密码1位
      • 密码100位
    • 参数异常:
      • 多参:多出abc
      • 少参:缺少-mobile
      • ⽆参:
      • 错误参数:修改 mobile 为 abc

image-20231222175306725

新增

image-20231209131234306

  • 正向:
    • 必选参数
      • 姓名 + ⼿机号+⼯号
    • 组合参数
      • 姓名 + ⼿机号+⼯号 + 聘⽤形式
    • 全部参数
      • 全部必选 + 全部可选
    • 反向:
      • 功能异常
        • ⼿机号已经存在
        • ⼯号已经存在
        • ⼊职时间 晚于 转正时间
      • 数据异常
        • ⽤户名为空
        • ⽤户名为纯数字
        • ⽤户名为纯字⺟
        • ⽤户名含有特殊字符、汉字
        • ⼿机号为空
        • ⼿机号含有字⺟、特殊字符
        • 10位⼿机号
        • 12位⼿机号
        • ⼿机号⾮1开头
        • ⼯号为空
        • ⼯号包含字⺟、特殊字符
        • 21位⼯号
        • 1位⼯号
        • 6位⼯号
        • ⼊职时间格式不正确
        • 聘⽤形式取值 3
        • 聘⽤形式取值含有 特殊字符、字⺟
        • 部⻔ id 不存在
        • 部⻔ id 含有 特殊字符、字⺟
      • 参数异常
        • 多参:多 abc
        • 少参:少 username
        • ⽆参:缺少所有必须项
        • 错误参数:workNumber 参数名错,为 abc

image-20231222182301737

查询

image-20231209131300944

  • 使⽤ 资源路径: /api/sys/user/:target 包含 :target 为 ”路径参数“。 ⽤来指代 待查询的 员⼯id
  • 设计测试点:
    • 员⼯id存在
    • 员⼯id不存在
    • 没有指定员⼯查询

image-20231222183517770

image-20231209131328020

image-20231209131339208

image-20231209131349418

  • 登录系统后,对员工进行增删改查的操作

image-20231209131508190