参考资料:BiliBili白月黑羽编程
Postman API 接口测试
1.接口测试
我们常说的接口测试(或者API接口测试),其实就是对软件系统消息交互接口的测试
消息交互接口是软件系统和其他软件系统交互的那部分
比如,你正在用浏览器 使用CSDN。
CSDN前端(在浏览器里面运行) 和 后端服务器 之间 就是 消息交互的。
我们可以说 SMS系统前端 和 后端服务器 之间是 消息交互接口
再比如,你手机上使用美团订餐, 美团APP 和 美团服务器之间, 也是消息交互的。
当你提交订单,使用微信支付的时候, 美团服务器 和 微信服务器 之间也是通过 消息交互的。
接口测试就是
- 依据接口规范,写出测试用例
- 使用软件工具,直接通过消息接口对被测系统进行消息收发
- 验证被测系统行为是否正确
接口测试,通常是对服务端做的比较多,但是也有对客户端做的。关键是看 被测系统是 服务端还是客户端。
- 服务端接口测试:测试一个电商的商品查询 API,发送请求后检查返回的商品数据、状态码是否符合要求,不关心前端怎么展示。
- 客户端接口测试:测试电商 APP 的 “商品列表页”,验证 APP 是否能正确调用商品查询 API,是否能处理网络异常、错误响应等场景,不关心 API 后台的实现。
目前的软件系统之间的消息接口大部分是基于HTTP协议收发的。
HTTP协议的特点就是:客户端发出一个HTTP请求给服务端,服务端返回一个HTTP响应。好像程序的API调用。
客户端(比如你的手机 APP、浏览器)是 “提问的人”,主动发起 “请求”(比如 “我要查看电商的商品列表”)。
服务端(比如电商的后台服务器)是 “回答的人”,收到请求后,按规则返回 “响应”(比如返回商品名称、价格、图片链接)。
HTTP 协议就是这两者的 “沟通礼仪”,规定了请求要怎么发、响应要怎么回(比如格式、编码、状态提示),确保双方能看懂彼此的信息。
API(接口)就是服务端对外开放的 “沟通入口”,比如 “商品查询 API”“登录 API”。
HTTP 协议是调用这些 API 的 “工具”—— 你要调用某个 API,就得用 HTTP 协议的规则发请求,服务端通过这个 API 接收请求、返回响应。
所以 接口测试 通常又被称之为 API接口测试 或者 WEB API接口测试
API接口 传递数据信息 是通过HTTP协议进行收发的 ,网站获取网页、图片 、css 等资源, 也是通过HTTP协议进行收发的 。
那么这两者有什么区别呢? 为什么 获取网页、图片这些HTTP消息通常不叫 API 接口消息呢?
网页、图片、css 这些资源,都是 静态资源 , 就是一个个文件存储在服务器上的,获取这些信息,服务端直接读取文件,返回给客户端即可,无需特别的数据处理。
而 API接口请求消息,通常都需要 服务端程序进行 一番处理,比如:对请求的权限检查,从数据库中读出数据,进行信息过滤和 格式转换,最后在HTTP响应中返回给客户端。
接口测试需要 工具 和 被测系统之间进行消息(通常是HTTP消息)的收发, 这个工具可以是别人开发好的,也可以自己开发。
基于 HTTP 的接口测试工具, 常见的 有 Postman、Jmeter等
都是用来 构建HTTP请求消息,并且解析收到的HTTP响应消息, 用户来判断是否符合预期
熟悉 Python 语言的朋友, 也完全可以使用 requests 库,自己写代码发送接收HTTP请求,进行测试.
2.PostManAPI接口测试
2.1 Postman下载与界面介绍
Postman主要用来做基于HTTP的API接口测试
Postman下载链接(官网下载即可)
安装完成后,桌面上Postman的 图标点击它启动 。
启动时要求你注册一个账号,可以先跳过去,选择右下角 continue with the lightweight API client
进入到操作主界面后,可以在右边的 HTTP 请求构建界面的地址栏 里, 输入一个网址比如: www.baidu.***
然后点击send按钮,就可以在界面下方看到 发出的请求 和 收到的响应 的消息构成
2.2 被测系统
Bysms 系统安装与运行 - 白月黑羽
2.3 构建HTTP请求
接口测试最关键的是什么,就是根据接口文档定义构建符合接口要求的各种的HTTP请求
HTTP请求消息构成如下
- Method(请求方法如Get、Post、Put…)
- URL(包括参数)
- Headers(消息头)
- Body(消息体)
Postman的作用就是让我们更方便的构造这些HTTP请求
2.3.1 请求方法、URL、请求头
请求方法
Postman里面可以在 请求方法下拉框 ,非常方便的选择HTTP请求的方法。
- GET:用于获取资源,比如在浏览器中输入网址加载网页、查询商品信息等。它是最常用的请求方法,请求参数通常附在 URL 中。
- POST:用于提交数据,比如用户注册、提交表单、上传文件等。数据会放在请求体中,相对更安全且能传输大量数据。
- PUT:用于更新或替换资源,比如修改用户信息、替换整个商品详情。通常是对资源的完整更新。
- PATCH:用于部分更新资源,比如只修改商品的价格,而不是替换整个商品信息,比 PUT 更灵活。
- DELETE:用于删除资源,比如删除用户账号、删除订单等。
- HEAD:类似 GET,但只返回响应头,不返回响应体,常用于检查资源是否存在、获取资源的元信息(如文件大小、修改时间)。
- OPTIONS:用于查询服务端支持的请求方法,比如客户端想知道某个 URL 支持哪些交互动作,就可以发送 OPTIONS 请求来询问。
URL
GET /api/mgr/customers HTTP/1.1
通常URL还包括域名,上面这个只是域名后面部分的URL,测试文档通常会省略域名,因为他不知道你会部署在哪个服务器或者本机(比如localhost),但你自己做测试要写域名
请求参数
http 请求消息 url 中 需要携带如下参数,
-
action
必填项,填写值为 list_customer
-
pagesize
必填项,分页的 每页获取多少条记录
-
pagenum
必填项,获取第几页的信息
-
keywords
可选项, 里面包含的多个过滤关键字,关键字之间用
空格分开
URL输入框里面输入接口url
比如www.baidu.*** 协议类型 http 可以省略不写
如果是 https ,需要写上.如果网站会自动的重定向,也可以省略。
URL参数可以直接在URL输入框里面 整体输入,也可以在下方 Params 栏里面 逐个输入,参数之前用?参数之间由&隔开
请求头
在下方 Headers 栏里面 可以逐个输入需要额外添加的HTTP请求头
请求头用于在客户端与服务端之间传递元信息,帮助双方理解和处理请求
- 身份与权限验证:例如
Authorization头,可携带令牌或账号密码信息,让服务端确认客户端是否有权限访问资源,像用户登录后调用 API 时,就会通过该头传递认证信息。- 内容描述:
Content-Type头用于说明请求体的数据格式,比如application/json表示请求体是 JSON 格式,application/x-www-form-urlencoded表示是表单数据,方便服务端解析。- 控制缓存:
Cache-Control等头可以控制浏览器或中间服务器的缓存策略,比如设置资源的缓存时长、是否可缓存等,以提升访问速度。- 传递额外信息:还可以自定义请求头,传递一些业务相关的额外信息,比如在请求中加入用户的设备类型、语言偏好等,让服务端能根据这些信息返回更合适的响应。
2.4 请求消息体
有的时候,我们发送HTTP请求需要携带消息体。 最常见的就是POST、PUT请求。
通常API接口测试 HTTP请求的消息体,是大家最容易糊涂的地方。为什么?
因为 消息体是有不同格式的
比如 BYSMS系统要添加一个客户的信息,包括:客户名、联系电话、地址
怎么放到消息体里面传递出去?
通过http请求发送的数据,必须是字节串。我们必须要用字节串来表示 对象,这个术语叫做 序列化
序列化成什么格式呢?
- xml格式
<client>
<name>华山医院代理2</name>
<phone>13599887766</phone>
<addr>上海华山路777号</addr>
</client>
- json格式
{
"name" :"华山医院代理2",
"phone" :"13599887766",
"addr" :"上海华山路777号"
}
不管使用上面的哪种格式,都能起到 传递信息的作用。
所以首先,你必须搞清楚你的接口测试请求消息体数据到底是什么格式 。
API接口里面,比较常见的就是 urlencoded 、 json 、 xml 这3种
根据协议规范, HTTP头里面的 Content-Type 字段指明消息体格式,比如urlencoded为application/x-www-form-urlencoded,json为 application/json
当请求被发送的时候,Postman会根据你设定的消息体格式,自动加上对应的 Content-Type 消息头。
- 如果登录接口消息体的格式 是
urlencoded,Postman中应该这样设置
- 如果添加客户接口消息体的格式 是
json, 所以,Postman中应该这样设置