接口测试初认知

2023-10-27

接口测试初认知

一、概念

根据分层自动化测试中的定义,最底层由开发人员编写的单元测试保证代码质量,最上层由功能测试人员手工+UI自动化进行大量的自动化功能测试保证功能的可用,则中间层的接口测试是什么作用呢?接下里我们就学习接口测试。
请添加图片描述
那说到接口测试,那什么是接口呢?

语法接口:编程语言语法上定义的接口,具体到程序中的一般就是提供了输入输出的类、方法或函数。对于接口的测试,一般需要使用与开发程序接口相同的编程语言,通过不同的传入不同的参数,来验证程序接口的功能。

协议接口:一般指系统通过不同的协议来提供的接口,例如http/soap协议等。这种类型接口对底层代码做了封装,会写好接口路径和接口方法名的映射,然后前端通过接口路径来调用方法。我们接口测试,就是测试协议接口。

二、接口测试的意义

1、更早的发现问题

测试左移提倡测试应该更早的介入到项目开发中,因为越早的发现bug,修复的成本越低。然而功能测试必须要等到系统提供可测试的界面才能对系统进行测试。系统接口是上层功能的基础,接口测试可以更早更低成本的发现和解决问题。

而且,在我们实际工作经历中,你会发现,由于时间、资源和其他原因,开发人员大部分是不会编写单元测试,所以接口测试就更为重要。

2、缩短产品研发周期

对于产品研发周期来说,如果将所有的测试工作都集中在功能测试阶段,那么测试的问题和修复周期就会变长。因为测试可以更早的介入产品开发中,所以可以有效的控制功能阶段的bug数量,从而有效的缩短产品开发周期。

结合实际来说,有一个查询功能,后端接口已经做好了,但是前端页面还没设计好。如果是功能测试,那你只能是等待前端页面做好才能进行。如果有接口测试,就直接通过输入参数进行接口测试。更早介入测试,再等前端页面开发,能减少功能测试阶段的bug,就可以缩短产品开发周期。我认为,接口测试可以看成是简单的部分并行工作流程。

3、发现更底层的问题:

系统的有些底层逻辑是在UI功能测试中不太容易触发的,那么这些逻辑可能会存在问题,接口测试可以更容易更全面的测试到这些底层逻辑。

eg:在工作中,有一个优惠检验功能,分别由两个参数控制,一个A是控制是否使用,一个B是具体的优惠详情。在正常的功能测试中,前端传入的参数是正确且对应关系是一致。但是异常情况下,前端由于某种原因,缓存清理B出现问题,还是保留了B,但是A是0,后端的校验机制竟然通过了,并且使用了B优惠。这种情况就是底层逻辑的校验没有做好,并且这种异常情况,功能测试下是无法去手动实现异常场景的。

4、检查服务器的异常处理能力

我们通常将前端的验证成为弱验证,因为它很容易被绕过,这个时候如果只站在功能的层面进行测试,进很难发现一些安全的问题。不以功能为入口的接口测试就会容易的验证这些异常情况。

5、个人经历

在工作中,公司某一项目:平台的代码是二期的,但是客户端是一期的。实现的支付接口,平台在二期有改动,使用二期客户端没有问题。但是在只上平台代码,客户端还是一期的版本,就会出现一期中控调用二期平台的场景,接口没有向下兼容,所以测试左移是很重要的。

三、接口测试用例设计

接口测试用例设计有三个模块:前端测试、后端测试、接口文档

  • 前端测试,进行响应数据的改写,验证不同的响应下前端的展示效果

  • 后端测试,依据“输入–处理–输出”这样的模式,检查输出结果跟期望是否一致

  • 接口文档,需要检查实际开发和接口文档是否统一

测试用例设计思路

从输入参数进行考虑设计
优先级-针对所有的接口:
  • 1、暴露给其他系统、第三方调用的接口

  • 2、系统内部调用的核心功能接口

  • 3、系统内部调用的非核心功能接口

优先级-针对单个接口
  • 1、正向测试用例优先,逆向测试用例次之(一般情况)
  • 2、是否需要满足前提条件(token)> 是否携带默认值参数 > 参数是否必填 > 参数之间是否存在关联 > 参数数据类型限制校验 > 参数数据类型自身的数据范围值限制校验
