软件接口测试

一:接口

1.概念

  • 是指系统或组件之间的交互点,通过这些交互点可以实现数据的交互。(数据交互的通道)

image-20221218112934885

2.接口的类型

  • 按协议划分:http、tcp、IP
  • 按语言划分:C++、java、php。。。
  • 按范围划分:
    • 系统之间:
      • 内部系统与内部系统之间
      • 内部系统与外部系统之间
    • 程序之间
      • 方法与方法之间
      • 函数与函数之间
      • 模块与模块之间

二:接口测试

1.概念

  • 接口测试就是,对系统或组件之间的接口进行测试。校验传递的数据正确性和逻辑依赖关系的正确性

2.原理

  • 接口测试,主要针对的测试目标 —— 服务器
  • 怎么测?
    • 模拟客户端向服务器发送请求。
  • 用什么测?
    • 工具:fiddler、postman、jemter
    • 代码:python + UnitTest框架 + Requests框架
  • 测什么?
    • 测试服务器针对客户端请求,回发的响应数据是否与预期结果一致!

3.特点

  • 符合质量控制前移的理念
  • 可以发现一些页面操作发现不了的问题
  • 接口测试低成本高效益
  • 接口测试是从用户的角度对系统进行检测

三:HTTP协议

1.概念

  • 超文本传输协议,是一个基于请求与响应模式的、应用层的协议,也是互联网上应用最为广泛的一种网络协议。

2.HTTP协议的特点

  1. 支持客户端/服务器模式
  2. 简单快速
  3. 灵活
  4. 无连接
  5. 无状态

3.URL格式

  • 概念:统一资源定位符,是互联网上标准资源的地址。HTTP使用URL来建立连接和传输数据。
  • 作用:在网络环境中,唯一的定义一个数据资源。

image-20221218150102928

  • 协议:http。规定数据传输的方式
  • 域名(IP):在网络环境中找到主机。——用 😕/ 与协议隔分
  • 端口(port):在网络主机上,标识一个进程(应用程序)——用 : 与域名
  • 资源路径:标识网络资源(文件、图片、音视频、变量。。。)——用 / 与端口隔分
  • 查询参数:传递给资源路径对应的数据。——用 ? 与资源路径隔分。参数之间用 & 隔分

四:HTTP请求

  • 作用:
    • 客户端(app、浏览器),发送请求给服务器时,使用的协议——http请求协议
    • 规定发送给服务器的数据传输的语法格式

1.请求行

  • http请求方法:
    • GET:查询
    • POST:添加(常用在登录)
    • PUT:修改
    • DELETE:删除

2.请求头

  • 语法格式:k : v
  • User-Agent:产生请求的浏览器类型
  • Content-Type:请求体的数据类型
    • application/json:JSON数据格式
    • application/x-www-form-urlencoded:form表单数据

3.请求体

  • GET、DELETE 方法没有请求体
  • PUT、POST 方法有请求体
  • 数据值的组织形式,受 Content-Type 的值影响

五:HTTP响应

作用

  • 服务器端,针对客户端发送的 http 请求,回发响应数据。 ——http应答!
  • 规定回发给客服端的数据组织格式

1.响应行(状态行)

  • 版本协议 状态码 状态描述
    • 1XX:指示信息–表示请求已接收,继续处理
    • 2XX:成功–表示请求已被成功接收、理解、接受
    • 3XX:重定向–要完成请求必须进行更进一步的操作
    • 4XX:客户端错误–请求有语法错误或请求无法实现
    • 5XX:服务端错误–服务器未能实现合法的请求

2.响应头:

  • 语法格式:k : v

  • Content-Type:描述响应体中数据类型。

3.响应体:

  • 绝大多数不为空(请求成功:回发数据,失败:回发错误信息)

  • 数据类型受 Content-Type值影响

六:接口测试流程

1.需求分析

  • 主要依据需求文档

2.接口文档解析

  • 一般是由开发人员编写接口文档(API文档)

3.设计测试用例

4.执行用例

  • 使用接口测试工具实现
  • 通过编写代码实现

5.接口缺陷管理与跟踪

6.生成测试报告

7.接口自动化持续集成(可选)

七:接口文档(结构)

  • 基本信息:
    • 资源路径(协议和域名在“系统信息中”)
    • 请求方法
    • 接口描述
  • 请求参数:
    • 请求头:
      • Content-Type:描述请求体的数据类型
    • 请求体:
      • 实现该接口使用的数据及对应类型
  • 返回数据:
    • 成功:状态码 200
    • 失败:错误码 (自定义状态码)
      • 码值
      • 描述信息

八:接口测试分类

1.功能测试

  • 单接口测试

    • 手工测试中的单个业务模块,一般对应一个接口。

      • 登录业务 ——> 登录接口

      • 加入购物车业务 ——> 加入购物车接口

      • 订单业务 ——> 订单接口

      • 支付业务 ——> 支付接口

      • 借助工具、代码。绕开前端界面,组织接口所需要的数据,展开接口测试。

  • 业务场景功能:

    • 按照用户实际 使用场景 ,梳理 接口业务 场景。
    • 组织业务场景时,一般只需做 正向 测试即可(与手工一致),
    • 一般建议用最少的用例覆盖最多的业务场景
      • 登录 —— 搜索商品 —— 加购物车 —— 下单 —— 支付 —— 评价

2.性能测试

  • 响应时长
  • 吞吐量
  • 并发数量
  • 服务器资源利用率

3.安全测试

  • 攻击安全:由专业安全测试工程师完成。
  • 业务安全:
    • 敏感数据是否加密
    • SQL注入

