从零开始的软件测试学习之旅(七)接口测试三要素及案例

本文主要是介绍从零开始的软件测试学习之旅(七)接口测试三要素及案例,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

接口测试三要素及案例

    • 接口测试介绍
    • 接口预定义
    • 接口测试的主要作用
    • 测试接口流程如下
    • 接口测试三要素
    • 接口测试分类
    • RESTful架构风格
    • RESTful架构三要素
      • 要素一
      • 要素二
      • 要素三
    • RESTful架构风格实现
    • 案例
    • 复习复盘

接口测试介绍

接口介绍
不同主体之间进行通信的通道,它应具有一套规范/标准 (分类 硬件接口:USB接口 网线接口; 软件接口)

软件接口

1.软件系统中,前端和后端是两大重要组成部分

2.前端主要用于与用户交互,用户通过前端可以提交数据并查看响应的结果

3.后端主要处理用户提交的数据产生相应

比如:百度搜索,思考前后端分工前后端通过某个通道完成数据交互 搜索12306时,https://www.baidu.com/s?wd=12306

访问路径包括/s,建立通信管道 参数包括wd=12306符合标准

采用接口的好处
(实现了前后端分离)为了数据交互同时,
1.前后端都可以使用自己熟悉的技术
2.缩短了研发周期
3.保证代码安全
4.拓展性更好

接口预定义

落实到文档,该文档称之为API文档
前后端编码时,1.需要参考API文档/
2.前人总结的相关规范 如:RESTful架构风格

举例:
编写登录接口的API文档
描述:登录接口
URL:http://www.xxx.com/login
请求方式:POST
提交数据:账号 usename
密码 password
响应结果: 成功true 失败 false
前端实现:
在这里插入图片描述

后端实现:

1.获得用户提交的数据 2.查询结果相应数据(true/false)

接口测试的主要作用

主要作用 1.更好的辅助定位bug(前/后端) 2.发现程序中的安全隐患 3.提高测试效率

测试接口流程如下

1.绕过前端 2.通过URL定位接口资源 3.提交测试数据 4.判断响应是否满足预期

接口测试三要素

  1. 定位接口资源 2.提交测试资源 3.判断相应资源

接口测试分类

1.B/S测试(web形式的接口测试): 1.服务器接口测试->自实现接口 2.外部接口测试 如支付宝接口,微信测试

2.C/S模块之间的接口测试

RESTful架构风格

为什么要学习RESTful架构风格?

避免千人千面, 使API文档风格统一

RESTful架构是一种接口设计架构, 约束了接口实现的规范

架构的作用:提高了文档的可读性

RESTful架构的设计在API文档中关于接口的描述也是围绕三要素展开的:

描述: 实现用户的登录功能
流程:
1、登录表单的数据提交到服务器: http://www.xxx.com/login, 请求方式 POST
2、提交的数据格式: username=xxxx&password=yyyy
3、响应结果:
200 {“msg”:“登录成功”}
200 {“msg”:“登录失败”}

注意: 一般响应结果的msg中, 提示信息很可能是英文

RESTful架构三要素

要素一

组成

  • URL(统一资源定位符), 例如: http://www.baidu.com/s
    • 协议: 常见的有 http/ https/ ftp/ ftps
    • IP: 服务器 IP 地址
    • 端口: http默认端口一般是80, https默认端口一般是443
    • 路径: 一个资源路径映射一个接口实现
  • 请求方式: 常见GET/POST/PUT/DELETE 分别对应 查/增/改/删 四种操作

get 和 post 的区别

  • 提交方式不同
    • get 提交的数据显示在地址栏
    • post 是隐式提交, 更安全
  • 可提交的数据量不同
    • get 提交的数据量有限制
    • post 无限制
  • 执行效率不同
    • get 的效率比 post 高

要素二

两种常见的数据提交格式

  • 键值对格式
  • JSON格式(类似于 python 中的字典)