用例设计分析

从接口后端业务逻辑出发,设计接口测试用例需要考虑以下几个方面:

1、是否满足前提条件

  • 有些接口是需要满足一定条件,才可以成功获取数据。最常见的就是需要用户登录信息的接口(token)

  • 逆向用例:设计不满足前置条件的用例

2、是否携带默认值参数

  • 正向测试用例:

    存在默认值的参数都不填写、不传参,必填参数都填写正确并且存在正确的常规值

3、业务逻辑、功能需求

  • 这个环节需要根据具体的业务需求,结合接口定义文档,可设计出多条正向用例和逆向用例

4、参数是否必填

  • 针对每个必填参数,设计一条或多条参数值为空的逆向测试用例

5、参数之间是否有关联

  • 可根据参数之间的相互关联关系设计一条或多条用例

6、参数数据类型限制

  • 针对每个参数类型设计与定义的类型不符的逆向测试用例

7、参数自身的数据范围值限制校验

  • 针对所有的参数,设计每个参数在数据范围内为最大或最小的正向测试用例

总结:如果以上几个方面考虑全面,基本可以覆盖三个点:

a、主流程测试用例:正常的主流程业务需求校验

b、分支流程测试用例:正常的分支流程需求校验

c、异常流程测试用例:异常业务场景的容错校验

从输出参数进行考虑设计

1、输出结构是否与接口文档定义的一致

2、输出的各个字段类型是否与接口文档定义的一致

3、输出的各个字段的值是否符合逻辑且值正确

测试方式
手工测试

手工测试就是借助浏览器或部分测试工具(postman、jemter等)手动执行测试用例的过程。针对新开发接口,建议首先进行全面的手工测试后再将部分可重复执行用例加入自动化测试。开源的:postman、jmeter、meterSphere、SoapUI等,商业的有LoadRunner等

自动化测试

接口测试相对容易实现自动化,且相对UI自动化也比较稳定,可以减少人工回归测试人力成本与时间,缩短测试周期,是支持后端快速发版需求,达到低成本高收益的根源

一个好的接口自动化测试框架应该涵盖以下几点:

a、流程方面:在回归阶段加强接口各种场景的覆盖度,并逐步向系统测试,冒烟测试阶段延伸,最终达到全流程自动化

a、结果展示:更加丰富的结果展示、趋势分析,质量统计和分析等

c、问题定位:报错信息。日志更精准,方便问题复现与定位

d、结果校验:加强自动化校验能力,如数据库信息校验

四、接口测试:HTTP协议

HTTP协议

声明:本文章的内容来源有:TestHome的《接口白皮书》和虫师的《Web接口开发与自动化测试-基于Python语言》

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

接口测试初认知 的相关文章