九:接口测试设计方法与思路

1.数值

  • 与功能测试数值一致

2.参数

1.正向参数:

  • 必选参数:所有的 必选(必填)都包含。
  • 组合参数:所有的 必选 + 任意一个或多个可选参数
  • 全部参数:所有的 必选 + 所有的可选参数

2.逆向参数:

  • 多参:多出一个或多个 非 必选参数(可以任意指定)
  • 少参:缺少一个或多个必选参数。
  • 无参:没有必选参数。
  • 错误参数:参数名输入错误。

十:单接口测试用例

接口测试用例文档要素:

  • 用例编号、用例标题、模块/项目、优先级、前置条件、请求方法、URL、请求头、请求体(请求数据)、预期结果

image-20221222125310217

十一:postman断言

1.断言响应状态码

Status code is 200

// Status code is 200 提示信息
// function 判断状态码是否是200
pm.test("Status code is 200", function () {
    pm.response.to.have.status(200);
});

2.判断响应体是否包含某个字符串

Response body : Contains string

pm.test("Body matches string", function () {
    pm.expect(pm.response.text()).to.include
    // string_you_want_to_search: 所包含的内容
    ("string_you_want_to_search");
});

3.断言响应体是否等于某个字符串(对象)

Response body : Is equal to a string

// 例
// json数据
{
    "success": true,
    "code": 10000,
    "message": "操作成功!",
    "data": "d66ea2d3-c794-4ab4-80e4-1717531b4878"
}
// 断言判断数据
pm.test("Body is correct", function () {
    pm.response.to.have.body({
    "success": true,
    "code": 10000,
    "message": "操作成功!",
    "data": "d66ea2d3-c794-4ab4-80e4-1717531b4878"
});
});

4.断言json数据

Response body : JSON value check

// 断言json响应结果
/*pm.test("Your test name", function () {
    var jsonData = pm.response.json();
    pm.expect(jsonData.value).to.eql(100);
});*/
// json数据
{
    "success": true,
    "code": 10000,
    "message": "操作成功!",
    "data": "d66ea2d3-c794-4ab4-80e4-1717531b4878"
}
// json断言判断
pm.test("Your test name", function () {
    var jsonData = pm.response.json();
    pm.expect(jsonData.success).to.eql(true);
    pm.expect(jsonData.code).to.eql(10000);
    pm.expect(jsonData.message).to.eql('操作成功!');
});

5.断言响应头

Response headers :Content-Type header check

pm.test("Content-Type is present", function () {
    pm.response.to.have.header("Content-Type",
    "application/json;charset=UTF-8");
});

十二:变量

1.设置变量

  • 全局变量
    • 手动设置
    • 代码设置:pm.globals.set(“var_name”,value);
  • 环境变量
    • 手动设置
    • 代码设置:pm.environment.set(“var_name”,value);

2.获取变量值

  • 全局变量值
    • 请求参数中获取:{{var_name}}
    • 代码中获取:var value = pm.globals.get(“var_name”);
  • 环境变量
    • 请求参数中获取:{{var_name}}
    • 代码中获取:var value = pm.environment.get(“var_name”);

十三:postman工作原理图

image-20230213095746988

十四:postman测试报告

  • 执行测试
# 1.批量执行测试用例集
# 2.导出Export用例集
# 3.终端执行命令
newman run 测试脚本文件 -e 环境变量文件 -d 测试数据文件 -r html --reporter-html-export report.html
newman run 接口数据关联.postman_collection.json -r html --reporter-html-export report.html

十五:参数化

1.CSV参数

image-20230213111948756

2.Json参数

image-20230213111927572

十六:提取和使用登录令牌

  • Json数据
{
    "success": true,
    "code": 10000,
    "message": "操作成功!",
    "data": "b426880c-e94b-47d9-a0d0-414aa80c1924"
}
  • 环境变量存储
// 拼接 data 的值,添加 bearer 和 空格。组成合法令牌

// 获取响应体
var jsonData = pm.response.json()

// 提取 data 的值
var tmp_token = jsonData.data

// 拼接 Bearer 和 空格 到 data 值的前面
var tmp = "Bearer" + " " + tmp_token
pm.environment.set("env_token",tmp)

1.环境变量的配置

  • 考虑到登录和员工管理的请求URL部分相似,所以配置到环境变量中
    • image-20230214215655175

2.登录令牌的提取

  • 登录成功后会分配一个 token 令牌,便于后续判断身份,所以将 token 设为环境变量

    • // 目的:将登录返回的 data 值拼接成 token:Berarer  data值
      
      // 1.获取登录返回响应值
      var jsonData = pm.response.json()
      // 2.提取响应值里的 data 值
      var tmp_token = jsonData.data
      // 3.进行拼接
      var tmp = "Bearer" + " " + tmp_token
      // 4.存到环境变量中
      pm.environment.set("env_token",tmp)
      

3.令牌的使用

  • 在请求URL的时候一起将令牌的值传入
    • image-20230214222947545

    • // 目的:将登录返回的 data 值拼接成 token:Berarer  data值
      
      // 1.获取登录返回响应值
      var jsonData = pm.response.json()
      // 2.提取响应值里的 data 值
      var tmp_token = jsonData.data
      // 3.进行拼接
      var tmp = "Bearer" + " " + tmp_token
      // 4.存到环境变量中
      pm.environment.set("env_token",tmp)
      

3.令牌的使用

  • 在请求URL的时候一起将令牌的值传入
    • 在这里插入图片描述

=====================待续…

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值