在这里插入图片描述

一般情况下, 使用 get 方式进行提交时, 使用的是键值对格式 使用 post 方式进行提交时, 使用的是JSON格式

要素三

状态码

  • 1xx 请求正常, 但是无响应, 只在实验状态下使用
  • 2xx 请求正常, 响应正常, 如: 200 201 204…
  • 3xx 以其他方式获取响应, 如: 302 重定向 304 取本地缓存
  • 4xx 浏览器端异常, 如: 404 资源路径有误
  • 5xx 服务器端异常, 如: 500 服务器运行异常

响应体

常见的接口的响应体有两种类型

  • 响应 html 文档, 例如: 访问百度搜索接口
  • 响应 JSON 格式数据

RESTful架构风格实现

在这里插入图片描述

RESTful 只是一种规则, 并不是标准, 换言之, 不是硬性约束

案例

一.查询
1.1 学员-查询所有
请求方法:GET
请求地址:http://127.0.0.1:8000/api/students
1.2 学员-查询指定单个
请求方法:GET
请求地址:http://127.0.0.1:8000/api/students?s_id=S001
(注: s_id 为参数名称; S001,S005,S088 为学员ID;)
1.3 学员-查询指定多个
请求方法:GET
请求地址:http://127.0.0.1:8000/api/students?s_id=S001,S005,S088
(注: s_id 为参数名称; S001,S005,S088 为学员ID;)
1.4 学员-组合查询
请求方法:GET
请求地址:http://127.0.0.1:8000/api/students?chengji=A&banji=B01
(注: chengji:成绩; banji:班级;)

二.新增
2.1 学员-新增
1) 请求方法:POST
2) 请求地址:http://127.0.0.1:8000/api/newstudents/
3) 请求JSON报文:
4) 调用传入的json串如下(可新增多条,之间用,隔开):

  {"data": [{"s_id":"S009","s_name":"zhangsanfeng","banji":"B01","chengji":"A"}]}
  1. 新增成功返回报文:
   {"already_exist": {"results": [],"count": 0},"create_success": {"results": [{"s_id":"S009","s_name":"zhangsanfeng","banji":"B01","chengji":"A"}],"count": 1}}
	6) 新增失败id已存在-返回报文:{"already_exist": {"results": [{"s_id":"S009","s_name":"zhangsan","banji":"B02","chengji":"B"}],"count": 1},"create_success": {"results": [],"count": 0}}7) 新增失败json格式错误:
{"status_code": 400,"detail": "请求体参数格式错误。"}

三.更新
3.1 学员-更新
1). 请求方法:PUT
2). 请求地址:http://127.0.0.1:8000/api/updatestudents/S009/
(注:1:为学院ID)
3). 请求JOSN报文:

  {"data": [{"s_id":"S009","s_name":"zhangsanfeng","banji":"B01","chengji":"A"}]}4). 修改成功返回:{"s_id":"S009","s_name":"zhangsanfeng","banji":"B01","chengji":"A"}

四.删除
4.1 学员-删除单个
请求方法:DELETE
请求地址:http://127.0.0.1:8000/api/deletestudents/S003/
(注:S003为学员ID)

s_id":"S009","s_name":"zhangsanfeng","banji":"B01","chengji":"A"}

复习复盘

1.接口的概念是什么?
2.接口的作用是什么?
3.如何实现接口的通道?
4.如何预定义接口规则?
5.接口测试的概念是什么?
6.接口测试的作用是什么?
7.接口测试三要素是什么?
8.接口测试可以怎样分类?

9.RESTful三要素

这篇关于从零开始的软件测试学习之旅(七)接口测试三要素及案例的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/968846

相关文章

RabbitMQ消费端单线程与多线程案例讲解

《RabbitMQ消费端单线程与多线程案例讲解》文章解析RabbitMQ消费端单线程与多线程处理机制,说明concurrency控制消费者数量,max-concurrency控制最大线程数,prefe... 目录 一、基础概念详细解释:举个例子:✅ 单消费者 + 单线程消费❌ 单消费者 + 多线程消费❌ 多

