jck28 - 小柒 - 接口测试

一,简介

1,概念

  • 接口:不同的系统之间相互连接的部分,是一个传递数据的通道
  • 接口测试:检查数据的交换、传递和控制管理过程

2,常见的接口协议

2.1,网络模型图

2.2,常见的接口协议

2.3, RPC 协议

  • RPC(Remote Procedure Call)
  • 以本地代码调用的方式实现远程执行
  • 主要用于公司内部的服务调用
  • 优点:传输效率更高、性能损耗更低、自带负载均衡策略、更好的服务治理能力
  • 常见的 RPC 协议
    • Dubbo:Java 基础之上的高性能 RPC 协议
    • gRPC:高性能通用 RPC 框架,基于 Protocol Buffers。PB 是一个语言中立、平台中立的数据序列化框架
    • Thrift:与 gRPC 类似的多语言 RPC 框架

2.4, HTTP协议组成

  • 请求

    • 请求行:method url protocol
      • URI,统一资源标识符,用来唯一的标识一个资源。
      • URL,统一资源定位符,它是一种具体的 URI
      • URL 结构:https://www.baidu.com/s?wd=霍格沃兹&rsv_spt=1
        1. 协议:http
        2. 域名:www.baidu.com
        3. 端口:跟在域名后面,域名和端口之间使用“:”作为分隔符,非必须,如果省略端口部分将采用默认端口
        4. 路径:/s
        5. 请求参数:wd=霍格沃兹&rsv_spt=**1
      • 请求方法:GET、POST、PUT、DELETE、HEAD
      • 请求头: Host Cookie User-Agent
      • 请求参数 query
      • 请求体:JSON XML FORM
  • 响应:

    • 响应状态行
    • 响应头
    • 响应体
  • HTTP 响应状态码

    • 1xx 临时响应,表示通知信息,请求收到了或正在进行处理
    • 2xx 表示成功,接受或知道了
      • 200 成功
    • 3xx 表示重定向,要完成请求还必须才去进一步的行动
      • 301 永久移动
      • 302 临时移动
    • 4xx 表示客户端请求错误
      • 403 未授权
      • 404 未找到
    • 5xx 表示服务端错误
      • 500 服务器内部错误
      • 503 服务不可用

2.5, RESTful 架构

  • Restful:Representational State Transfer
  • 借助于 HTTP 协议的基本请求方法代表资源的状态切换
    • GET:获取资源
    • POST:新增或者更新
    • PUT:更新资源
    • DELETE:删除资源

3,接口用例设计

3.1,设计思路

3.2,用例要素

  • 用例名称
  • 接口地址
  • 请求方式
  • 前置条件
  • 请求头部
  • 请求参数
  • 响应状态码
  • 预期响应结果

二,postman工具使用

2.1 断言

断言内容选择:点击test选项,右边会出现可供断言的内容选项
部分断言内容:

  • 验证响应状态码
  • 验证响应体中是否包含某个字符串
  • 验证 JSON 中的某个值是否等于预期的值
  • 验证响应体是否与某个字符串完全相同
  • 验证响应头信息中的 Content-Type 是否存在
  • 验证响应时间是否小于某个值
// Status Code:Code is 200
// 验证响应状态码
pm.test("响应状态码为 200", function () {
    pm.response.to.have.status(200);
});

// Response Body:contains string 
// 验证响应体中是否包含某个字符串
pm.test("响应体中包含预期的字符串", function () {
    pm.expect(pm.response.text()).to.include("doggie");
});

// Response Body:JSON value check
// 验证 JSON 中的某个值是否等于预期的值
pm.test("宠物名称为 doggie", function () {
    var jsonData = pm.response.json();
    pm.expect(jsonData[0].name).to.eql("doggie");
});

// Response Body:Is equal to a string
// 验证响应体是否与某个字符串完全相同
pm.test("响应体正确", function () {
    pm.response.to.have.body("response_body_string");
});

// Response Body:Content-Type header check
// 验证响应头信息中的 Content-Type 是否存在
pm.test("Content-Type is present", function () {
    pm.response.to.have.header("Content-Type");
});

// Response time is less than 200ms
// 验证响应时间是否小于某个值
pm.test("Response time is less than 200ms", function () {
    pm.expect(pm.response.responseTime).to.be.below(200);
});