随机推荐

  • 神经网络学习——图像篡改

    记录 这是课堂上做的一个关于图像篡改识别的题目 因为前后花的时间比较多 虽然最后实现的效果也不怎么行 但是这个过程踩了很多坑 这里记录一下 文章目录 记录 前提 题目分析 网络搭建 依赖包 数据读取处理 网络搭建 训练参数 预测函数 模型保
  • linux——read和write函数实现cp、用户级缓冲预读入缓冲的简单认识

    用read和write实现cp 1 注意头文件 2 fd1是源文件 传入参数中的第一个 fd2是目标文件 传入参数中的第二个 要写入的文件至少可写 如果没有当前文件就创建文件并设置权限 如果已经有文件就截断为0再重新写 3 定义一个缓冲区
  • vue2和vue3的响应式原理

    vue2和vue3的响应式原理 vue2 的响应式 vue3 的响应式 vue2 的响应式 使用 Object 构造函数上 defineProperty 实现 存在的问题 对象 新增的属性没有响应式 数组 部分操作没有响应式 解决办法 1
  • [推荐系统] 1. 深度学习与推荐系统

    文章目录 1 推荐系统 1 1 推荐系统的作用和意义 1 2 推荐系统架构 1 2 1 推荐系统的逻辑架构 1 2 2 推荐系统的技术架构 2 前置知识 2 1 传统推荐模型的演化 2 2 协同过滤 2 2 1 概述 2 2 2 用户相似度
  • uniapp nfc读写

    1 先添加权限
  • MySQL中show语法

    1 show tables或show tables from database name 显示当前数据库中所有表的名称 2 show databases 显示mysql中所有数据库的名称 3 show columns from table
  • Git Rebase与Merge

    在 Git 中整合来自不同分支的修改主要有两种方法 merge 以及 rebase 两种观点 有一种观点认为 仓库的提交历史即是记录实际发生过什么 它是针对历史的文档 本身就有价值 不能乱改 从这个角度看来 改变提交历史是一种亵渎 你使用
  • [Android]系统启动时序

    最近公司的群里面有大佬分享了一张自己总结的系统启动时序 觉得画的非常清晰简练 因此在这里分享一下
  • I - Intense Bit Wheel (二进制,bitset)

    SDUT 2022 Summer Individual Contest 2 for 21 Virtual Judge There is a new intense giant wheel in UNAL town in UNAL town
  • uniapp整包apk更新下载后安装完删除下载的apk,避免占用app内存

    一 内存大 app版本更新后内存变的好大 更新多几次版本更大 小编便发现是每次更新后都把下载下来的apk大小增加到app里面去了 那么我们如何版本更新完之后删除下载下来的apk文件呢 避免占用内存 二 解决方案 使用html5 功能IO模块
  • NLP预训练模型-GPT-3

    NLP预训练模型 系列文章 1 BERT 2 GPT 3 GPT 2 4 GPT 3 目录 NLP预训练模型系列文章 文章目录 前言 1 Abstract 2 Introduction 3 Approach 3 1 模型和架构 3 2 训练
  • oracle11g 导出表报EXP-00011:table不存在。

    转自 https blog csdn net mingzaiwang article details 52608991 depth 1 utm source distribute pc relevant none task utm sour
  • 8种提升程序猿编程能力的方法+编程思维四个核心:分解、抽象、模式识别和算法

    8种提升程序猿编程能力的方法 对于程序员来说 提高自己的编程能力 算是给自己定的职业发展目标之一 不过定一个成为编程大神的目标很容易 具体做起来可能就不是一件简单的事了 首先 既然决定 我要变得更好 得先知道 更好 是什么样子的 另外 不能
  • C++ 单链表节点交换

    这里提供两种方法 一种是只交换对应的数据 另一种是通过更改指针来交换节点 而更改指针中又可以分为新建节点与不新建节点的方法 1 不更改指针 这个没啥好说的 直接将对应的data交换即可 这里的a c节点都为被交换节点的上一个节点 因为不更改
  • el-form之表单校验自动定位到报错位置

    1 背景 表单校验大多数的表单都会用到 一般情况下只是提示当前哪些项校验不通过 但是如果表单比较需要用户自己去找是哪项校验不通过 这样的用户体验不太好 如果能自动定位到当前校验不通过的表单项体验会更好一些 这里是以elementui 的 e
  • 主线剧情-番外02-设备树详解

    设备树详解 本文 续接 主线剧情03 NXP i MX 系列 u boot 移植基础详解 一文中移植过程小节中有关设备树的内容 编辑整理 By Staok 如有错误恭谢指出 侵删 CC BY NC SA 4 0 注意 本文适合学习设备树的一
  • Spring参数校验和全局异常处理

    目录 一 前言 二 Validation 1 JSR 303 2 Spring Validation 3 Validated和 Valid的区别 三 全局异常处理 1 为何要处理异常 2 RestControllerAdvice 3 返回自
  • Vue项目启动报错:error:cannot find module xxx

    原因 无法找到项目依赖的某个模块 解决办法 1 删掉存放模块的文件夹node module 2 执行清除缓存命令 npm cache clean 如果报错 使用强制清除npm cache clean force 如果还报错 删除packag
  • Unity滑入Button/按键/UI范围检测

    效果展示 鼠标滑入按键的点击范围后 对应的游戏背景会发生改变 将下面的脚本挂在需要检测的UI上即可 记得引用必要的操作 using System Collections using System Collections Generic us
  • 接口测试初认知

    接口测试初认知 一 概念 根据分层自动化测试中的定义 最底层由开发人员编写的单元测试保证代码质量 最上层由功能测试人员手工 UI自动化进行大量的自动化功能测试保证功能的可用 则中间层的接口测试是什么作用呢 接下里我们就学习接口测试 那说到接