MySql基本查询之表的增删查改+聚合函数案例详解

《MySql基本查询之表的增删查改+聚合函数案例详解》本文详解SQL的CURD操作INSERT用于数据插入(单行/多行及冲突处理),SELECT实现数据检索(列选择、条件过滤、排序分页),UPDATE... 目录一、Create1.1 单行数据 + 全列插入1.2 多行数据 + 指定列插入1.3 插入否则更

Python通用唯一标识符模块uuid使用案例详解

《Python通用唯一标识符模块uuid使用案例详解》Pythonuuid模块用于生成128位全局唯一标识符,支持UUID1-5版本,适用于分布式系统、数据库主键等场景,需注意隐私、碰撞概率及存储优... 目录简介核心功能1. UUID版本2. UUID属性3. 命名空间使用场景1. 生成唯一标识符2. 数

PostgreSQL的扩展dict_int应用案例解析

《PostgreSQL的扩展dict_int应用案例解析》dict_int扩展为PostgreSQL提供了专业的整数文本处理能力,特别适合需要精确处理数字内容的搜索场景,本文给大家介绍PostgreS... 目录PostgreSQL的扩展dict_int一、扩展概述二、核心功能三、安装与启用四、字典配置方法

Python中re模块结合正则表达式的实际应用案例

《Python中re模块结合正则表达式的实际应用案例》Python中的re模块是用于处理正则表达式的强大工具,正则表达式是一种用来匹配字符串的模式,它可以在文本中搜索和匹配特定的字符串模式,这篇文章主... 目录前言re模块常用函数一、查看文本中是否包含 A 或 B 字符串二、替换多个关键词为统一格式三、提

Python get()函数用法案例详解

《Pythonget()函数用法案例详解》在Python中,get()是字典(dict)类型的内置方法,用于安全地获取字典中指定键对应的值,它的核心作用是避免因访问不存在的键而引发KeyError错... 目录简介基本语法一、用法二、案例:安全访问未知键三、案例:配置参数默认值简介python是一种高级编

MySQL中的索引结构和分类实战案例详解

《MySQL中的索引结构和分类实战案例详解》本文详解MySQL索引结构与分类,涵盖B树、B+树、哈希及全文索引,分析其原理与优劣势,并结合实战案例探讨创建、管理及优化技巧,助力提升查询性能,感兴趣的朋... 目录一、索引概述1.1 索引的定义与作用1.2 索引的基本原理二、索引结构详解2.1 B树索引2.2

从入门到精通MySQL 数据库索引(实战案例)

《从入门到精通MySQL数据库索引(实战案例)》索引是数据库的目录,提升查询速度,主要类型包括BTree、Hash、全文、空间索引,需根据场景选择,建议用于高频查询、关联字段、排序等,避免重复率高或... 目录一、索引是什么?能干嘛?核心作用:二、索引的 4 种主要类型(附通俗例子)1. BTree 索引(

使用Python进行GRPC和Dubbo协议的高级测试

《使用Python进行GRPC和Dubbo协议的高级测试》GRPC(GoogleRemoteProcedureCall)是一种高性能、开源的远程过程调用(RPC)框架,Dubbo是一种高性能的分布式服... 目录01 GRPC测试安装gRPC编写.proto文件实现服务02 Dubbo测试1. 安装Dubb

HTML中meta标签的常见使用案例(示例详解)

《HTML中meta标签的常见使用案例(示例详解)》HTMLmeta标签用于提供文档元数据,涵盖字符编码、SEO优化、社交媒体集成、移动设备适配、浏览器控制及安全隐私设置,优化页面显示与搜索引擎索引... 目录html中meta标签的常见使用案例一、基础功能二、搜索引擎优化(seo)三、社交媒体集成四、移动