2.2 变量配置

  • Postman 中变量的种类与作用域

    • Data:在测试集中上传的数据
    • Environment:环境范围
    • Collection:集合范围
    • Global:全局范围
    • Local:在脚本中设置的变量
  • 变量定义

    • 全局变量:Environments → Globals
    • 测试集变量:测试集页面 → Variables
    • 环境变量:Environments → +
  • 变量的使用

    • 请求 URL, Params 参数或 Body 表格或JSON/XML 文本中通过 {{变量名}} 使用
    • 在 Pre-request Script 和 Tests 脚本中使用封装好的语句获取或者设置对应变量
// 获取全局变量
var status = pm.globals.get("status");
// 输入到控制台
console.log(status)

// 获取测试集变量
var petId = pm.collectionVariables.get("petId");
// 获取环境变量
var url = pm.environment.get("baseURL");

// 设置全局变量
pm.globals.set("status", "sold");
// 设置测试集变量
pm.collectionVariables.set("petId", 0);
// 设置环境变量
pm.environment.set("baseURL", "");
  • 变量的优先级
    • 优先级从高至低为:Data → Enviroment → Collection → Global → Local

三,抓包工具

3.1.1 Charles工具

  • 基本介绍

    • 支持 SSL 代理
    • 支持流量控制
    • 支持重发网络请求,方便后端调试
    • 支持修改网络请求参数
    • 支持网络请求的截获并动态修改
    • 可以自动将 json 或 xml 数据格式化,方便查看
  • 安装

  • 电脑证书配置

image

  • 设置SSL

  • 移动端代理配置

    1. 设备和电脑处于同一 WIFI(模拟器不需要配置)
    2. 移动端网络设置
      • 服务器 ip 地址
      • 设置端口
    3. 安装证书
      • 系统浏览器访问 chls.pro/ssl
      • iOS:描述文件中安装证书
      • iOS:信任证书
    4. 演示使用 mumu 模拟器(Android 6)

  • 注意事项

    • Android 6 以上的系统 app 默认不信任抓包证书
      • 需要开发修改代码
      • 大部分测试 app 安装包默认打开状态
    • iPhone 10 系统以上需要在 设置->通用->关于本机->证书信任设置 中打开信任开关
  • 弱网测试

    • 按照移动的特性,一般应用低于 3G、弱信号的 Wifi 可以划分为弱网
    • 弱网测试是健壮性测试的重要部分,对移动端测试必不可少
    • 弱网测试主要进行弱网状态下的功能测试,同时关注用户体验
  • 弱网测试涉及的改动

    • 带宽 - BandWidth (下载速度)
    • 丢包
    • 延迟

image

3.1.2 Fiddler工具

  • 工具介绍

    • 官网:https://www.telerik.com/fiddler/fiddler-classic
    • Fiddler 是位于客户端和服务器端的 HTTP 代理
    • 也是目前最常用的 HTTP 抓包工具之一
    • 功能
      • 监控流量
      • 支持解密 HTTPS
      • 查看分析接口数据
      • 修改请求的数据
      • 修改服务器返回的数据
      • 设置断点
  • 抓取 HTTP 请求

    • 设置:Tools → Options → Connections
    • 确认抓包端口:默认为 8888
    • 默认勾选 Act as system proxy on startup
  • 抓取 HTTPS 请求

    • Tools → Fiddler Options → HTTPS
    • 勾选 Decrypt HTTPS Traffic
    • 弹出安装证书弹窗 → 选择【Yes】-> 点击 【Yes】安装证书
    • 点击 Actions → Open Windows Certificate Manager 查看证书

  • 抓取移动端请求
    • Tools → Fiddler Options → Connections
    • 勾选 Allow remote computers to connect
    • 移动端与电脑处于同一网络下
    • 移动端配置网络代理
      • 代理服务器主机:电脑IP
      • 代理服务器端口:8888
    • 浏览器输入 http://电脑ip:8888 下载 Fiddler 证书进行安装

  • 查看接口信息
    • Statistic:性能与统计数据
    • Inspectors:请求和响应数据
    • Filter:制定过滤规则
    • Composer:编辑发出请求

  • AutoResponder

    • 拦截某一请求,并重定向到本地的资源,或者使用 Fiddler 的内置响应
    • 用于调试服务器端代码而无需修改服务器端的代码和配置
      image
  • 断点

    • 菜单栏 → Rules → Automatic Breakpoints ->选择断点方式
    • 状态栏点击
      • 请求前断点:向上箭头
      • 响应后断点:向下箭头
    • 命令行下输入
      • 请求前断点:bpu xxx
      • 响应后断点:bpafter xxx

  • 弱网
    • 菜单栏 → Rules → Performance → Simulate Modem Speeds
    • 修改网络配置参数